云计算是大量传统技术和新兴技术的融合与发展,同时又是软/硬件资源提供模式的创新。基于云计算的层次化系统架构,可以对规模庞大、功能繁复的云计算系统(特别是云计算服务体系和关键技术体系)进行剖析,如图2-3所示。
图2-3 云计算的分层体系
云计算系统的构成包括物理基础设施、云计算服务及其实现和云计算运营3个重要组成部分,对各个部分的简述如下。
◎ 物理基础设施:包括数据中心物理基础设施(例如服务器、存储、网络、电源、冷却、安保)及相关的管理技术,是承载云计算系统的基础,其中绿色节能技术是当前关注的热点。
◎ 云计算服务及其实现:是云计算的核心,包括 IaaS、PaaS、SaaS 等各类服务模式及其关键支撑技术。
◎ 云计算运营:包括与云计算服务运营相关的各项关键技术,例如云计算服务接入的认证、监控、统计、分析,云计算系统、用户数据和应用服务的安全性保证,以及云计算服务的计费、支付等。
本书将重点对云计算服务及其关键实现技术进行介绍和分析,基于云计算系统架构全面、深入地阐释各层次对云计算服务的支撑情况及面向云计算服务的关键技术体系。
与传统的PC系统主要面向的是应用程序层的开发者与使用者不同,云计算系统可以在从硬件资源到应用程序的各个层次上为用户提供服务。当前被业界普遍认同的云计算服务分为三类:基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS),这些服务能够对应到云计算系统的层次化架构中:IaaS服务主要在云基础资源层和云操作系统层(特别是虚拟资源管理部分)展开;PaaS服务主要在云系统软件层展开,同时,它需要依托云操作系统管理下的云基础资源;SaaS服务主要在云应用软件层展开。这些不同类型的服务各自具有不同的服务内容和服务交付方式,因此,在该架构的每个层次上都有相应的技术体系为在本层上开展的服务提供支持。
需要注意的是,为了更有效地实施云计算服务交付,实际的应用场景在实现时对相关层次技术的使用并没有非常严格的限定,它们之间往往存在着渗透和重叠,例如IaaS服务和PaaS都需要云操作系统的资源管理功能的有效支持。
IaaS服务是将云中的硬件资源(包括物理硬件资源和虚拟化资源)提供给用户的服务,支撑该服务的技术体系主要包括虚拟化技术和相关的资源动态管理与调度技术。
1.IaaS服务的典型应用场景
Amazon的EC2服务是一种典型的IaaS服务。在该服务中,服务提供商按照用户的需求为其提供虚拟服务器;用户可以通过网络访问虚拟服务器,并像使用物理服务器一样在其上安装和部署自己所需的软件。
为了有效地交付IaaS服务,服务提供商首先需要搭建和部署拥有海量资源(特别是便于管理的虚拟化资源)的资源池供用户随时使用。当获知用户需求后,服务提供商从资源池中选取用户所需的处理器、内存、磁盘、网络等资源,并将这些资源组织成虚拟机提供给用户。对应于云计算系统的层次化架构,IaaS服务的提供需要依赖资源池层和云操作系统资源管理层的关键技术。在资源池层,服务提供商通过使用虚拟化技术,将各种物理资源抽象为能够被上层使用的虚拟化资源,以屏蔽底层硬件差异的影响,并提高资源的利用率;在资源管理层,服务提供商利用资源管理软件根据用户的需求对基础资源层的各类资源进行有效的组织,以构成用户所需的服务器硬件平台,其中涉及基础资源的调度、整合等。
在使用IaaS服务时,用户看到的就是一台能够通过网络访问的服务器。在这台服务器上,用户可以根据自己的实际需要安装软件,不需要关心该服务器底层硬件的实现细节(例如资源的类型、分布位置等),也无须控制底层的硬件资源。但是,用户需要负责对操作系统、系统软件和应用软件等进行部署和管理。
需要指出的是,在实际的IaaS服务交付中,为了方便用户的使用,服务提供商往往会在操作系统层和系统软件层为用户提供增值服务,例如在为用户提供虚拟服务器的同时为其安装好操作系统和相关的中间件、数据库等系统软件。
2.IaaS服务的支撑服务体系
如图2-3所示,服务提供商以虚拟服务器的方式向用户交付IaaS服务,它的技术实现本质是在云操作系统层将下层的云基础资源以虚拟机的方式进行组织,其中的关键技术包括服务器虚拟化及相关的资源管理技术。
服务器虚拟化的目的是改善资源的利用率。目前,单台服务器的能力往往超过了单个用户/业务的需求,造成了大量的资源浪费和能量损耗。服务器虚拟化能够将一台物理服务器虚拟成多台虚拟服务器,供多个用户同时使用,并通过对虚拟服务器进行隔离封装来保证其安全性。服务器虚拟化的实现需要依赖处理器虚拟化、内存虚拟化和I/O设备虚拟化等更细节的硬件资源虚拟化技术,具体的内容请参见本书第3章。
存储虚拟化的目的是构建具有统一逻辑视图的存储资源池供用户按需使用。存储虚拟化将各个分散的存储系统进行整合和统一管理,并提供了方便用户调用资源的接口。另外,存储虚拟化能够为后续的系统扩容提供便利,使资源规模动态扩放时无须考虑新增物理存储资源(例如不同型号的存储设备)中可能存在的差异。存储虚拟化的实现需要针对不同的存储子系统进行特殊的考虑,具体的内容请参见本书第3章。
网络虚拟化的目的是满足在服务器虚拟化应用过程中产生的新的网络需求。服务器虚拟化使每台虚拟服务器都要拥有自己的虚拟网卡设备才能进行网络通信,运行在同一台物理服务器上的虚拟服务器的网络流量都统一经由物理网卡输入/输出。网络虚拟化能够为每台虚拟服务器提供专属的虚拟网络设备和虚拟网络通路,同时,在虚拟化层还可以利用虚拟交换机等网络虚拟化技术提供更加灵活的虚拟组网,具体的内容请参见本书第3章。
虚拟化资源管理的目的是将系统中所有的虚拟硬件资源“池”化,实现海量资源的统一管理、动态扩放,以及对用户进行按需配给。同时,虚拟化资源管理技术还需要对虚拟化资源的可用性、安全性、可靠性提供保障。
需要说明的是,虚拟化资源只是IaaS服务的重要交付方式之一,物理硬件资源的交付同样是IaaS服务的重要内容(例如用户可以直接在“云”中获得一台物理服务器并通过网络对其进行访问和使用),这也对云操作系统层的资源管理技术提出了更高要求,需要它能够同时对物理硬件资源池和虚拟化资源池进行统一的管理和调度。
PaaS服务是为用户提供应用软件的开发、测试、部署和运行环境的服务。这里的“环境”既包括那些用于直接承载应用软件的运行平台(例如应用服务器),又包括支撑软件运行的辅助系统软件(例如数据库)。支撑PaaS服务的技术主要是与分布式系统相关的关键技术。
1.PaaS服务的典型应用场景
Google的App Engine是一种典型的PaaS服务。在该服务中,服务提供商为用户提供了用于部署、运行应用软件的相关软件环境,用户可以通过网络将自己创建的或者从别处获取的应用软件部署到服务提供商的环境上运行。
为了有效地交付PaaS服务,服务提供商首先要为用户屏蔽底层的硬件细节,并对资源进行合理的组织,然后再在其上部署用于支撑应用软件运行的系统软件。对应于云计算系统的层次化架构,PaaS服务的提供需要以底层基础资源层为依托,更重要的是需要依赖云操作系统层和系统软件层的关键技术:首先在云操作系统层对基础资源层中的资源进行有效的组织,然后在此基础上进行系统软件的安装和部署。如第2.2.1节所述,云计算系统的资源组织方式有两种。其中的虚拟机方式,其上的执行环境与传统PC系统相同,并且通常在IaaS服务中一起提供,所以在此不做重点讨论。而分布式集群方式,则首先由云操作系统组织一批物理服务器或者虚拟服务器构成集群,然后再在集群上部署分布式软件系统作为上层软件的开发和执行环境,包括分布式集群管理、分布式程序开发环境、分布式文件系统和分布式数据库系统等。支撑PaaS服务的分布式软件系统要能高效地支持应用软件的执行,更重要的是,要能根据用户部署的应用软件的规模按需扩放。
在使用PaaS服务时,用户看到的是应用软件运行所需的完整的支撑软件环境,类似于传统PC系统的系统软件,PaaS服务提供应用中间件、数据库等功能供用户使用。为了利用这个环境,用户部署的应用软件需要使用该环境提供的接口进行编程。在应用的部署和运行过程中,除了可能要对应用的执行进行部分配置外,用户不必关心任何与操作系统和系统软件相关的问题,只需对他们部署的应用进行管理和控制。
PaaS服务消除了用户自己搭建软件开发平台和运行环境导致的成本和开销,但是应用软件的功能和性能会受到服务提供商提供的环境的约束。特别是当前各服务提供商提供的环境接口尚不统一,也影响了应用软件的跨平台移植性。
2.PaaS服务的支撑服务体系
服务提供商主要以分布式系统的方式向用户交付PaaS服务,它的技术本质是在云操作系统层以分布式集群的方式组织资源、部署相关的分布式软件系统,并将其作为系统软件,因此,支撑PaaS服务的关键技术是分布式系统技术。分布式系统技术主要包括分布式文件系统、分布式数据库、分布式计算模型、分布式同步管理等。虽然这些技术已有较长的研究历史,但是在云计算的背景下,它们在原有基础上又有了长足的发展。
分布式文件系统的目的是在分布式系统中以文件方式实现数据的共享。分布式文件系统实现了对底层存储资源的管理,屏蔽了存储过程的细节,特别是实现了位置透明性和性能透明性,使用户无须关心文件在“云”中的存储位置。与之前的分布式文件系统不同,支撑PaaS服务的文件系统需要具有更强的存储能力、更好的系统可扩放性和更高的可靠性。因此,一些满足云计算需求且具有特殊技术实现的分布式文件系统被提出,具体的内容请参见本书第4章。
分布式数据库的目的是利用分布式系统对结构化数据实现管理和共享。因为分布式文件系统更偏向于对非结构化的文件进行存储和管理,所以分布式数据库是分布式文件系统的有益补充,因为它能够便捷地实现对数据的随机访问和快速查询。与之前主流的基于数据库来管理系统的关系型数据库不同,一类具有更好的系统可扩放性和更高的操作性能的基于分布式文件系统的数据库技术被提出,具体的内容请参见本书第4章。
分布式计算模型的目的是充分利用分布式系统进行高效的计算。之前的分布式并行计算模型普遍采用将数据移动到计算节点进行处理的方法,但是在云计算系统中,分布更为广泛的计算资源和存储资源通过网络互联互通,在进行数据密集型应用时,海量数据的移动将导致巨大的性能损失,因此,一些更适合于云计算场景的分布式计算模型被提出。它们依赖于底层分布式文件系统的支持,能够通过把计算移动到存储节点的方式完成数据处理任务,具有更高的性能,具体的内容请参见本书第4章。
分布式协同管理的目的是确保系统的一致性。因为云计算系统中的所有资源都分散在网络中,一旦由于网络出现异常导致通信不同步,将会造成数据操作的不一致,进而严重影响系统的正常运行。针对支撑PaaS服务的分布式系统的松耦合特性,分布式协同管理技术也有一些特别的设计,具体的内容请参见本书第4章。
总的来说,之前的分布式系统技术在应用时非常强调过程的一致性,因为它们关注的是解决计算密集型(例如迭代计算)问题;而支撑PaaS服务的分布式系统技术在考虑了网络因素的影响后,将维护系统的高可用性作为首要的选择,同时更关注结果的一致性。
SaaS是通过网络将在“云”中运行的应用软件的功能交付给用户的服务,它的交付依赖于云计算架构中下层的必要支持,支撑该服务的技术主要包括用于改善服务交付体验的多租户技术和Web呈现技术等。
1.SaaS服务的典型应用场景
Salesforce是一家典型的SaaS服务提供商,在为用户提供服务的过程中提供在“云”中运行的应用软件,供用户随时接入。用户只需要通过浏览器调用相关的Web服务接口,就可以直接使用应用软件的相关功能。
为了有效地交付SaaS服务,服务提供商首先需要部署软/硬件执行环境,然后针对用户的需求,根据支撑程序执行的底层软/硬件的安装和部署情况,对软件进行设计和实现。对应于云计算系统的层次化架构,应用软件层需要依赖基础资源层、云操作系统层和云系统软件层的支持。如果提供商在云操作系统层以分布式集群的方式组织基础资源,并在系统软件层部署了分布式系统软件,那么应用软件层的软件必须进行分布式改造。服务提供商提供的应用软件运行实例能够同时被多个用户访问和使用,在接收到用户通过网络发送的服务请求后执行用户所请求的功能,并将结果返回给用户。另外,SaaS服务的另一个关键是要尽量保证用户能够获得与在本地运行应用软件一致的体验。
在使用SaaS服务时,大多数情况下用户无须对软件运行的各种细节(包括所用软件的运行软/硬件环境及软件自身)进行管理和控制,而只需要关心一些为方便用户应用而进行的应用配置,通过简单的Web访问就可以获得需要的软件执行结果。云计算系统架构从下至上所有层次的开发、部署、维护等工作都由服务提供商完成,即使系统中发生了一些变化,提供商也要为用户提供一致的访问界面,以最大限度地方便用户的使用。
2.SaaS服务的支撑服务体系
服务提供商以Web服务的方式向用户交付SaaS服务,它的技术本质是在云计算系统架构的应用软件层进行面向Web服务的软件设计和开发,其中的关键技术包括多租户技术和Web呈现技术等。
多租户技术的目的是使不同用户能够通过网络共享同一个应用软件的执行实例。多租户技术要保证不同租户数据的隔离,确保用户访问服务的安全性,还要为用户提供彼此独立的应用体验,实现一定程度的定制化。因为一个执行实例需要被多个用户共享访问,因此用于提供SaaS服务的软件在设计和实现时需要在数据库、应用服务和Web界面等方面进行优化,特别是多租户的横向扩放能力是应对海量用户压力的关键,具体的内容请参见本书第5章。
Web呈现技术的目的是使用户获得更好的应用体验,这也是衡量SaaS服务水平的重要指标。对于SaaS服务的用户而言,他们需要的是便捷的、基于Web的网络访问方式,同时,他们希望获得与在本地执行应用软件相同甚至更好的体验。因此,SaaS服务提供商需要在服务器侧利用更先进的Web呈现技术实现软件服务的功能展现,甚至可以设计必要的客户端,供用户在访问SaaS服务时使用,具体的内容请参见本书第5章。
SaaS服务位于云计算服务体系的顶层,它的有效交付离不开用于支撑IaaS服务和PaaS服务的相关层次的关键技术的支持。服务提供商需要在高效、灵活的软/硬件执行环境的基础上,根据底层软/硬件环境对软件进行设计和实现,才能为用户提供满意的SaaS服务。
云计算系统的服务类型和相关的支撑技术具有多样性和复杂性。利用云计算系统的层次化架构对它们进行全面、合理的剖析,是研究云计算的服务体系及其关键技术体系的历史、现状和未来发展的重要依据。
云计算系统和传统PC系统一样,都具有四层系统架构,而且相应层次的功能具有相似性。与传统PC系统的底层硬件相比,云计算系统的底层基础资源是“池”化的物理硬件资源和虚拟化资源,具有“海量”的特征。云操作系统对下层基础资源的组织主要有虚拟机和分布式集群两种方式,并因此影响了它对上层软件的管控方式。云系统软件也因为受到云操作系统对云基础资源组织形式的影响,需要特别考虑在分布式集群上部署分布式软件系统,以保证应用程序的开发和运行。云应用软件层则在实现方式和访问模式上具有自己的特征,同时它也需要考虑底层软件环境的实现。通过对系统架构的类比分析,云计算系统中的云操作系统层与传统PC 系统中的操作系统层类似,它们都起到了承上启下的作用,是全系统的关键所在。
云计算可以在系统架构的各个层次上为用户提供相应的服务,已经获得广泛认同的IaaS、PaaS、SaaS服务体系都需要在对应的架构层次获得支持。目前,IaaS服务和SaaS服务具有比较成熟的服务模式,业界正在积极地探索PaaS服务。由云操作系统层和云系统软件层支撑的PaaS服务拥有广阔的应用前景,同时,它对上层SaaS服务的交付也有着深刻影响。
在云计算技术体系中,虚拟化及资源管理和调度技术是支撑IaaS服务的核心技术,分布式系统是支撑PaaS服务的核心技术,多租户和Web呈现是支撑SaaS服务的核心技术。相比较而言,虚拟化技术已经日趋成熟,能够有效地支持IaaS服务的交付,但是在IaaS资源的管控(特别是对物理硬件和虚拟资源的统一管理)上还存在问题。在面向PaaS服务的支撑技术中,针对云计算研发的新兴的分布式软件系统取得了较大的成功,但是还需要针对更广阔的云计算领域进行探索。在应用软件层,支撑SaaS服务的核心技术已经多有成功实践,但随着云计算系统架构中应用软件层之下各个层次的相关技术的演进,该领域可能还会出现新的技术。