云与云计算科普,高手请绕道

云计算?

云计算现在算是比较火的一个名词了。从最开始的怀疑,质疑,到普遍的应用,再到现在各大软件公司都开发自己的云,云计算这个方向在企业应用里,就如同SOA一样,已经开始飞入寻常百姓家了。

云计算其实乍听之下确实有点忽悠。主要还是因为现在还没有一个标准。但是云计算要解决的核心问题就是资源。让应用可以按需获取资源,可以灵活的增加减少应用的资源(Scale Up/Down),而不需要惊动应用本身;把应用放在一起,让资源得到更高的利用。因为云计算服务提供商一般都有自己的数据中心,所以云计算的一个基础优势就是可以享受云服务提供商打造的数据中心服务,比如,冗余设计,双线服务,专业高质量的主机维护等等。以下说到的三种云模式,都有这种优势。

(PS:这里插一句,云计算主要还是为企业应用提供服务的,不是面向个人桌面应用的,面对个人桌面应用的应该是虚拟桌面,这个已经是很成熟的系统了)

云计算的三种方式

现在主流的云模式分为三种。分别按照形式叫做SaaS,PaaS和IaaS。

SaaS既Software as a Service,这个其实是最忽悠的,随便一个站点也可以号称自己是SaaS的,比如一个blog,为每个注册的用户提供服务(Service),你可以多花钱,增加上传附件的空间,或者开通别的附加服务,比如视频音频服务等等等等,这就勉强可以说是SaaS了。SaaS最出名的就是Saleforce。其实Saleforce的SaaS确实算云,它提供可靠的,可伸缩的服务,有自己的基础设施,并不是一个简单的web site。而且saleforce已经推出了自己PaaS的平台(PaaS见下面的叙述),让用户可以有二次开发的灵活性。但是对于终端用户来看,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)。

从上面的介绍可以看出,灵活性越大,云服务用户需要关心的底层细节就越多。而灵活性越小,用户需要关心的底层细节越少。

PS:还有一些服务提供商,从不同的出发点搞出了不同的名字,比如CaaS,C代表computing,计算。StaaS,St代表storage。出发点不一样,命名也不一样。

云计算的技术基础

走在前面的云服务提供商已经支撑了很多耳熟能详的应用了,比如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个,而且每个用户的需求都可以得到更好的满足。当然,如果用户继续增长,云服务提供商可以购买更多的主机和更大的上下行带宽为用户服务。这篇文章就扯到这里。如果对云丝毫没有概念,可能有所帮助。

共有云 私有云

云的概念除了出现频率很高的SaaS,PaaS和IaaS之外,还有两个概念也经常冒出来,就是私有云和共有云(private cloud, public cloud)。这两个概念是从另一个侧面描述云的用途。

所谓私有云,就是企业内部使用的,不对外部开放的云系统。

私有云是企业自身为了利用云的各种优势而开发的云系统。一个大的企业,集群肯定是必不可少的。而一个新的系统or功能想上线,就不得不面临申请资源,安装软件,配置环境等一系列的问题。如果可以让资源分配这一块流程化自动化,无疑可以大大提高工作效率,而且可以减少人为操作造成的错误。比如说,一个功能如果需要10台8CoreCPU,100G内存的机器,安装Linux XX版,Oracle XXg,并且五台在A数据中心,五台在B数据中心。如果要认为操作,会非常麻烦,而且不一定就有现成的机器,如果需要购置机器,那就更费事了。同时,企业为了应用系统的安全,隔离,维护和升级的考虑,一般不会在一台物理机器上运行两个不一样的系统,这时候一台配置很高的机器可能大多数时间并没有被跑在上面的应用充分利用。这也是一种很大的资源浪费。

如果使用云系统来管理集群,把资源的分配,配置和管理都流程化标准化,上面提到的问题都会迎刃而解了。企业的私有云可以是PaaS,也可以是IaaS,这个需要根据企业自身业务需求确定。如果一个公司的业务就是跑war包,每个系统都是独立的war包跑在应用服务器上,那做成PaaS很合适。每个系统上线的时候,只要配置好自己需要的资源(CPU,数据库,存储,带宽,数据中心位置等等)就可以扔给云了。企业的私有云是为企业量身打造,肯定会更加方便适用于企业自身的业务。

私有云因为是为了企业自身服务的,所以在权限管理,安全等方面的要求可以不做的很高,主要还是集中在解决繁琐的资源分配,应用系统部署,应用系统的稳定性可用性上。

相对于私有云,共有云的概念就是想外部开放申请和使用的云系统。相比之下就是需要增加用户管理,安全策略等模块。GAE,Amazon EC2这些都是共有云。

Why Cloud

习惯了传统模式之后,可能一下无法理解为什么要兴师动众的上云系统。随着IT业的发展,公司的基础设施规模开始飞速扩大,更好的管理和利用这些资源慢慢变成了一个问题。就个人来说,我对装系统配环境是无比痛恨的。服务器压力大,一会儿硬盘坏了,一会儿路由器出毛病了,机器一多了,故障率再低也几乎每天都有几个机器出问题。如何让这些问题不去影响到上层业务,是一个必须解决的问题。

IT界有句俗话说,所有问题都可以通过增加一层来解决。

增加一层,让上层应用不再直面自己不应该处理的问题,让增加的这一层专门处理普遍的,通用的问题。比如,增加Spring这一层,就可以把Runtime Dependency交给Spring管理;增加Hibernate这一层,就可以把ORMapping交给Hibernate处理,应用不再直面数据库。同时,也增加了隔离性。当Spring中的一个bean改变的时候,别的bean可能并不需要改变代码,只要改改配置文件就行了。同样,从MySQL迁移到Oracle的时候,隔离性也可以帮助我们尽量少的修改代码,而通过修改配置来适应新的环境。笔者曾经悲催的管理过一个SharePoint站点。为了应对站点down掉,站点迁移等一系列的问题,最佳实践就是增加虚拟机这一层,把它装到一个虚拟机上,配置好一切之后,备份初始虚拟环境,然后让虚拟机跑去吧。每天备份SP数据,就算虚拟机挂了,直接用备份的初始环境恢复数据就行了,最多损失一天的数据。

对于企业遇到的基础设施的问题,这里需要增加的一层就是云。云可以通过虚拟化来管理硬件资源,进而可以提供更多的服务。资源分配,资源利用,环境配置,资源管理,环境监控,错误恢复,应用迁移等等都可以在上层应用没有注意到的情况下来进行(比自己玩虚拟机高级多了)。正所谓,不要重复自己,如果一件事情做了一遍又一遍,就应该想办法让它自动化。云平台就是自动化管理硬件资源的解决方案。

如果需要配置一个LAMP环境,手动安装可能能需要下载image,安装,配置,漫长等待后还要测试。不出任何问题可能也要折腾个一天半天的,身心疲乏不说,可能到时候都不一定能成。如果IaaS服务商提供了现成的配置好的image,租用云主机可能只需要将它挂载到云主机上就行了,整个过程可能都不到一个小时,而且保证能用。综合考虑到服务可用性,成本,易用性,无差别服务(无论是卖一小块云还是一大片云,都是享受同样的专业数据中心机器的服务)等等。对比之下,云平台优势就能看得出来了。

相关推荐