1.1 虚拟化技术简史

1.1.1 虚拟化技术的起源

虚拟化(virtualization)技术总体上是软硬件相互协作而产生和发展的技术,可以将其视作服务器的“多路复用”技术,即将一台物理服务器模拟(分割)成为多台逻辑上相互独立的服务器——虚拟机。虚拟化技术确保了运行于一台物理机上的多个虚拟机之间具有严格的隔离机制,彼此不会相互影响。对于一个高配置的物理机,通常可以虚拟化为几十台虚拟机,每个虚拟机可以安装不同的操作系统,以供不同的租户选择使用,而在每个虚拟机的租户看来,他们完全“独占”该物理机。

在计算机发展的初期,大型机非常昂贵,也经常得不到充分利用,采用虚拟化技术,将一个大型机虚拟化成几十个虚拟机供其他部门使用,可提升资源的使用效率。因此虚拟化技术是计算机发展的必然结果。

大型机的虚拟分区技术最早可以追溯到20世纪六七十年代。早在1965年,IBM公司就发明了虚拟化技术,允许用户在一台IBM的大型主机上运行多个操作系统,从而让用户尽可能地充分利用昂贵的大型机资源。最早使用虚拟化技术的产品是IBM 7044主机,而“虚拟机”这个专用术语也是首次被IBM 7044主机所正式采纳。到了1965年,IBM System/360 Model 67成为真正意义上的虚拟机的鼻祖,它通过VMM(Virtual Machine Monitor)对所有的硬件接口都进行了虚拟化。而后来的IBM VM/370则更进一步,首次实现了虚拟化嵌套能力,即在一个虚拟机上继续虚拟出多个虚拟机,而在X86服务器上这项技术直到2000年左右才获得了突破。

虽然早在20世纪60年代就已经出现了成熟的虚拟机产品,但直到1977年IBM的管理层才完全接受虚拟机这个强大的新生事物,而仅在一年后(1978年)IBM就已经在全球创建了1000多个虚拟机了。之后虚拟化技术快速发展,以IBM System z系列为代表的大型机虚拟化技术逐步渗入UNIX小型机的领域,成为小型机的标配技术之一。

在IBM之后,惠普也在自己的UNIX服务器上提供了虚拟化技术,并提供了多种虚拟化方案,每种方案都有针对的需求场景,因此惠普逐渐成为小型机(后文简称小机)虚拟化领域的实力厂商。如图1-1所示,惠普的虚拟化方案总体分为以下几种:

图1-1 惠普的虚拟化方案

❑ 硬件分区。

❑ 虚拟分区(软分区)。

❑ 安全资源分区。

其中,硬件分区是指一个单一物理服务器分割为几个不同的虚拟机;虚拟分区则是进一步在一个硬件分区里继续划分多个虚拟分区(或多个虚拟机);而安全资源分区则是在一个虚拟机内划分多个应用隔离区,类似后来的容器技术。

这3种分区技术的应用场景有所区别:硬件分区适合于性能与隔离程度要求高的虚拟化场景,在这种情况下,不同分区内的物理资源完全独立,CPU、内存、I/O等都完全隔离;虚拟分区是从软件层面进行的资源分区,由于同一个物理分区下的多个虚拟分区共享同一份底层物理资源(CPU、内存、I/O等),因此资源的隔离性与性能会差一点,但其优点是分区很灵活,可以随心所欲地设计虚拟分区的大小和数量,多用于测试性能要求不高的虚拟化场景;安全资源分区主要是在安全的场景下进行分区,类似后来的Docker容器技术,具备快速实施以及所占资源少的优点,是一种轻量级的虚拟化技术。

1.1.2 X86平台虚拟化历史

虚拟化技术在大型机时代诞生,在随后的小机时代得到进一步发展,而虚拟化技术的真正爆发则是在“X86时代”,图1-2是X86平台虚拟化进程的示意图。1999年虚拟化技术首次亮相X86平台,随后加速普及到个人计算机,正所谓“旧时王谢堂前燕,飞入寻常百姓家”。

