KVM实战:原理、进阶与性能调优
上QQ阅读APP看书,第一时间看更新

1.4 其他的虚拟化解决方案简介

1.4.1 Xen

Xen的出现要早于KVM,可以追溯到20世纪90年代。剑桥大学的Ian Pratt和Keir Fraser在一个叫作Xenoserver的研究项目中开发了Xen虚拟机。在那个年代,硬件虚拟化还没有出现,所以Xen最开始采用的是半虚拟化的解决方案。

Xen在2002年开源,并在2003年发布了1.0版本、2004年发布了2.0版本,随即被Redhat、Novell和Sun的Linux发行版集成,作为其虚拟化组件。2005年的3.0版本开始加入Intel和AMD的硬件虚拟化的支持,以及Intel的IA64架构,从此,Xen也提供全虚拟化解决方案(HVM),可以运行完全没有修改的客户机操作系统。2007年10月,思杰公司出资5亿美元收购了XenSource,变成了Xen项目的东家。2013年,Xen成为Linux基金会赞助的合作项目。

Xen在架构上是一个典型的Type 1 Hypervisor,与KVM形成鲜明对比,如图1-8所示。严格来说,它没有宿主机的概念,而是由Xen Hypervisor(VMM)完全管控硬件,但用户却看不见、摸不着它,只能通过特殊的0号虚拟机(Dom0),通过其中xl工具栈(tool stack)与Xen Hypervisor交互来管理其他普通虚拟机(DomU)。0号虚拟机是一个运行修改过的半虚拟化的内核的Linux虚拟机。从架构上,Xen的虚拟化方案既利用了Linux内核的IO部分(Dom0的内核),将Linux内核的CPU、内存管理等核心部分排除在外由自己接手(Xen Hypervisor),所以,一开始就受到了Linux内核开发人员的抵制,致使Linux内核作为Dom0对Xen的支持部分一直不能合入Linux内核社区。一直到2010年,在采用基于内核的PVOPs方式大量重写了Xen代码以后,才勉强合入Linux内核社区。2011年,从Linux内核2.6.37版本开始,正式支持Xen Dom0。

1.4.2 VMware

VMware成立于1998年,是最早专注于虚拟化商业软件(并成功)的公司,从它的名字也可以看出它对自己的定位和目标。从十几年前虚拟化软件兴起开始,它就是这个市场的霸主。笔者早年的认知也是虚拟化=VMware。直到最近,在公有云兴起的背景之下,VMware开始受到KVM和Xen等开源项目以及微软Azure/HyperV的挑战。VMware最初是由一对夫妇等几人创立的,2004年被EMC收购。2016年,EMC又被Dell收购,所以现在VMware是Dell旗下的子公司。

图1-8 Xen的架构

VMware从诞生起就一直专注于虚拟化,其产品线非常全,既有PaaS产品,也有IaaS产品;既有Hypervisor,也有应用管理、存储管理等配套软件;既有面向个人用户的桌面级虚拟化产品,也有面向企业的服务器级产品;既有运行于Linux平台上的产品,也有Windows和Mac平台上的产品。本书只选择最著名的两款产品给大家简单介绍下,更多更详细的信息大家可以到它的官网查看。

1.VMware Workstation

VMware Workstation是VMware最早的产品,也是最广为人知的产品,1999年发布。在刚开始的时候,还没有硬件虚拟化技术,所以它是采用二进制翻译的方式实现虚拟化的。但是由于它的二进制翻译技术独步当时,性能还很出色,尤其跟当时同类产品相比。可以说,是VMware Workstation奠定了VMware在虚拟化软件行业的地位。VMware Workstation是桌面级虚拟化产品,运行在Windows、Linux和Mac操作系统上,是Type 2 Hypervisor。使用它需要购买License,但VMware同时提供了与Workstation功能类似,只是有所删减的Workstation Player,供大家非商业化地免费使用。

2.VMware ESXi

VMware ESXi是服务器级的虚拟化软件。与Workstation不同,它直接运行在硬件平台上,是Type1 Hypervisor。在架构上与Xen有些相像,是现在VMware的拳头产品,大多数大公司的私有云都是用它搭建的。除了vMotion(即Live Migration功能)、HA(High Availability,指软硬件运行的不间断地冗余备份)等业界常见功能外,ESXi还支持Cisco Nexus 1000v Nexus 1000v是Cisco和VMWare合作的产物。https://www.vmware.com/company/news/releases/2008/cisco_vmworld08.html。,作为分布式虚拟交换机运行在ESXi集群中。

1.4.3 HyperV

与VMware一样,HyperV也是闭源(Close Source,与Opensource相对)的商业软件。微软从Windows 8/Windows Server 2008开始,用它取代原来的Virtual PC,成为Server OS版本自带的平台虚拟化软件。

HyperV在架构上与Xen类似,也是Type 1 Hypervisor。它有Partition的概念,有一个Parent Partition,类似于Xen Dom0,有管理硬件资源的权限;HyperV的Child Partion就类似于普通的客户机DomU。对Hypervisor的请求以及对客户机的管理都要通过Parent Partition,硬件的驱动也由Parent Partition来完成。客户机看到的都是虚拟出来的硬件资源,它们对其虚拟硬件资源的访问都会被重定向到Parent Partition,由它来完成实际的操作,这种重定向是通过VMBus连接Parent Partition的VSP(Virtualization Service Provider)和child partition的VSC(Virtualization Service Consumer)来完成的,而这个过程对客户机OS都是透明的。图1-9中,HyperV Hypervisor运行在Ring-1,也就是Intel VMX技术的root mode(特权模式),而parent partition和child partition的内核都运行在non-root mode的Ring 0和Ring 3,也就是非特权模式的内核态和用户态。这样的架构安全性是比较好的。性能上如1.3.3节提到的那样,据微软自己说是略好于KVM的。

图1-9 HyperV架构 图片来源:https://en.wikipedia.org/wiki/File:Hyper-V.png。

1.4.4 Container

Container严格来说与前面提到的虚拟化软件不是一个大类,首先,它不是某个虚拟化软件,而是某类软件的统称,包括Docker和LXC等;其次,它不是硬件平台级的虚拟化技术,而是软件运行环境的虚拟化,是一种操作系统级的虚拟化技术,与前面提到的不是一个层次的。

Container技术利用了Linux kernel提供的cgroup、namespace等机制,将应用之间隔离起来,好像自己是操作系统上的唯一一个应用似的。而Linux kernel除了封装出这些应用单独的运行环境以外,还可以控制分配给各个应用的资源配额,比如CPU利用率、内存、网络带宽等。

与平台虚拟化技术相比,Container技术省去了启动和维护整个虚拟客户机的开销(硬件初始化、Kernel boot、init等),因而它非常轻量级,非常适用于PaaS服务模型。但另一方面,由于各个Contained instance其实还是共用一个OS、一个Kernel,所以安全性比不上平台虚拟化技术。总而言之,Container和KVM等平台虚拟化技术,目前还是各有所长,还处在相互取长补短的过程中。