1.2 云计算的起源
通过观察一些技术的进步,尤其是在硬件(虚拟化、多核芯片)、Internet技术(Web服务、SOA、Web 2.0)、分布式计算(集群、网格)和系统管理(自主计算、数据中心自动化)方面,可以探究云计算的起源。图1.1显示了技术领域的融合,这极大地促进和推动了云计算的发展。
其中,一些技术在早期开发阶段被认为是炒作。然而,这些技术后来受到学术界的极大关注和主要行业参与者的认可。因此,在遵循规范和标准化的过程中,规范和标准化引导这些技术走向成熟并被广泛采用。云计算本身的出现与这些技术的成熟度是息息相关的。仔细看一下形成云计算基础的这些技术,可以发现它们旨在从整体上更清楚地阐述云生态系统。
1.2.1 从大型机到云
目前,IT界正在经历转型,即从内部产生的计算能力通过Internet提供的Web服务到提供效用的计算资源。这种类似趋势发生在大约一个世纪前,当工厂生成自己的电力时,意识到把它们的机器接入新成立的电网更便宜[8]。
作为一种实用工具,云所提供的计算可以称为“基础设施的安全、共享、可扩展性,并根据在Internet上的计算机环境、应用程序和业务流程的需求来付费[9]”。
这种模式给IT服务供应商和客户带来了利益。客户可以降低IT相关的成本,选择外部供应商以获得更廉价的服务,而不是依赖投资的IT基础设施和聘用的人员。这种“按需”模式的组成部分允许客户适应他们的IT应用快速增加或不可预知的计算需求。
IT服务供应商提供的服务实现了更好的运营成本:构建的硬件与软件基础设施提供了多个解决方案并服务于众多用户,从而提高了工作效率,并最终获得了更高的投资回报率(Return On Investment,ROI),以及更低的总体拥有成本(Total Cost of Ownership,TCO)[10]。
一些技术在某种程度上已变成了现实的效用计算概念。在20世纪70年代,公司提供了日常的数据处理任务,如工资自动化,操作共享时间的大型机作为实用工具,这可以为许多应用程序服务并有接近100%的能力操纵它们。事实上,大型机必须以较高的利用率运行,这是由于它们是非常昂贵的,应该合理有效地使用这些费用[8]。
随着快速和廉价微处理器的出现,大型机时代开始没落,IT数据中心集中转移到商用服务器上。除了其明显的优势外,这种新的模式必然导致工作量分离到专用服务器上,这主要是由于软件堆栈和操作系统间不兼容造成的[11]。此外,无法使用有效的计算机网络,这意味着IT基础设施应该设立在应用的附近区域。总之,这些事实阻碍了现代计算机系统实现效用计算。
与旧的发电站用于个别工厂供电类似,现代组织中的计算机服务器和台式机电脑往往没有得到充分利用,因为配置的IT基础设施主要用于理论方面的需求。此外,在发电的早期阶段,电流在没有明显的电压损失时是不能长距离传输的。不过,出现了在数百公里之外产生的电力可供其传输系统使用的新典范。同样,越来越快的光纤网络的问世,使得出现了在很远的距离便可共享计算能力的新技术。
这些事实表明,企业具有使用本地机器提供高速可靠的计算服务的潜能。规模经济和利用率高的优点允许供应商为典型公司提供只占自己一小部分成本的计算服务[8]。
1.2.2 SOA、Web服务、Web 2.0与Mashup
开放标准Web服务(WS)的出现明显地推动了软件集成领域的发展[12]。Web服务可以将运行在不同通信产品平台上的应用整合在一起,使信息以一个应用的形式供他人使用,而且使内部应用可以在Internet上工作。
多年以来,各个组织制定了丰富的WS软件堆栈并使其规范化,这使得多种技术都可以描述、撰写它。在服务、发布和显示服务之间的汇集服务(orchestrate service)、软件包(package)和消息传输表示服务质量(Quality of Service,QoS)的参数,并确保业务接入的安全[13]。
在现有普遍存在的技术(如HTTP和XML)上创建了WS标准,从而用一个共同的机制提供服务,这是实施面向服务架构(Service-Oriented Architecture,SOA)的理想选择。SOA的目标是解决松散耦合,基于标准的与协议无关的分布式计算的要求。在SOA中,把软件资源打包成“服务”,提供标准商务功能自成体系的模块,以及状态或者其他服务的上下文是独立的,这是很明确的。服务通过一个标准定义语言进行描述,并且具有一个公开的接口[12]。
WS的成熟使得人们可以用一种统一的方式来按需访问功能强大的服务。尽管有些WS是为最终用户的应用服务发布的,但是它们的真正能力在于允许其他服务访问其接口。一个遵循SOA范式的企业应用是集合在一起执行复杂业务逻辑的服务集合[12]。
这种整合服务的概念最初专注于企业Web,但在客户领域也获得了发展,尤其是随着Web 2.0的出现。在客户Web中,将信息和服务进行编程汇总,作为复杂成分的结构块(building block)称为混合服务。许多服务供应商(如Amazon、del.icio.us、Facebook与Google)允许人们以SOAP和REST等标准协议公开访问它们的服务API[14]。因此,仅几行代码的整合便可将一个全功能的Web应用付诸实践。
在软件即服务(SaaS)领域,构建来自相同或者不同供应商的其他服务作为云应用的组成部分。像用户认证、电子邮件、工资管理和日历等服务便是结构块的案例。这些案例可以结合业务解决方案重复使用,以防单一的、现成的系统不能提供全部功能。许多结构块和解决方案已在公共领域中得到应用。例如,Programmable Web是市面上数以千计的API和mashup的服务API公共信息库,当结合如Google地图、Flickr、YouTube、Amazon电子商务(Amazon eCommerce)和Twitter等流行API时,会生成从发现电子游戏到气象图的各种有趣解决方案。同样,Salesforce.com提供了AppExchange,它允许第三方开发人员在Salesforce.com组件上开发并共享其解决方案。
1.2.3 网格计算
网格计算使分散的资源聚合,并允许透明地访问这些资源。大部分生产性网格(production grid)如TeraGrid[15]和EGEE[16]寻求共享分布在不同管理域上的计算和存储资源,其侧重点在于加快广泛的科学应用,如气候模型、药物设计和蛋白质分析。
网格实现这一构想的一个关键方面,在于建立标准的基于服务的Web协议,使分散的资源以“发现、访问、分配、监督、支付和计费等,并用一般管理作为一个单一的虚拟系统”。通过定义一套解决网格系统关键问题的核心能力和行为,开放网格服务体系架构(Open Grid Services Architecture,OGSA)解决了这一标准化需求。
Globus Toolkit[18]是一个中间件,它实现了几个标准的网格服务。多年来,它一直在帮助部署一些面向服务的网格基础设施和应用。工具生态系统提供互动式服务网格,包括促进与多个中间件用户间的行动和执行策略,以满足QoS需求的网格经纪层(grid broker)。
一些网格计算活动标准化协议的发展从理论上促进了其在Internet上提供按需计算服务。然而,确保察觉到网格中的QoS是一项艰巨的任务[19]。性能隔离匮乏制约了在各种情景下采用网格,特别是对环境资源的超额认购或者用户不合作。在不可控的方式下,与一个用户或者虚拟组织(Virtual Organization,VO)相关的活动会影响使用同一平台的其他用户可以感知的性能。因此,执行QoS和保证其执行时间是很困难的一件事情,尤其是对时间敏感的应用[20]。
在使用网格时会遇到一些挫折,如对资源的可用性与软件的不同配置,包括不同的操作系统、库、编译器、运行环境等。同时,用户的应用往往只能运行在特定的环境中。因此,一个可移植的障碍常常表现在大多数的网格基础设施上,约束用户在效用计算环境中采用网格[20]。
虚拟化技术可以完美解决在使用网格时遇到的挫折问题,例如在一个物理平台上承载许多不同的软件应用。在这方面,一些研究项目(例如,Globus的虚拟工作区[20])旨在不断发展网格,以支持附加层的虚拟化计算、存储和网络资源。
1.2.4 效用计算
随着网格的日益普及和使用,大量的网格安装都面临着新问题,例如,对资源的过度需求与用户的战略和敌对行为。最初,网格资源管理技术并不能确保在许多系统中公正和公平地访问这些资源。传统指标(吞吐量、等待时间和延迟)未能捕获到用户更微妙的需求。在用户资源需求或工作的最后期限方面,并没有鼓励用户灵活处理,也没有规定紧迫的工作以适应用户的激励机制。
在效用计算环境中,用户对他们的工作指定一个“效用”值。其中,这个效用值是固定的或者随时间变化的一个估值,用以捕获各种QoS约束(截止日期、重要性及满意度)。他们愿意支付这些估值给服务供应商,以满足他们的要求。接着,服务供应商试图将自身效用最大化。这里的效用可能与它们的利润直接关联。供应商可以选择为高收益优先级(即每单位的资源利润)的用户工作,产生一个作为市场的共享系统,在这个市场内用户以效用感知或他们的工作价值为基础对资源进行竞争。有关这些效用计算环境的更进一步的信息和比较,在这些平台[17]上有一个广泛调查。
1.2.5 硬件虚拟化
云计算服务通常由数千台计算机组成的大型数据中心构成。这些数据中心为许多用户服务并存储许多不同的应用。为此,硬件虚拟化完美解决了大多数数据中心在建设和运维方面的问题。
对一个计算机系统资源(包括处理器、内存和I/O设备)进行虚拟化的想法已经有几十年了,这一想法旨在改善共享和利用计算机系统资源[21]。硬件虚拟化允许在一个单一的物理平台上运行多个操作系统和软件堆栈。如图1.2所示,一个软件层、虚拟机监视器(Virtual Machine Monitor,VMM),也称为一个虚拟化管理程序(Hypervisor),间接访问物理硬件并向每个客户机操作系统分配一个虚拟机(VM),这是一套虚拟平台接口 [22]。
一些创新技术(如多核芯片、准虚拟化(paravirtualization)、硬件辅助虚拟化和虚拟机实时迁移)的问世,推动了服务器系统虚拟化的实现。传统上,在共享和利用资源方面,预期效益得到了更好的改善和管理以及更高的可靠性。最近,研究人员和从业人员在大量的服务器和客户端系统上采用虚拟化技术,一直强调在虚拟系统上工作负载管理的三个基本功能:隔离、合并和迁移[23]。
由于所有的程序指令完全局限在一个虚拟机上,因此需要提高其安全性,实现负载隔离。同时,取得了较高的可靠性,这是因为在一个虚拟机内的软件故障并不会影响其他软件[22]。此外,达到了更好的性能控制,一台虚拟机的运行,不会影响另一台虚拟机的性能 [23]。
一些个人和异构工作负载整合到一个单一的物理平台,带来了更好的系统利用率。同时,这种做法能够克服潜在的软件和硬件不兼容问题,在升级的情况下,它可以同时运行老式的操作系统和新的操作系统[22]。
工作负载迁移也称为应用迁移[23],旨在促进硬件维护、负载均衡和灾难恢复。它是由封装在一个虚拟机内的客户机操作系统完成的,并允许挂起(suspend)、完全序列化、迁移到一个不同的平台,并立即恢复或保留到日后恢复[22]。虚拟机的状态包括一个完整的磁盘或分区镜像、配置文件和RAM的镜像[20]。
虚拟机监视器(VMM)平台中存储了许多实用程序或云计算环境。最值得一提的是,接下来的章节将介绍VMWare、Xen和KVM。
VMWare ESXi。VMware是虚拟化市场的先驱。其生态系统包括从服务器和桌面虚拟化的工具到更高层次的管理工具[24]。ESXi是VMWare的一个虚拟机监视器(VMM)。它是一个裸机(bare-metal)虚拟化管理程序,这意味着可以直接在物理服务器上安装它,有些则可能需要一个主机操作系统为它提供先进的处理器、内存和I / O虚拟化技术。尤其是,它可以通过内存膨胀(memory ballooning)和页面共享技术来实现内存的过量使用,从而增加一台单一物理服务器内的虚拟机密度。
Xen。Xen hypervisor 起源于一个开源项目,并成为其他商业和开源虚拟化产品的踏板。它开创了准虚拟化(para-virtualization)的概念,在客户机操作系统上通过一个专门的内核与虚拟化管理程序交互,从而显著提高性能。除了这个开放源码的分发版[25],Xen目前成为众多厂商的商业虚拟化管理程序的基础,最著名的是Citrix XenServer [26]和Oracle VM [27 ]。
KVM。基于内核的虚拟机(Kernel-based Virtual Machine,KVM)是一个Linux的虚拟化子系统。KVM现已成为Linux 2.6.20版本主流内核的一部分,因此Linux的一些原生发行版支持KVM。此外,如内存管理和调度等活动是由现有内核特性所实现的,从而使KVM比控制整个机器的虚拟化管理程序更加简单,其体积较小[28]。
KVM充分利用了提高性能的硬件辅助虚拟化技术,使得它能够支持未修改的客户机操作系统[29];目前,它支持某些版本的Windows、Linux和UNIX [28]。
1.2.6 虚拟设备和开放虚拟化格式
与环境相结合的应用所需的运行环境(操作系统、库、编译器、数据库、应用容器等)称为“虚拟设备”。以虚拟设备的形式包装应用环境简化了软件定制、配置和软件的修补,提高了可移植性。最常见的虚拟设备是一个与硬件要求相关的虚拟机磁盘镜像,它可以很容易地部署在一个虚拟化管理程序上。
已经建立起来的在线交易市场让现成的包含主流操作系统和实用软件的商业和开源设备进行交流。最值得注意的是,VMware虚拟设备市场允许用户在VMWare的虚拟化管理程序或者合作伙伴的公共云上部署设备[30]。Amazon允许开发商共享专门的Amazon机器镜像(Amazon Machine Images,AMI),并使其在Amazon EC2上使用货币化[ 31]。
在众多的虚拟化管理程序中,每一个均支持不同的虚拟机映像格式。不同的格式间互不兼容,因此出现了很大的互操作性问题。例如,Amazon有自己的Amazon机器映像(AMI)格式,它在Amazon EC2公共云中很受欢迎。其他常见的格式有Citrix的XenServer、带有KVM的一些Linux发行版、微软的Hyper-V和VMware的 ESX。
为了便于软件的包装和分发,一些虚拟机厂商(包括VMware、IBM、Citrix、Cisco、Microsoft、Dell&HP)制定了开放虚拟化格式(Open Virtualization Format ,OVF)。OVF以“开放、安全、可移植、高效和可扩展”为目标 [32]。OVF包由一个文件或一系列文件组成,用以描述虚拟机的硬件特性(如内存、网卡和磁盘)、操作系统的详细信息、启动和关机操作、自己的虚拟磁盘、其他包含产品的元数据和许可信息。OVF还支持多台虚拟机(如多层应用)组成的复杂包[32]。
OVF的可扩展性鼓励增加与数据中心和云相关的管理。Mathews等 [33]制定了虚拟机契约(Virtual Machine Contracts,VMC),并将其作为OVF的扩展。VMC对虚拟机运行环境出现的复杂异常起到通信和管理的作用,反之亦然。一个VMC的简单例子是:云消费者想要指定一个最小与最大约定数量的资源,而这个资源是虚拟机所需要的功能;同理,云供应商可以将资源限制表述为约束资源消耗和成本的一种方式。
1.2.7 自主计算
日益复杂的计算系统旨在通过减少人类参与其运作来改善系统,以激励自主计算研究。换句话说,系统应该在人类高层次指导下进行自我管理[34]。
自主或自我管理系统依赖于监控探头和仪表(传感器)、以监控数据为基础的云优化自适应引擎(自主管理者)和开展系统变化的着力点。IBM的自主计算最初为自主系统的四个属性(自配置、自优化、自修复和自保护)的定义起到了推动作用。IBM还提出了自主管理的自主控制回路参考模型,称为MAPE-K(Monitor Analyze Plan Execute-Knowledge)[34,35]。
云计算供应商必须以高效的方式管理大型数据中心。就这个角度而言,自主计算的概念激发了软件技术实施数据中心自动化。这可能会执行一些任务,如正在运行应用的服务水平管理、数据中心的容量管理、积极的灾难恢复和虚拟机配置的自动化[36]。