图1-2 X86平台虚拟化进程

长期以来,由于X86 CPU缺乏虚拟化技术所需的关键指令,不能很好地支持虚拟化技术,导致上层相关的虚拟化软件很难实现。后来Intel与AMD意识到虚拟化的重要性,在其新一代的CPU上提供了专门用于虚拟化的指令集,从而加速了X86虚拟化的发展。此外,X86处理器的性能长期以来大大落后于UNIX小机的处理器,因此虚拟化的价值并不大,但随着X86处理器的加速多核化发展,其性能也得到了飞跃式提升。随着硅谷互联网泡沫的破灭,UNIX服务器的市场份额快速萎缩,被X86服务器侵蚀了大部分市场。后来在云计算浪潮的推动下,X86虚拟化技术才首次被真正重视起来。我们看到,X86虚拟化具备了天时、地利、人和的优势,所以注定爆发。

1999年是X86虚拟化技术发展的一个重要里程碑:这一年,VMware公司首次解决了X86平台的虚拟化问题,推出了面向X86平台的商业化虚拟机软件——VMware Workstation,使虚拟化技术开始走向普通用户。

VMware公司的Workstation虚拟机软件可以让普通用户在自己的Windows笔记本式计算机或者台式计算机上很方便地创建出一个虚拟机,并且可以在这个虚拟机上安装各种版本的Linux系统或者Windows系统。我们知道,企业级应用大部分都是安装和部署在Linux服务器上的,为了开发并测试这些应用,项目组通常需要一个专门的服务器,有了VMware Workstation之后,一个普通的笔记本式计算机就可以创建出几个Linux虚拟机来,在无须其他IT人员介入的情况下,开发和测试人员就可以独立完成整个系统的部署和测试过程,从而大大方便了软件开发工作。此外,有了VMware Workstation之后,销售或者售前团队很容易为客户演示一个复杂且庞大的软件系统,只要配备一个高性能的笔记本式计算机,即可在本机虚拟出多个虚拟机,将待演示的系统部署到虚拟机中,随时进行“移动演示”。此外,得益于虚拟机快照功能,采用虚拟机方式进行的软件回归测试、系统备份恢复以及POC演示等活动都极大地节省了工作量和时间。

VMware Workstation技术主要是针对Windows用户开发的,总体上来说属于客户端的虚拟化技术,而VMware服务器端的虚拟化产品则是ESXi。VMware的这些虚拟化产品都是商业软件,并不符合Linux开源精神。所以,2003年Linux(X86平台)上首次出现了开源虚拟化技术——Xen。

Xen是英国剑桥大学推出的一种半虚拟化技术,其特点是需要对部署在虚拟机上的操作系统的代码进行少量修改,使其适应虚拟化环境,因此Xen使用起来有些麻烦。但从另一方面来看,因为修改虚拟机的操作系统代码可以实现比较高的虚拟化性能,所以目前公有云巨头如亚马逊、阿里巴巴的公有云虚拟机都是基于Xen技术定制演变而来的。虽然目前Xen技术已经没落,但它大大加速了X86与Linux虚拟化技术的研究与应用过程,可以说功不可没。但Xen需要修改虚拟机上的操作系统才能实现虚拟化,因此也存在种种弊端和限制,如第三方修改Windows这种闭源操作系统的代码是违反软件许可证的做法。为了更好地支持全虚拟化,2005年Intel和AMD相继推出支持虚拟化技术的全新CPU和芯片组,从而在硬件基础上第一次有了重大突破,实现了硬件辅助虚拟化技术。其原理是在CPU中加入虚拟化指令,这种指令的加入大大加速了整个X86的服务器端虚拟化的发展进程,也促进了新一代Linux虚拟化软件的诞生,这就是后起之秀——KVM。

