虚拟化是表示计算机资源的抽象方法。通过虚拟化,我们可以简化基础设施、系统和软件等计算机资源的表示、访问和管理,并且为这些资源提供标准的接口来接受输入和提供输出。虚拟化技术有很多种,比如网络虚拟化、内存虚拟化、桌面虚拟化和应用虚拟化等等,我们这里主要介绍系统虚拟化。
系统虚拟化通过使用虚拟机管理程序(Virtual Machine Monitor,简称VMM)在一台物理机上虚拟和运行一台或者多台虚拟机(Virtual Machine,简称VM),而且这些虚拟机可以像真实的机器一样运行各种软件,并且在资源占用方面虚拟机之间是相互隔离的,以保证运行的安全和稳定。
在20世纪50年代末,Christopher Strachey就发表了名为"Time Sharing in Large Fast Computes"的论文,它被认为是系统虚拟化的起源。在20世纪60年代中期,IBM推出了世界上第一台支持系统虚拟技术的计算机IBM7044.而在最近,系统虚拟化技术更是得到了业界极大的欢迎和肯定,并且已经成为了一个非常主流的技术。
在运行模式上,系统虚拟化主要有两类虚拟机管理程序。其一是Hypervisor类型,它直接运行在硬件上面,以类似操作系统的形式安装在硬件上,它提供接近于物理机的性能,并且在IO上面做了很多优化,主要用于服务器类的应用,也被称为Type1.其中VMware ESX和Xen都属于这个类型。其二是托管类型,它安装在传统的操作系统上,虽然本身性能不如Hypervisor(主要是因为它和硬件之间隔了一层操作系统),但是它的使用和安装都非常方便,功能也十分丰富,比如支持三维加速等等,常用于桌面应用,也被称为Type2.这个类型的代表有VMware
Workstation和VirtualBox等等。
系统虚拟化技术的分类:
(1)硬件仿真。也就是emulation,它属于托管模式,它在物理机的操作系统上新建一个模拟硬件的程序(硬件 VM)来仿真所想要的硬件,并且在这个程序上跑虚拟机,而且虚拟机内部的客户操作系统(Guest OS)无需修改。知名产品有Bochs、QEMU和微软的Vritual PC 。由于能够模拟硬件,所以硬件仿真非常适合于操作系统的开发,也有利于进行固件和硬件的协作开发。固件开发人员可以使用基于目标硬件的虚拟机在仿真环境中对自己的实际代码进行验证,而不必等到硬件实际可用的时候才能开始测试。由于是模拟的硬件,因此在性能方面比较低。
(2)全虚拟化,也就是Full Virtualization,它主要是在客户操作系统和硬件之间捕获和处理那些对虚拟化敏感的特殊指令,从而使得客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但是大致能够满足用户的需求。这种方式是业界现金最成熟、最常见的,而且属于托管模式和Hypervisor模式的产品都有,知名的产品有IBM CP/CMS,VirtualBox、KVM、VMware Workstation和VMware
ESX。在全虚拟模式下,客户操作系统无需修改,而且速度还可以,使用也很简单。
(3)半虚拟化,也就是Paravirtualization,它和全虚拟化有一定的相似之处。它也利用虚拟机管理程序来实现对底层硬件的共享访问,但是由于在虚拟机管理程序上运行的客户操作系统已经集成了与半虚拟化有关的代码,这使得客户操作系统能够非常好地配合虚拟机管理程序来实现虚拟化。我们无需重新编译或者捕获特权指令,其性能非常接近物理机。最经典的产品就是Xen,当然还有微软的Hyper-V。它的架构比全虚拟化要精简,而且在整体速度上有一定的优势,但是它需要对客户操作系统进行修改,所以在用户体验方面比较麻烦。
(4)硬件辅助虚拟化(Hardware Assisted Virtualization)是英特尔/AMD等硬件厂商通过对部分全虚拟化和半虚拟化使用到的软件技术进行硬件化来提高性能,由于通过硬件辅助虚拟化能够将大量复杂的虚拟化逻辑从软件中抽离,所以能够极大地简化虚拟化产品的架构。在使用方面,硬件虚拟化通常用于优化全虚拟化和半虚拟化,而不是独创一派。最经典的例子就是VMware Workstation在6.0版本中引入了硬件虚拟化技术,比如英特尔的VT-x和AMD的AMD-V,我们在使用的时候,可以选择是否开启硬件辅助虚拟化。现在市面上的主流全虚拟化和半虚拟化都支持硬件辅助虚拟化,业界通常使用HVM(Hardware
Virtual Machine)来指代硬件辅助虚拟化。
(5)操作系统级虚拟化,也就是Operating System Level Virtualization,它通过对服务器操作系统进行简单的隔离来实现虚拟化,主要用于VPS等服务。这种技术对操作系统只进行少许的修改,实现成本低而且性能不错,但是在资源隔离级别表现欠佳,而且对客户操作系统的型号和版本有限定,这种技术可以用于VPS服务。
系统虚拟化的用处:
(1)软件测试。通过使用VirtualBox和VMware Workstation来配置测试环境,不仅比物理方式快很多,而且也无需购买过多昂贵的硬件。而且它们自带的快照功能也可以非常方便地将错误发生的状态保存起来,这样将很有利于测试人员和程序员之间的沟通。
(2)桌面应用。比如通过VirtualBox和VMware Workstation等桌面虚拟化软件让用户使用其他平台的专属软件,比如使用Linux的用户可以通过虚拟的Windows环境来访问基于微软ActiveX技术的网上银行。而且企业可以通过部署成熟的虚拟桌面解决方案,不仅能够统一管理员工的桌面环境来提升安全性,还能够降低和桌面系统的购置成本和能源开支。
(3)服务器整合。通过VMware ESX和Xen,可以将多台物理机上的工作量整合到一台物理机上,它可以降低软硬件、能源和场地等开支,还能够提高服务器的使用率,极大地简化IT架构的复杂度。
(4)自动化管理。使用DRS(Distributed Resource Scheduing,分布式资源调度)、Live Migration(动态迁移)、DPM(Distributed Power Management,分布式电源管理)和HA(High Availability,高可用性)等高级虚拟化管理技术,能够极大地提升数据中心的自动化管理成都,并实现容灾。
(5)加快应用部署。通过引入虚拟化应用发布格式OVF(Open Virtualization Format,开放虚拟化格式),不仅能够使得第三方应用供应商更加方便地发布应用,而且能够使系统管理员非常简单地部署这个应用,而且很方便地在多个数据中心之间进行迁移。