书城计算机网络云计算和现代远程教育
19092800000013

第13章 云计算技术(1)

云计算的理念生动地体现了互联网时代的信息服务特性,并且正在推动一系列技术创新去解决互联网平台的服务生命周期管理问题,大规模分布式计算、存储、通信问题,以及服务按需提供、按量计费问题。本章将从技术维度更深入地讨论云计算,着重介绍云计算中的快速部署、资源调度、大规模多租户、海量数据处理、大规模消息通信、大规模分布式存储、许可证管理和计费等关键技术。

4.1快速部署

自数据中心诞生以来,快速部署就是一项重要的功能需求。数据中心管理员和用户一直在追求更快,更高效、更灵活、功能更齐全的部署方案。云计算环境对快速部署的要求将会更高。首先,在云环境中资源和应用不但规模变化范围大而且动态性高。用户所需的服务主要采用按需部署的方式,即用户随时提交对资源和应用的请求。云环境管理程序负责分配资源、部署服务。其次,不同层次云计算环境中服务的部署模式是不一样的,比如虚拟化的基础设施云上的应用都被打包在虚拟机里面,而多租户平台上的应用则会选择更加轻量级的打包方案。另外,部署过程所支持的软件系统形式多样,系统结构各不相同,部署工具应能适应被部署对象的变化。

基于流传输的虚拟机部署方法通过Copy-on-Write的操作方式,使得虚拟机部署可以边传输边启动,可以有效地减少单个虚拟机的部署时间,但是包含了操作系统、中间件、应用软件的虚拟机镜像,大小通常为几个GB到几十个GB,镜像的复制速度会严重影响虚拟机的部署速度和用户体验。另外,虚拟机的激活涉及整个软件栈的配置和关联关系,操作非常复杂,自动化程度的高低直接关系着虚拟机部署的效率。因此,即使采用了流传输来部署,这个过程仍然会耗费大量时间。此外,在部署多个虚拟机时,基于流传输的虚拟机部署采用的是顺序的、串行的部署方法,如果想进一步提高云环境中虚拟机的部署速度,则需要考虑并行部署或者协同部署技术。

并行部署是指将传统的顺序部署方式改变为并行执行,同时执行多个部署任务,将虚拟机同时部署到多个物理机上。理想情况下,并行部署可以成倍地减少部署所需时间,但存储镜像文件所在的部署服务器的读写能力或者部署系统的有限网络带宽却制约实际的并行程度,即部署速度。例如,在网络带宽有限的情况下,同时运行多个部署任务时,这些任务会争抢网络带宽,当网络带宽被占满时,部署速度就不能进一步提高了。在这种情况下,协同部署技术可以用来进一步提高部署速度。

协同部署技术的核心思想是使虚拟机镜像在多个目标物理机之间的网络中传输,而不是仅仅在部署服务器和目标物理机之间传输,从而提高了部署速度。通过协同部署,部署服务器的网络带宽不再成为制约部署速度的瓶颈,部署的速度上限取决于目标物理机之间的网络带宽的总和。基于虚拟化技术和协同部署技术,我们可以构建一个协同部署系统,从而保证大规模数据中心中服务的部署速度、效率和质量。

部署服务器负责将协同部署器及用户空间文件系统(通过I/O操作截获技术,将用户的本地文件访问重定向到网络上)的安装文件发送到被部署节点,并发起部署任务;部署控制器负责协调各个节点之间的部署进度,交换文件片信息;被部署节点在部署任务开始以后,根据启动顺序向用户空间文件系统发出虚拟镜像文件块请求,用户空间文件系统调用协同部署器获取文件块。协同部署技术能够大大提高系统部署的速度。由于物理机之间存在大量的共享带宽,因此协同部署可能会影响其他物理机的网络带宽。

并行部署和协同部署技术同样可以运用到物理解决方案的自动化部署过程中,加速部署过程。云环境中物理解决方案的部署包括两种情形:(1)在构建云平台环境并安装了服务器硬件后,需要在这些硬件上安装云的软件环境,这就涉及大规模的操作系统的部署、虚拟机运行平台的配置、云基础设施层管理软件的安装等;(2)在扩展云平台环境时(例如,为现有的数据中心加入新的物理机),需要在新节点上面部署和配置操作系统、虚拟化平台、中间件等全套软件。