2006年以色列公司Qumranet宣布了新一代Linux虚拟化软件KVM的诞生,KVM在不到一年的时间里即被纳入Linux内核中并得到支持,成为第一个Linux内核级支持的开源虚拟化软件。KVM实际上已经成为云计算标配的虚拟化技术,也就是从KVM被推出之后,大规模的云计算开始在各个行业当中得到推广,OpenStack底层的虚拟化技术即采用了KVM。

总体来说,X86平台的虚拟化从技术上来讲,主要分为半虚拟化和全虚拟化两种。Xen属于半虚拟化技术,需要对客户操作系统进行定制化改造,这样才能在虚拟层上运行,半虚拟化为用户提供了一个可以改造的通道,可以对虚拟机操作系统进行定制化的改造;后来的KVM则属于全虚拟化,即无须对操作系统进行任何改造,直接就可以在虚拟机上安装。Xen需要对操作系统进行一定的改造,而且长期以来没有被纳入Linux内核中,慢慢地被边缘化了,而KVM则成为真正的赢家。

因为X86平台可以提供便宜、高性能和高可用的服务器,所以X86平台的虚拟化技术突飞猛进,并且首次向人们展示了虚拟化应用的广阔前景。更重要的是,一些用户已经开始在生产环境中大量使用虚拟化技术,他们需要得到新的管理工具,反过来进一步促进了虚拟化技术的发展。不过,与已经有多年历史的UNIX服务器、大型主机上的虚拟化技术相比,X86服务器上的虚拟化仍旧处于早期阶段,但自2006年以来,从X86处理器层面的AMD和Intel积极发布新的芯片,到操作系统层面厂商(如微软、红帽等公司)的推动,以及服务器厂商的积极跟进和数量众多的第三方软件厂商不断涌现,我们看到一个趋于完整的服务器虚拟化的产业生态系统正在逐渐形成。时至今日,虚拟化技术已经不是一个新技术,而是一个越来越普遍的重要基础技术,随着云计算、大数据、物联网、人工智能等新技术的飞速发展,虚拟化技术还将进一步深入发展,最终实现软件定义一切的终极梦想。

1.1.3 三大虚拟化产品

在云计算领域有三大虚拟化产品,它们分别是VMware公司推出的ESXi商业产品以及开源的Xen和KVM,如图1-3所示。

图1-3 三大虚拟化产品

最早一批尝试虚拟化技术的公司,特别是实力雄厚的大公司,基本上都购买并使用过VMware的ESXi系列产品。ESXi系列产品十分完善,其虚拟化技术是独有的,性能也不错,使用起来很方便。但其缺点是十分昂贵,当规模部署以后,成本就很高了。因此一般公司实施小规模云计算的时候,都会以VMware产品为起点,但随着集群规模的扩大,慢慢地都会迁移到开源的Xen或者KVM之上。

Xen是一个开放源代码的虚拟机监视器,最早由剑桥大学开发完成,Xen允许在单个计算机上运行多达100个虚拟机,虚拟机上的操作系统必须进行显式的修改(移植)才能在Xen上运行,虽然修改过操作系统的代码,但操作系统仍然保持用户应用的兼容性。通过修改操作系统代码,使得Xen无须特殊硬件和新的CPU支持就能达到高性能的虚拟化。Xen开通了一个通道,允许虚拟机操作系统跨过虚拟化层直接操作底层硬件,这能保证虚拟机的性能基本达到裸机运行的性能,因此前期诸如亚马逊、阿里巴巴等公有云的提供者基本上都会在这个基础上做一些自己的定制化,以此来提供高性能的公有云服务。Xen在早期不被Linux内核支持,要实现Hypervisor功能,IT管理员需要把开源Xen作为主流内核的补丁来安装,甚至安装后不能对内核进行升级,否则会破坏Xen的功能。难与Linux内核集成的这个缺陷导致后来者KVM一出现就备受关注。

与Xen半虚拟化不同的是,KVM是全虚拟化技术,直接在Linux内核运行,KVM创建的虚拟机直接可以安装Windows、Linux等系统,使用起来也相对方便,但其缺点是由于存在虚拟化的硬件层,所以其网络I/O和存储I/O的吞吐性能会受到影响。虽然可以通过一定的技术降低这个影响,但总体来说虚拟化还是会对I/O吞吐性能产生一定的影响,在做系统设计的时候要充分考虑这个问题。

