1.1 云计算的概念
云计算(Cloud Computing)是在2007年第3季度才诞生的新名词,但仅仅过了半年多,其受到关注的程度就超过了网格计算(Grid Computing),如图1-1所示。
图1-1 云计算和网格计算在Google中的搜索趋势
然而,对于到底什么是云计算,至少可以找到100种解释,目前还没有公认的定义。本书给出一种定义,供读者参考。
云计算是一种商业计算模型,它将计算任务分布在大量计算机构成的资源池上,使用户能够按需获取计算力、存储空间和信息服务。
这种资源池称为“云”。“云”是一些可以自我维护和管理的虚拟计算资源,通常是一些大型服务器集群,包括计算服务器、存储服务器和宽带资源等。云计算将计算资源集中起来,并通过专门软件实现自动管理,无需人为参与。用户可以动态申请部分资源,支持各种应用程序的运转,无需为烦琐的细节而烦恼,能够更加专注于自己的业务,有利于提高效率、降低成本和技术创新。云计算的核心理念是资源池,这与早在2002年就提出的网格计算池(Computing Pool)的概念非常相似[3][4]。网格计算池将计算和存储资源虚拟成为一个可以任意组合分配的集合,池的规模可以动态扩展,分配给用户的处理能力可以动态回收重用。这种模式能够大大提高资源的利用率,提升平台的服务质量。
之所以称为“云”,是因为它在某些方面具有现实中云的特征:云一般都较大;云的规模可以动态伸缩,它的边界是模糊的;云在空中飘忽不定,无法也无需确定它的具体位置,但它确实存在于某处。之所以称为“云”,还因为云计算的鼻祖之一亚马逊公司将大家曾经称为网格计算的东西,取了一个新名称“弹性计算云”(Elastic Computing Cloud),并取得了商业上的成功。
有人将这种模式比喻为从单台发电机供电模式转向了电厂集中供电的模式。它意味着计算能力也可以作为一种商品进行流通,就像煤气、水和电一样,取用方便,费用低廉。最大的不同在于,它是通过互联网进行传输的。
云计算是并行计算(Parallel Computing)、分布式计算(Distributed Computing)和网格计算(Grid Computing)的发展,或者说是这些计算科学概念的商业实现。云计算是虚拟化(Virtualization)、效用计算(Utility Computing)、将基础设施作为服务IaaS (Infrastructure as a Service)、将平台作为服务PaaS (Platform as a Service)和将软件作为服务SaaS (Software as a Service)等概念混合演进并跃升的结果。
从研究现状上看,云计算具有以下特点。
1)超大规模。“云”具有相当的规模,Google 云计算已经拥有100多万台服务器,亚马逊、IBM、微软和Yahoo 等公司的“云”均拥有几十万台服务器。“云”能赋予用户前所未有的计算能力。
2)虚拟化。云计算支持用户在任意位置、使用各种终端获取服务。所请求的资源来自“云”,而不是固定的有形的实体。应用在“云”中某处运行,但实际上用户无需了解应用运行的具体位置,只需要一台笔记本或一个PDA,就可以通过网络服务来获取各种能力超强的服务。
3)高可靠性。“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机更加可靠。
4)通用性。云计算不针对特定的应用,在“云”的支撑下可以构造出千变万化的应用,同一片“云”可以同时支撑不同的应用运行。
5)高可扩展性。“云”的规模可以动态伸缩,满足应用和用户规模增长的需要。
6)按需服务。“云”是一个庞大的资源池,用户按需购买,像自来水、电和煤气那样计费。
(7)极其廉价。“云”的特殊容错措施使得可以采用极其廉价的节点来构成云;“云”的自动化管理使数据中心管理成本大幅降低;“云”的公用性和通用性使资源的利用率大幅提升;“云”设施可以建在电力资源丰富的地区,从而大幅降低能源成本。因此“云”具有前所未有的性能价格比。Google中国区前总裁李开复称,Google每年投入约16亿美元构建云计算数据中心,所获得的能力相当于使用传统技术投入640亿美元,节省了40倍的成本。因此,用户可以充分享受“云”的低成本优势,需要时,花费几百美元、一天时间就能完成以前需要数万美元、数月时间才能完成的数据处理任务。
云计算按照服务类型大致可以分为三类:将基础设施作为服务IaaS、将平台作为服务PaaS和将软件作为服务SaaS,如图1-2所示。
图1-2 云计算的服务类型
IaaS 将硬件设备等基础资源封装成服务供用户使用,如亚马逊云计算AWS (Amazon Web Services)的弹性计算云EC2和简单存储服务S3。在IaaS 环境中,用户相当于在使用裸机和磁盘,既可以让它运行Windows,也可以让它运行Linux,因而几乎可以做任何想做的事情,但用户必须考虑如何才能让多台机器协同工作起来。AWS 提供了在节点之间互通消息的接口简单队列服务SQS (Simple Queue Service)。IaaS最大的优势在于它允许用户动态申请或释放节点,按使用量计费。运行IaaS 的服务器规模达到几十万台之多,用户因而可以认为能够申请的资源几乎是无限的。同时,IaaS 是由公众共享的,因而具有更高的资源使用效率。
PaaS 对资源的抽象层次更进一步,它提供用户应用程序的运行环境,典型的如Google App Engine。微软的云计算操作系统Microsoft Windows Azure也可大致归入这一类。PaaS 自身负责资源的动态扩展和容错管理,用户应用程序不必过多考虑节点间的配合问题。但与此同时,用户的自主权降低,必须使用特定的编程环境并遵照特定的编程模型。这有点像在高性能集群计算机里进行MPI 编程,只适用于解决某些特定的计算问题。例如,Google App Engine只允许使用Python和Java语言、基于称为Django的Web应用框架、调用Google App Engine SDK来开发在线应用服务。
SaaS的针对性更强,它将某些特定应用软件功能封装成服务,如Salesforce公司提供的在线客户关系管理CRM (Client Relationship Management)服务。SaaS既不像PaaS一样提供计算或存储资源类型的服务,也不像IaaS 一样提供运行用户自定义应用程序的环境,它只提供某些专门用途的服务供应用调用。
需要指出的是,随着云计算的深化发展,不同云计算解决方案之间相互渗透融合,同一种产品往往横跨两种以上类型。例如,Amazon Web Services是以IaaS发展的,但新提供的弹性MapReduce服务模仿了Google的MapReduce,简单数据库服务SimpleDB 模仿了Google 的Bigtable,这两者属于PaaS 的范畴,而它新提供的电子商务服务FPS 和DevPay以及网站访问统计服务Alexa Web服务,则属于SaaS的范畴。