云与云计算科普,高手请绕道
云计算现在算是比较火的一个名词了。从最开始的怀疑,质疑,到普遍的应用,再到现在各大软件公司都开发自己的云,云计算这个方向在企业应用里,就如同SOA一样,已经开始飞入寻常百姓家了。
云计算其实乍听之下确实有点忽悠。主要还是因为现在还没有一个标准。但是云计算要解决的核心问题就是资源。让应用可以按需获取资源,可以灵活的增加减少应用的资源(Scale Up/Down),而不需要惊动应用本身;把应用放在一起,让资源得到更高的利用。因为云计算服务提供商一般都有自己的数据中心,所以云计算的一个基础优势就是可以享受云服务提供商打造的数据中心服务,比如,冗余设计,双线服务,专业高质量的主机维护等等。以下说到的三种云模式,都有这种优势。
(PS:这里插一句,云计算主要还是为企业应用提供服务的,不是面向个人桌面应用的,面对个人桌面应用的应该是虚拟桌面,这个已经是很成熟的系统了)
现在主流的云模式分为三种,SaaS既Software as a Service,这个其实是最忽悠的,随便一个站点也可以号称自己是SaaS的,比如一个blog,为每个注册的用户提供服务(Service),你可以多花钱,增加上传附件的空间,或者开通别的附加服务,比如视频音频服务等等等等,这就勉强可以说是SaaS了。SaaS最出名的就是Saleforce。其实Saleforce的SaaS确实算云,它提供可靠的,可伸缩的服务,有自己的基础设施,并不是一个简单的web site。但是对于终端用户来看,SaaS跟一个普通的website没啥不一样。所以很多厂家就开始跟风云概念,啥都是云。就好象纳米技术一样。SaaS是云概念开始提出来的时候,普及的云的概念。以至于很多时候再提起云,给人的感觉就是在忽悠。
SaaS模式下,依靠服务提供商的服务器集群,可以为用户提供可伸缩的资源。用户不用维护服务器,不用操心数据库的备份,不用网络的状态,不用操心机房是不是停电了,是不是漏水了,只需要花钱买服务就行了。但是限制也是非常明显的,用户只能使用服务商提供的服务而已。比如saleforce的用户,也只能在saleforce的云上使用saleforce的服务。
第二种是PaaS既Platform as a Service。比较著名的就是Google App Engine。它提供一个平台,让用户可以把自己的应用部署到这个平台上。目前支持Python和Java。乍听之下,好像跟一个应用服务器上部署多个应用似的。。。没错,初看起来就是这么回事儿。。。但是GAE完全不是这么回事儿,它提供的其实是一个虚拟的,可伸缩的应用环境。首先,GAE提供了自己的SDK,应用程序无法操作一些底层资源,比如文件(没错,不能完全操作文件,因为在PaaS云中的应用没有文件的概念,很多时候就是一个只读的包,比如Java应用可能就是一个war包)。通过这个SDK,用户可以创建自己的web程序,也就是写jsp,servlet等等。同时,GAE还提供了NoSQL存储服务作为数据存储(不能把数据存文件上,文件只能读不能写的)。除了这两大资源之外,GAE还提供了受限的Socket支持,可以抓取URL内容,但是不能直接建立Socket连接。在这些GAE提供的资源之上,用户可以开发部署自己的应用程序。
PaaS模式比SaaS提供的资源更底层,所以也灵活的多。用户可使用PaaS提供的应用服务器、存储、网络等基础服务,开发自己的服务。PaaS随着发展也开始提供更丰富、更灵活,等强大的服务,为上层的应用提供更多的支持。作为PaaS的用户,坏处当然是受到一些限制,比如不能直接操控底层资源。但是好处是可以按照自己的需求购买需要的资源,不需要花不必要的钱。而且在业务发展到需要更多资源的时候,可以花钱购买,而应用本身不需要下线,用户自己也不需要维护。
第三种是IaaS既Infrastructure as a Service。比较著名的就是Amazon EC2。它提供的是一个完整的虚拟机环境,CPU,内存,硬盘,网络等等都是虚拟的,可以动态伸缩。用户可以在虚拟机中安装Linux或者Windows服务器,安装需要的软件,提供自己的应用服务。相比PaaS,IaaS更为高级和底层,适应更高级的用户需求。一般来说,提供IaaS的云服务提供商,也会相应的提供一些别的服务,比如数据库存储服务等。Amazon提供了Amazon RSD (Amazon Relational Database Service)。
云计算的技术基础
走在前面的云服务提供商已经支撑了很多耳熟能详的应用了,比如dropbox就是使用的Amazon EC2。虽然标准还不清晰,但是云计算已经是成熟可商用的技术,而不仅仅是一个概念或者试验阶段的技术。云服务的基础设施是大型数据中心,在此基础之上,云的基础是早已成熟的虚拟化技术,在虚拟化的基础上,提供一套操作,管理和监控的系统。
比如一个服务提供商有100台物理机器,100m上行带宽和100m下行带宽。如果租物理机器出去,租给100个用户,每人1m上下行的带宽。这样的问题是资源无法得到充分合理的利用。用户A可能在1点钟的时候CPU撑满,导致应用服务速度缓慢;而此时用户B可能CPU根本就是闲置的。两点钟的时候AB两个用户情况可能正好反过来。如果A和B都购买新的物理机来应对峰值情况,那么在非峰值的情况下,资源则极大的浪费了。很明显,资源无法以物理机为单位进行合理的配置。
应用虚拟技术,可以在物理机和应用之间增加一层虚拟层。用户直接操作的资源都是虚拟的。用户购买的资源也是虚拟的。再配合相应的管理层实现资源的查找、分配、管理和监控,就可以算是个云了。
以上面的usecase 为例。用户A只需要购买足够的CPU时间,在1点钟峰值来的时候,云会分配足够的CPU资源给A用户的应用。至于这些CPU物理上在哪个机器里,用户根本无需操心。用户A只需要为自己的应用所使用的CPU时间(也可能是虚拟CPU个数)付钱就可以了。这就做到了资源的合理分配,可以充分利用资源。
对于带宽则更明显,用户无需购买带宽,而只需要购买流量。云服务提供商会使用自己已有的宽带来满足用户的需求。可能在某个时刻,用户享受的是50m的上下行速度,但是付出的钱却只和流量相关。资源在云用户之间是共享的,按需分配的。而用户购买的,也是虚拟的资源而非物理的资源。
依靠云技术,虽然还是100台机器,100m上下行带宽,但是可以服务的用户数有可能多于100个,而且每个用户的需求都可以得到更好的满足。当然,如果用户继续增长,云服务提供商可以购买更多的主机和更大的上下行带宽为用户服务。这篇文章就扯到这里。如果对云丝毫没有概念,可能有所帮助。