李双权,王燕伟(中讯邮电咨询设计院有限公司,北京100048)
各种研究机构、组织、厂商对服务器虚拟化均有自己不同的定义,然而其核心思想是一致的,即它是一种方法,能够通过区分优先次序并能随时随地将服务器资源分配给最需要它们的工作负载,来简化管理和提高效率,从而减少为单个工作负载峰值而储备的资源。服务器虚拟化是一种对服务器计算资源的抽象化,它在物理服务器的基础上构建多个相互独立的虚拟服务器,从而将CPU、内存、I/O等服务器物理资源转化为一组统一管理、可灵活调度、动态分配的逻辑资源。
不管云计算以IaaS、PaaS、SaaS的哪种业务形式出现,都需要基础的计算能力资源。在云计算的计算能力构建过程中,通过服务器虚拟化技术,将服务器硬件资源虚拟成一个整体的逻辑资源池,这个逻辑资源池能配置运行多个业务应用,而且能根据应用的实际需要动态地分配逻辑资源,这种按需分配的模式和动态资源调整的能力能最大幅度地提高服务器资源的利用率。虚拟化技术的这种特点契合了云计算的本质,因此虚拟化是云计算的重要技术要素。
云计算中不可避免地需要使用服务器虚拟化技术,本文就服务器虚拟化的技术要点、服务器虚拟化应具备的功能要素等方面进行探讨。
IT技术的发展可以简略地划分为3个时代。第一代是静态的IT,所有计算能力资源由系统独享;第二代是共享的IT,主要体现在计算能力的共享,但计算资源不能动态调整;第三代则是云计算,所有的信息和数据都在动态的架构上,不仅实现技术能力的共享,还可以实现计算资源的调整。
计算资源包括服务器资源、存储资源、网络资源等,其中重点在于实现服务器资源的虚拟化。若要实现服务器的“按需服务”,就一定要让服务器变成动态的,而这都要看服务器在虚拟化方面的能力,虚拟化是动态的基础,只有在虚拟化的环境下,云计算才有可能。
利用服务器虚拟化技术,将现有服务器物理资源抽象成一个拥有巨大计算能力的“云”资源池,应用系统运行时可以动态调用这个“池”中的所有资源。这样,按照峰值设计服务器资源中浪费掉的那部分就被充分地利用起来了,服务器资源的利用率能提高到60%~80%,这与现有IT系统评价5%~10%的资源利用率形成巨大反差,我们仅需要原来服务器大约25%的资源即可满足信息系统运行需求,节省了约75%的服务器运营成本。
图1是一个典型的云计算平台逻辑层次图。在此架构下,由大量虚拟服务器所构成的虚拟化的硬件平台共同托起了全部软件层所提供的服务。在虚拟化与云计算共同构成的这样一个整体的架构中,虚拟化有效地分离了硬件与软件,而云计算则让人们将精力更加集中在软件所提供的服务上。
云计算必定是虚拟化的,虚拟化给云计算提供了坚定的基础。但是虚拟化的用处并不仅限于云计算,这只是它强大功能中的一部分。
虚拟化给云计算所带来的好处是多方面的,主要包括以下几点。
a)效率。将原本一台服务器的资源分配给了数台虚拟化的服务器,有效地利用了闲置资源,确保企业应用程序发挥出最高的可用性和性能。
b)隔离。虽然虚拟机可以共享一台计算机的物理资源,但它们彼此之间仍然是完全隔离的,就像它们是不同的物理计算机一样。因此,在可用性和安全性方面,虚拟环境中运行的应用程序之所以远优于在传统的非虚拟化系统中运行的应用程序,隔离就是一个重要的原因。
c)可靠。虚拟服务器是独立于硬件进行工作的,通过改进灾难恢复解决方案提高了业务连续性,当一台服务器出现故障时可在最短时间内恢复且不影响整个集群的运作,在整个数据中心实现高可用性。
d)成本。降低了部署成本,只需要更少的服务器就可以实现需要更多服务器才能做到的事情,也间接降低了安全等其他方面的成本。
e)兼容。所有的虚拟服务器都与正常的x86系统相兼容,可部署多套不同的系统,将因兼容性造成问题的可能性降至最低。
f)便于管理。提高了服务器/管理员比率,一个管理员可以轻松管理比以前更多的服务器而不会造成更大的负担。
服务器虚拟化允许具有不同操作系统的多个虚拟机在同一物理机上独立并行运行。每个虚拟机都有自己的一套虚拟硬件(例如RAM、CPU、网卡等),可以在这些硬件中加载操作系统和应用程序。无论实际采用了什么物理硬件组件,操作系统都将它们视为一组一致、标准化的硬件。
虚拟化技术并非云计算时代首创,虚拟化的概念在20世纪60年代首次出现,利用它可以对属于稀有而昂贵资源的大型机硬件进行分区。随着时间的推移,小型服务器和PC可更经济地满足计算能力需求,因此到20世纪80年代,虚拟技术已不再广泛使用。到了20世纪90年代,计算能力需求的激增使得研究人员开始探索如何利用虚拟化技术解决与庞大的IT系统相关的一些问题,例如,利用率不足、管理成本不断攀升和易受攻击等。现在,虚拟化技术处于时代前沿。
图1 云计算平台逻辑层次
按照虚拟化实现的要求,虚拟化技术应具备以下技术要点。
a)在一个物理系统中可以支持多个应用程序和操作系统。
b)可在扩展或扩张体系结构中将服务器整合到虚拟机中。
c)计算资源被视为以可控方式分配给虚拟机的统一资源池。
d)虚拟机与主机和其他虚拟机完全隔离,如果一个虚拟机崩溃,所有其他虚拟机不会受到影响。
e)虚拟机之间不会泄露数据,而且应用程序只能通过配置的网络连接进行通信。
f)完整的虚拟机环境保存为单个文件,便于进行备份、移动和复制。
g)为应用程序提供标准化的虚拟硬件,可保证兼容性。
h)整合多余硬件和提高服务器利用率。
目前服务器虚拟化中的实现层次类别可以分为硬件层虚拟化、逻辑层虚拟化、软件层虚拟化。
a)硬件层虚拟化。硬件层虚拟化指服务器硬件提供结构支持帮助创建虚拟机监视并允许客户机操作系统独立运行,不需要操作系统支持,可直接对硬件资源进行划分,任一分区内的操作系统和硬件故障不影响其他分区。
b)逻辑层虚拟化。逻辑虚拟化是指在系统硬件和操作系统之间以软件和固件的形式将硬件资源进行虚拟化。不需要操作系统支持,任一分区的操作系统故障不影响其他分区。
c)软件层虚拟化。软件虚拟化是指在主操作系统上运行一个虚拟层软件,可以安装多种客户操作系统,任何一个客户系统的故障不影响其他用户的操作系统,需要主操作系统支持。
目前云计算中一般采用廉价的x86服务器构建资源池,也有部分系统根据其需求采用中高档服务器构建资源池,而软件层虚拟化技术使用较少。
图2 虚拟化技术层次
相对硬件虚拟模式而言,逻辑虚拟模式会占用一定比例的系统资源。目前大中型服务器采用硬件虚拟化;AIX和HP-UX上的虚拟效率在90%以上,虚拟化损耗约为5%;而x86架构一般采用逻辑虚拟化,虚拟效率则在80%左右,虚拟化损耗大约为20%。
在云计算的实现中,上述虚拟化技术类别均有涉及,服务器虚拟化实现技术主要是分区(包括硬分区或软分区,也称物理或逻辑分区)和底层硬件模拟(部分模拟或完全模拟)。
分区是小型机中广泛使用的一种虚拟化技术,通常由服务器的软件层和硬件层共同实现,为上层操作系统和应用提供相互隔离的运行环境。采用分区技术的服务器中,服务器的固件记录分区的配置信息,用以界定每个分区能够访问的CPU、内存等资源的范围和数量。同时,服务器底层软件可以通过对不同资源的激活和释放等操作,实现资源在不同分区之间的调度。分区技术起源于大型主机,目前小型机厂家的许多虚拟化产品,例如HP的nPar、IBM的lPar都是基于或部分基于分区技术实现的。
底层硬件模拟是目前大多数虚拟化产品使用的虚拟化技术,它利用虚拟机监视器(VMM,也叫虚拟机管理程序)来模拟底层硬件的功能,为上层操作系统提供虚拟的运行环境。从操作系统的角度来看,运行在虚拟机上与运行在其对应的物理服务器上几乎没有区别。
采用VMM实现的服务器虚拟化通常分为2种类型。
3.2.1 Type I:裸金属架构
Type I虚拟化架构(见图2中逻辑层虚拟化部分)不需要在服务器上先安装操作系统,而是直接将VMM安装在服务器硬件设备中,本质上Type I架构中的VMM也可以认为是一个操作系统,只不过是非常轻量级的操作系统(实现核心功能)。
VMM实现从虚拟资源到物理资源的映射,当虚拟机中的操作系统通过特权指令访问关键系统资源时,VMM将接管其请求,并进行相应的模拟处理。为了使这种机制能够有效地工作,每条特权指令的执行都需要产生“自陷”以便VMM能够捕获该指令,从而使得VMM能够模拟执行相应的指令。VMM通过模拟特权指令的执行,并将处理结果返回给指定的客户虚拟系统的方式,实现了不同虚拟机的运行上下文保护与切换,从而能够虚拟出多个硬件系统,保证了各个客户虚拟系统的有效隔离。
然而,x86体系结构的处理器并不是完全支持虚拟化的,因为某些x86特权指令在低特权级上下文执行时,不能产生自陷,导致VMM无法直接捕获特权指令的执行。
目前,针对这一问题的解决方案主要有基于动态指令转换或硬件辅助的完全虚拟化技术和半虚拟化技术。
完全虚拟化是对真实物理服务器的完整模拟,在上层操作系统看来,虚拟机与物理平台没有区别。操作系统察觉不到是否运行在虚拟平台之上,也无须进行任何更改,因此完全虚拟化具有很好的兼容性,在服务器虚拟化中得到广泛应用。
从技术实现来说,完全虚拟化需要VMM能够处理虚拟机所有可能的行为。完全虚拟化的发展经历了基于软件辅助和基于硬件辅助2个阶段。
a)软件辅助的完全虚拟化。在x86虚拟化早期,由于x86体系没有在硬件层次上对虚拟化提供支持,因此许多商业的虚拟化产品都采用了基于软件辅助的完全虚拟化技术,例如Vmware ESX Server、VMware Workstation和Microsoft Virtual Server系列产品。为了正确处理不能直接捕获的虚拟机特权指令,完全虚拟化引入了动态指令转换,通过在运行时动态执行指令扫描以发现特权指令,然后依据VMM状态执行指令的二进制转换,使得特权指令的执行跳转到等价模拟代码段处,从而实现与自陷相同的目标。 基于软件辅助虽然能够实现完全虚拟化,但由于所有指令都要经过VMM进行处理,这种虚拟化的性能受动态指令转换引擎设计和实现的影响比较大。
b)硬件辅助的完全虚拟化。硬件辅助虚拟化是通过修改x86 CPU指令的语义,使其直接支持虚拟化。这一工作必须在CPU中进行,也就是Intel-VT技术和AMD-V技术。通过引入新的处理器操作来支持虚拟化,使得虚拟机的各种特权指令能够被CPU所截获,并通过异常报告给VMM,这样就解决了虚拟化的问题。 硬件辅助虚拟化是一种完备的虚拟化方法,部分虚拟化软件产品,例如Microsoft的Hyper-V目前必须借助于CPU硬件辅助才能实现虚拟化。
完全虚拟化是处理器密集型技术,因为它要求hypervisor管理各个虚拟服务器,并让它们彼此独立。减轻这种负担的一种方法就是,改动客户操作系统,让它以为自己运行在虚拟环境下,能够与hypervisor协同工作。这种方法就叫半虚拟化。
与完全虚拟化技术不同,半虚拟化技术通过修改操作系统代码使特权指令产生自陷。半虚拟化技术最初由Denali和Xen项目在x86体系架构上实现。通过对客户操作系统的内核进行适当的修改,使其能够在VMM的管理下尽可能地直接访问本地硬件平台。半虚拟化技术降低了由于虚拟化而引入的系统性能损失。半虚拟化技术的主要实现思路是:对于内存分段管理的虚拟化,要求客户操作系统对硬件分段描述符的更新由VMM进行验证,这也就要求客户操作系统不能有高于VMM的特权级别和不允许访问VMM保留地址空间;对于内存分页管理的虚拟化,要求客户操作系统可以直接读取硬件页表,但对页表的更新需要VMM进行验证和处理,VMM支持客户虚拟系统可以分布在不连续的物理内存上;对于客户虚拟系统,其只能运行在低于VMM的特权级别上;客户虚拟系统需要注册一个异常处理函数的描述符表,直接支持VMM的虚拟化;客户虚拟系统的硬件中断机制被VMM中的Event处理机制代替;每个客户虚拟系统都有自己的时钟接口,并且可以了解真实的时间和虚拟的时间;客户虚拟系统通过异步I/O的内存区域和外部设备 (网络、硬盘)来传递数据,采用事件处理机制代替硬件中断通知机制。
准虚拟化技术的优点是性能高。经过准虚拟化处理的服务器可与hypervisor协同工作,其响应能力几乎不亚于未经过虚拟化处理的服务器。
3.2.2 Type II:寄居架构
Type II虚拟化架构 (见图2中软件层虚拟化部分)中,VMM安装在已有的主机操作系统(宿主操作系统)之上,通过宿主操作系统来管理和访问各类资源(如文件和各类I/O设备等)。这类虚拟化架构系统损耗比较大。
就操作系统层的虚拟化而言,没有独立的hypervisor层。主机操作系统负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。一个明显的区别是,如果使用操作系统层虚拟化,所有虚拟服务器必须运行同一操作系统 (不过每个实例有各自的应用程序和用户账户)。
虽然操作系统层虚拟化的灵活性比较差,但本机速度性能比较高。此外,由于架构在所有虚拟服务器上使用单一、标准的操作系统,管理起来比异构环境要容易。
上述各种虚拟化方法都有各自的优点,总体来说,裸金属架构下的半虚拟化技术的优点得到了验证,也是目前各厂家重点发展的技术。
服务器虚拟化解决方案在不同的场景实现的功能各不相同,在云计算中虚拟化技术应具备以下功能。
a)服务器“一变多”。支持在一台物理服务器中创建多个相互独立的虚拟服务器,每个虚拟服务器各自拥有计算、存储和网络等资源,运行各自的操作系统和应用。
b)设备资源抽象化。支持通过虚拟化软件功能,将物理服务器中的CPU、内存、I/O等资源进行抽象化,将原先与具体物理服务器和物理设备绑定的资源转化为可以统一分配和管理的一组逻辑资源。 通过资源抽象,服务器资源不再与具体物理设备以及上层应用绑定,能够灵活分配,被不同虚拟服务器共享。
c)32位/64位支持。为了使虚拟服务器能够充分满足企业现有IT系统的应用需求,同时提供较强的扩展能力,虚拟化产品应支持在旧有32位物理服务器上运行32位虚拟服务器,以及在新的64位物理服务器上运行32位或64位虚拟服务器的能力。
d)支持多种操作系统。物理服务器所支持的各种操作系统类型及版本,在对该物理服务器进行虚拟化后,也能够在创建的虚拟服务器中安装并正常运行。
e)兼容服务器和存储设备。服务器虚拟化产品需具备广泛的物理服务器硬件设备兼容性,服务器虚拟化产品必须支持市场上主流设备厂商提供的服务器。虚拟化产品功能的实现,不得依赖于特殊的服务器硬件设备。
f)虚拟服务器的创建。创建过程需提供用户交互方式,引导用户设定虚拟服务器名称、资源类型和数量、操作系统类型、网络设置等配置参数。支持通过第三方工具或者编写脚本等方式,实现虚拟服务器及其操作系统和应用的自动化安装和配置,并支持远程操作。
g)虚拟服务器的模板和复制。为了实现虚拟服务器的快速部署,服务器虚拟化产品需提供通过模板的方式克隆已有虚拟服务器的能力。
h)支持P2V转换。P2V是指将物理服务器连同上面安装的操作系统和应用转换为虚拟服务器,常用于将已有应用系统由物理服务器平台迁移到虚拟服务器平台。在创建虚拟服务器时,应支持通过P2V方式实现虚拟服务器的快速部署。
i)虚拟网络支持。虚拟服务器须提供对网卡和交换机等网络设备的虚拟化支持,虚拟网卡和虚拟交换机通过物理网络设备接入物理网络。为了提高通信效率,减少对物理网络设备的压力,虚拟服务器之间的通信可配置为通过虚拟网卡以及虚拟交换机的方式进行,无须通过物理网卡。
j)虚拟服务器运行控制。可通过手动或自动的方式,对虚拟服务器的运行状态进行控制,包括虚拟服务器的启动、关闭、暂停、重新启动、恢复、快照,迁移操作等。可对虚拟服务器的运行状态进行快速在线备份,虚拟服务器不需要暂停或关闭。可对虚拟服务器在需要的时候恢复到任一备份点,恢复后虚拟服务器的状态应该与备份时一致。
k)可使用资源分配。对于包含特定资源类型、数量等要求的资源分配请求,虚拟化管理平台能够从统一管理的虚拟化服务器资源池中,自动选择合适的物理服务器进行资源分配。为有效利用所分配的资源,促进资源共享,在为虚拟服务器分配能够使用的CPU、内存、I/O等资源数量时,支持指定可使用资源的最大值和最小值。虚拟服务器在运行过程中实际使用的资源,允许随工作负载在分配的资源范围内变动。
l)资源调度和虚拟服务器迁移。虚拟服务器自身的资源调度,或者虚拟服务器在不同物理服务器之间的迁移可以由管理员手动进行,也可以按照事先设置的策略自动进行。通过策略可以实现虚拟服务器资源配置的自动化和智能化,提高设备资源利用率和系统可用性。资源调度策略的触发方式包括定时触发、在预先设定的时间触发、资源利用率阈值触发。
m)虚拟化管理功能。虚拟化的管理需提供网络内部各种软硬件资源的统一管理,包括物理服务器 (编号、名称、IP地址等)、虚拟服务器(编号、名称、操作系统、IP地址等)、存储及网络设备(编号、名称、类型等)。
n)运行状态监控。对物理服务器和各个虚拟服务器的运行状态进行实时监控,记录详细的数据,运行状态监控涉及的性能指标包括CPU利用率、内存利用率、磁盘I/O读写速率、网络I/O通信速率、存储数据量等。
o)故障告警管理。虚拟化的管理支持实时监测网络中各物理服务器和虚拟服务器的运行状态变化情况,针对可能引发潜在性问题的配置更改、资源不足、设备故障等故障情况,提供告警界面和信息。
目前虚拟化实现的技术非常多,涵盖各个层面的虚拟化技术,云计算在实施过程中应结合需要实现的性能和功能要求选择相应的虚拟化技术。一般选择虚拟化技术应注意以下要求。
a)性能。在评估不同虚拟化技术的性能时,需要考虑在一台物理服务器上能够运行的虚拟服务器的数量限制。尽管所有的虚拟化技术对虚拟服务器的数量都没有限制,但在过去由于过高的额外损耗,根本就不能支持更多的虚拟服务器数量。同时如果虚拟化对物理服务器的处理损耗较高,那只能运行非产品级或不太重要的应用服务。虚拟化的应用程序的运行效率差异很大,有的能够做到接近原始物理环境下运行的效率,有的则低劣到终端用户所难以接受的程度。同一虚拟化技术路线的不同产品性能也有很大差异。
b)虚拟化平台管理工具。虽然IT系统的硬件成本较高,但带来的维护成本同样不可忽视,完备的管理工具可有效降低系统的维护成本。常见管理性任务包括操作系统和应用程序更新、打补丁、备份、安装、开通和应用管理、服务流程、统计分析等等。因此对于虚拟化基础设施的管理而言,管理工具就更加重要,只有很好地进行资源的管理和监控才能真正做到有效地利用虚拟服务器的资源。
c)平台支持。虚拟化技术将虚拟服务器从其下的硬件中抽象出来,但这并不意味着虚拟基础结构可以支持任何硬件。需要特别注意的是,硬件辅助虚拟化必须硬件支持;而操作系统虚拟化技术建立在标准的操作系统之上,所以操作系统虚拟化产品部署过程更容易。某些虚拟化技术除了支持基本的硬件,还有充分利用所有硬件的能力,包括支持SMP、64位处理器,直到16路CPU和64 GB的内存。
d)迁移。虚拟化技术将虚拟服务器从硬件中抽象出来,这样做最大的好处是虚拟服务器可以在不同物理服务器中来回迁移。迁移能力允许将虚拟服务器克隆出来,或从一台物理服务器迁移到另外一台。迁移的好处包括:消除由于硬件升级或出现问题时造成的宕机时间,避免软件更新时的宕机时间,可以按需求将虚拟服务器迁移到更强或更弱的服务器上。
e)隔离和安全。对于隔离和安全问题,每种虚拟化技术的处理方式都不同。所有虚拟计算机必须完全隔离,这样进程、动态连接库及应用程序才不会影响同一台服务器的其他虚拟服务器上的应用。相对于普通服务器,由于虚拟化技术改变了访问节点和不同的组件,所以不太可能对于虚拟服务器实施常规性攻击。同隔离一样,对于同一台物理服务器上的2个虚拟服务器来说,彼此之间的安全同样重要。
f)开通效率。每个虚拟化解决方案的服务器开通能力是不同的。某些解决方案提供了模板和预先设置工具或定制配置提前缩短了开通时间。不同处理方法的开通时间从30 s到1 h有很大的差别。与独立服务器相比,虚拟服务器急剧地缩短了服务器的开通时间。
g)成本。服务器虚拟化提高了IT系统的利用率,降低了系统硬件上的投入,但同时增加了虚拟化技术的费用支出,在衡量系统性价比时不仅需要横向比较不同虚拟化方案的成本,还需要纵向考虑增加虚拟化技术后的成本。
服务器虚拟化是云计算的必备选项,有着显著的优点,但也有相应的缺点,在技术使用过程中应注意扬长避短。
服务器虚拟化技术具有以下优点。
a)维护运行在早期操作系统上的业务应用。对于某些早期操作系统,发行厂商已经停止了系统的维护,不再支持新的硬件平台,而重写运行在这些系统上的业务应用又不现实。为此,可以将这些系统迁移到新硬件平台上运行的虚拟系统上,实现业务的延续。
b)提高服务器的利用率。将多种低消耗的业务利用整合到一台服务器上,可以充分发挥服务器的性能,从而提高整个系统的整体利用效率。
c)动态资源调配,提升业务应用整体的运行质量。可在一台计算机内部的虚拟机之间或是集群系统的各个业务之间进行动态资源调配,进而提升业务应用的整体运行质量。
d)提供相互隔离、安全的应用执行环境。虚拟系统下的各个子系统相互独立,即使一个子系统遭受攻击而崩溃也不会对其他系统造成影响。而且在使用备份机制后,子系统可被快速恢复。
e)提供软件调试环境,进行软件测试,保证软件质量。采用虚拟技术后,用户可以在一台计算机上模拟多个系统,多种不同操作系统,使调试环境搭建简单易行,大大提高工作效率,降低测试成本。
服务器虚拟化存在以下问题。
a)虚拟技术的认知。用户对虚拟技术不了解,不明确虚拟技术在提升用户现有系统效率和降低总体运营成本上的优势,这是阻碍虚拟技术推广的最大障碍。
b)虚拟系统的可靠性。客户采用服务器,很大程度上是为了保障业务的稳定性。如果用户在一台服务器上运行多个业务,一旦出现重大硬件故障势必会影响到所有的应用,这种威胁很难消除。而对于用户,这种潜在的业务危险往往也是不可接受的。
e)虚拟系统的运行效率。使用虚拟技术的目的在于提高用户服务器的整体利用效率,如果虚拟系统的运行效率太低,也就失去了它在服务器上应用的价值。
d)平台支持。硬件支持方面,需要虚拟系统能够不断更新,以兼容新的硬件平台。操作系统支持,需要能够支持老操作系统。这样对于某些使用早期操作系统的客户才有意义。对于这两方面,虚拟化平台都需要不断更新,这些都依赖虚拟化技术提供商的维护。
e)部署效率和易用性。当前虚拟化标准尚不统一,移植和管理工具还不够成熟,这也影响到虚拟化的大面积普及。特别是远程管理功能需要配合虚拟化标准工作大力发展,以使得不同的虚拟化平台可以通过网络进行统一管理。
云计算概念的提出和服务器虚拟化技术的发展相辅相成,云计算的实现需要服务器虚拟化的技术支持,服务器虚拟化技术在云计算的推动下得到很好的发展。随着云计算的实现和推广,服务器虚拟化技术将得到更进一步的发展。