与虚拟机的部署相比,物理解决方案自动化部署的难点在于软件的多样性和解决方案的复杂性。为了能够自动化部署物理解决方案,需要定义一种标准的解决方案打包格式,将软件程序文件、安装配置脚本、元数据等内容一起打包;还需要一个通用的部署引擎和一组自动化安装配置流程,这种流程也被称为工作流(Workflow)。在有些情况下,还需要对应的部署脚本。通过这种方式,部署引擎在接收到解决方案的打包文件以后,能够解析解决方案的元数据,按照自动化流程执行任务或者执行部署脚本,驱动整个解决方案的安装配置过程。

4.2资源调度

资源调度是指在特定的资源环境下,根据一定的资源使用规则,在不同的资源使用者之间进行资源调整的过程。这些资源使用者对应着不同的计算任务(例如,一个虚拟解决方案),每个计算任务在操作系统中对应于一个或者多个进程。通常有两种途径可以实现计算任务的资源调度:在计算任务所在的机器上调整分配给它的资源使用量,或者将计算任务转移到其他机器上。

云计算中虚拟机的出现使得所有的计算任务都被封装在一个虚拟机内部。由于虚拟机具有隔离特性,因此可以采用虚拟机的动态迁移方案来达到计算任务迁移的目的。目前的技术已经实现了在几秒钟内(暂时停机时间为毫秒级)将一个操作系统(即虚拟机)进程从一台物理机器迁移到另一台物理机器,从而实现计算任务在不同物理机器之间的迁移。

云计算的海量规模为资源调度带来了新的挑战。首先,由于云计算环境中虚拟机的数量可能会很多,动态迁移在大规模环境下会遇到一些问题。第一,动态迁移要求迁移虚拟机的双方物理机共享使用一个存储服务,当虚拟机数量非常多时,存储服务可能会成为性能瓶颈,甚至无法提供服务。在这种场景下,需要动态迁移能够支持迁移双方分别使用自己的存储服务的场景。目前比较成熟的技术是V Mware的Storage v Motion 技术,它可以支持动态迁移时实现虚拟机镜像文件在不同存储服务之间的迁移。第二,当虚拟机迁移时,其网络配置是不变的,而在云计算环境中,网络配置需要灵活地进行调整,目前V Mware已经意识到了这个问题,并在最新的v Motion中提供了对网络配置修改的支持。第三,目前动态迁移限制迁移的双方物理机处于同一个广播域内。在云计算环境中,虚拟机的数量非常大时,可能导致广播域无法给所有的虚拟机分配地址。针对这个问题,V Mware推出了v Network Distributed Switch技术,将多个广播域整合成一个虚拟的广播域,并维护所有虚拟机的地址。但这样的场景下还会有新的问题,比如广播风暴、安全问题等,目前业界还在努力解决这些问题。

资源调度需要考虑到资源的实时使用情况,这就要求对云计算环境的资源进行实时监控和管理。云计算环境中资源的种类多、规模大,对资源的实时监控和管理就变得十分困难。在这方面,主要依赖于云计算平台层的技术提供者能够提供详尽的资源使用情况数据。此外,一个云计算环境可能有成千上万的计算任务,这对调度算法的复杂性和有效性提出了挑战,调度算法必须在精确性和速度之间寻找一个平衡点,或者提供给用户多种选择,是偏重精确性还是速度。对于虚拟化技术的云基础设施层,虚拟机的大小一般都在几个GB以上,大规模并行的虚拟机迁移操作很有可能会因为网络带宽等各因素的限制而变得非常缓慢。

从调度的力度来看,虚拟机内部应用的调度才是云计算用户更关心的。如何调度资源满足虚拟机内部应用的服务级别协定也是目前待解决的一个难题。以性能为例,一个应用资源调度系统需要监控应用的实时性能指标,例如,吞吐量、响应时间等。通过这些性能指标,结合历史记录及预测模型,分析出未来可能的性能值,并与用户预先制定的性能目标进行比较,得出应用是否需要及如何进行资源调整的结论。目前,大多数虚拟化管理方案只能通过在虚拟机级别上的调度技术结合一定的调度策略来尝试为虚拟机内部应用做资源调度,普遍缺乏精确性和有效性。为了能够根据虚拟机内部应用的需求进行资源调度,需要有一套对于虚拟机内部应用的形式化记录方式。另外,需要一套形式化的方法能够将应用的服务级别协定映射为一组资源调度的需求或者规则,这样,资源调度程序才能实现针对虚拟机内部应用需求的资源调度。