前有VMware,后有KVM,为了能在虚拟化的地盘上继续分一杯羹,Xen也不断努力,经过漫长的改进,终于在2011年年初获得了Linux的完全支持,但已经错过了提高市场占有率的绝佳机会。而且就在Xen努力靠近Linux内核的这些年,KVM已经获得了长足的发展,之前支持Xen的厂商也改变风向。例如:红帽很快就收购了KVM技术,不断完善自家产品,Red Hat Enterprise Linux(RHEL)5采用的还是Xen Hypervisor,但在RHEL 6中就移除了所有Xen相关组件,只用KVM,并且提供了Xen到KVM的虚拟机迁移工具;另一家Linux厂商Ubuntu则明确表示选择KVM作为其Hypervisor。除了红帽和Ubuntu, KVM也受到了IBM的关注,IBM KVM(北京)卓越中心落户北京,帮助中国客户、软件开发商及合作伙伴更好地采用开放的虚拟化技术,以支持其云计算项目的发展。此外,KVM作为默认的开源软件Hypervisor,获得了开源虚拟化联盟(OVA)的认可。由于大厂商和众多团体机构都在推广KVM,这使得Xen在开源虚拟化市场上难以立足,Xen这个成熟的虚拟化平台昔日在可用资源、可管理性、性能等方面的优势在快速发展的KVM面前也略显暗淡,随着时间的推移,慢慢地无人再提及,可能在不久的将来,Xen将被人遗忘。如果坚持在Linux平台上使用开源Xen, SUSE Linux Enterprise Server和Oracle将是唯一的选择,但Oracle VM(来自SUN的产品)这个基于Xen的虚拟化平台很难直接用于Oracle现有的用户群,Oracle公司在企业Linux领域只是小玩家,对Xen的支持也很有限。

1.1.4 私有云与公有云

在私有云的建设当中,除了VMware可以提供商业化的产品,目前比较流行的是基于OpenStack开源项目搭建自己的私有云。OpenStack本身并不是一个技术,实际上是一个产品体系,包含很多的模块和功能。例如,主机的虚拟化模块Nova用来创建KVM虚拟机;Neutron模块实现了网络虚拟化的功能;Swift是与存储相关的模块;Keystone模块是OpenStack平台的认证和鉴权模块;Horizon提供了Web界面来方便用户使用,是整个平台的管理工具;Ironic项目则希望OpenStack把裸机的管理也纳入进来,被纳入的裸机上面不运行虚拟机,Ironic的发展是为了适应目前虚拟化的新趋势,即越来越多的基于Docker的应用直接运行在裸机上,而不是在虚拟机上再进行容器化,因为后者的性能损耗比较多;另外一个新的与容器相关的模块最近也被纳入OpenStack中,即谷歌在背后支持的Magnum项目,它的目标是让Docker容器以及谷歌的Kubernetes架构成为OpenStack上的“一等公民”,被OpenStack完美支持,Magnum项目可以被视作容器技术首次与虚拟机技术平起平坐的一次重要尝试。虽然OpenStack仍然在不断改进和发展,也在尝试拥抱新一代的容器技术,但不可否认的是曾经的巨无霸OpenStack正在慢慢地没落。

在公有云方面,目前比较流行的几个公有云如微软的Azure、阿里云、Rackspace、Amazon Web Services、Gooole Compute Engine等都对外提供虚拟机,企业和个人可以在网上购买虚拟机,订购虚拟机的时候,用户可以选择任意规格的型号,如几个CPU、内存多大、硬盘多大,下单付款之后,可以立即在线开通虚拟机,这实际上就是我们比较熟悉的IaaS(Infrastructure as a Service)平台。公有云的最大好处就是提高了资源交付的能力和速度,加快了互联网应用的开发和上线速度,而这背后的最大功臣就是虚拟化技术。