4.3大规模多租户技术

传统的软件运行和维护模式要求软件被部署在用户所购买或租用的数据中心当中,这些软件大多服务于特定的个人用户或者企业用户。在云计算环境中,更多的软件以SaaS的方式发布出去,并且通常会提供给成千上万的企业用户共享使用来降低每个企业用户的成本。与传统的软件运行和维护模式相比,云计算要求硬件资源和软件资源能够更好地共享,具有良好的可伸缩性,任何一个企业用户都能够按照自己的需求对SaaS软件进行客户化配置而不影响其他用户的使用。多租户(Multi-Tenant)技术就是目前云计算环境中能够满足上述需求的关健技术。

多租户技术是一项云计算平台技术,该技术使得大量的租户能够共享同一堆栈的软、硬件资源,每个租户能够按需使用资源,能够对软件服务进行客户化配置,而且不影响其他租户的使用。

在多租户作为一项平台技术时,需要考虑提供一层抽象层,将原来需要在应用中考虑的多租户技术问题,抽象到平台级别来支持,需要考虑的方面包括安全隔离、可定制性、异构服务质量、可扩展性以及编程透明性等等。同时在支持各个方面时需要考虑到应用在各个层面(UI、业务逻辑、数据)可能涉及的各种资源。各个层面对应用中可能涉及的各种资源提供相应的平台级多租户技术的支持,IT人员经常会面临选择虚拟化技术还是多租户技术的问题。多租户与虚拟化的不同在于:虚拟化后的每个应用或者服务单独地存在一个虚拟机里,不同虚拟机之间实现了逻辑的隔离,一个虚拟机感知不到其他虚拟机;而多租户环境中的多个应用其实运行在同一个逻辑环境下,需要通过其他手段,比如应用或者服务本身的特殊设计,来保证多个用户之间的隔离。多租户技术也具有虚拟化技术的一部分好处,如可以简化管理、提高服务器使用率、节省开支等。从技术实现难度的角度来说,虚拟化已经比较成熟,并且得到了大量厂商的支持,而多租户技术还在发展阶段,不同厂商对多租户技术的定义和实现还有很多分歧。当然,多租户技术有其存在的必然性及应用场景。在面对大量用户使用同一类型应用时,如果每一个用户的应用都运行在单独的虚拟机上,可能需要成千上万台虚拟机,这样会占用大量的资源,而且有大量重复的部分,虚拟机的管理难度及性能开销也大大增加。在这种场景下,多租户技术作为一种相对经济的技术就有了用武之地。

目前普遍认为,采用多租户技术的SaaS应用需要具有两项基本特征:第一是SaaS应用是适应于Web的,能够服务于大量的租户并且可以非常容易地伸缩;第二则在第一的基础上要求SaaS平台提供附加的业务逻辑使得租户能够对SaaS平台本身进行扩展,从而满足更特定的需求。目前,多租户技术面临的技术难点包括数据隔离、客户化配置、架构扩展和性能定制。

数据隔离是指多个租户在使用同一个系统时,租户的业务数据是相互隔离存储的,不同租户的业务数据处理不会相互干扰。多租户技术需要实现安全、高效的数据隔离,从而保证租户数据安全及多租户平台的整体性能。对多租户的数据库管理有三种基本方式:第一种方式是给每一个租户创建单独的数据库,这样做的好处是租户间数据充分隔离,缺点是数据库管理的成本和开销比较大;第二种方式是将多个租户的数据保存在同一个数据库中,但是采用不同的Schema,这样在一定程度上减少了数据库的管理成本和开销,但是相应地影响了数据隔离的效果;第三种方式是将多个租户的数据保存在一个数据库中,采用相同的Schema,也就是说将数据保存在一个表或者一类具有相同Schema的表中,通过租户的标识码字段进行区别,这样的管理成本和开销最低,但是数据隔离的效果最差,需要大量的安全性检验来保障租户间的数据隔离。