虚拟化的 what & why

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid/gid is 1400/1400 is not allowed to access /tmp owned by uid/gid 0/0 in /home/wangxum1/public_html/site/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid/gid is 1400/1400 is not allowed to access /tmp owned by uid/gid 0/0 in /home/wangxum1/public_html/site/includes/file.inc on line 190.


按:想写这个很久了,今天(2008年7月27日)斯屹比较乖,终于有机会落笔了,准备写成连载的形式,这样会比较从容一些。如果哪位读者觉得有点意思,需要转载,也请注明作者和出处,别无奢望。本文内容为作者个人观点,不代表本人所在公司的观点和看法。

虚拟(Virtual)这个词的含义 "being actually such in almost every respect",即,逼真的、接近现实的。其本意与中文 “虚拟” 二字还是有一定差异的,它更强调和真实世界的接近性。在计算机领域,"虚拟"类技术强调模拟出一个十分接近真实的环境给用户(指虚拟化环境的用户,常常是应用程序)。虚拟化常常含有这样几个语义:

  • 隔离:虚拟的环境将用户与真实的环境隔离开,于是,两者的联系被从中切断了。
  • 包容:虚拟的环境将用户包容在其中,从而使得用户及其环境成为了一个整体。

在这两个语义之下,会伴随着这样一些机制:

  • 标准化封装:因为真实环境的差异性被虚拟化所包容,用户将可以实现标准化的封装。这将带来维护与管理上的便利性。
  • 独立:不同虚拟化封装中的用户被独立地封装,互相之间可能的交互可以被控制、管制乃至切断。这可以提高一定的安全性。
  • 迁移:封装好的虚拟环境将在一定程度上可以进行迁移,这将有利于备份、更高可用性和更灵活的资源分配。

当然,天下没有免费的午餐,虚拟化的好处同时也是它薄弱或脆弱的地方——

  • 效率:隔离性天生和效率是一对矛盾,间接的操作势必影响一定的效率,各种虚拟化技术都在尽量避免对效率的影响,甚至通过某种统筹方式,让某种意义上的效率更高一些,当然,单纯对一个被隔离的用户来说,完全的不影响效率是不可能的。
  • 安全:前面说虚拟化带来的独立性增加了安全性,而这里又说安全性是个薄弱环节,两点都没有错,因人而异、因地而异。首先说,增加了一层封装便多了一个可能的出错环节,其次,虚拟化带来的迁移的便利性也多了一分被“劫持”的风险,因此,实施虚拟化工程务必要考虑这一环节。

这里我们介绍虚拟化计算技术,虚拟化计算技术是通过在物理环境和操作系统之间插入一层虚拟化运行环境,使“客户”操作系统运行在一个虚拟的运行环境中,而不是直接运行在物理机上。目前的虚拟化技术和类似的仿真运行技术很多,各种开源软件分别针对不同应用场景采用了不同技术,实现了不同的虚拟化,这一部分给出机组大致的分类,本系列后面的文章将分别介绍这些虚拟化技术的应用。

虚拟化计算有不同的应用场景,也因此有差异巨大的技术需求:

  • (企业级)服务器虚拟化。在企业中,服务器虚拟化可以让多个不同的服务器跑在较少的物理服务器上,从而减少了服务器的需求,增强了管理的几种化;同时,借助虚拟化环境的封装性和可迁移性,服务器可以更容易地进行备份和迁移,从而提供更高的可用性,满足企业级乃至电信级的应用需求;此外,通过和物理环境的隔离,还可以达到标准的“硬件”环境,加快服务的上线。服务器的虚拟化要求执行性能的优化,这样才能真的提高计算资源的利用效率而不降低服务能力。
  • (企业)桌面虚拟化。利用封闭的虚拟化环境,可以采用注入的方式分发软件而不必担心硬件环境的差异,集中的进行桌面软件维护管理,方便的工作环境迁移等,从而降低企业 IT 维护成本。这种方式更强调虚拟化运行的便利性,同时也要求虚拟化不对性能产生过大的影响。
  • 运行异构操作系统的程序,通过在虚拟机中运行异构操作系统,从而支持了本来无法运行的异构操作系统中的应用程序,这种情况也是要求运行的便利性和性能。
  • 开发、调试与教学。利用虚拟机,可以更方便地调试内核级应用,而不用担心影响正在运行的系统,同时,也可以用于操作系统的试用,不用担心一下子进入到一个不同的环境之中。在这种虚拟化应用中,对性能的要求是次要位置的,更重要的是操控界面的便利性、方便调试等的可管理性等。

从虚拟化软件的实现角度,按照虚拟化层的不同来划分,有这样几类虚拟化软件:

  • 超薄虚拟化层,代表软件 XEN,类似的商业产品:VMWare ESX, 微软的Windows Server 2008的虚拟化等,这类虚拟化技术的特点是效率高、可靠性高,因此适用于叫高负载的服务器领域,也因此常常结合一些高可用技术。
  • Linux内核作为虚拟化层,代表软件 KVM,让 Linux 内核支持特殊的运行状态,从而允许虚拟机的运行。这种方式是效率和便利性的一个折衷,对于桌面应用的虚拟化更加适合。
  • 在操作系统的客户空间运行虚拟机,代表软件包括只针对 Linux 的 User Mode Linux,和针对各种虚拟机的 Qemu 和 VirtualBox,这两者分别有一个内核模块,用于优化程序的执行。由于在用户空间执行,因此效率会比较低,更常用于模拟运行、测试和教学等应用,类似于 VMWare Workstation。这种方式的优点在于虚拟环境非常完备,操控也更方便,可以通过加断点来调试程序,也可以模拟其它不同的硬件架构,这在前面的几种虚拟化技术中是不可能的。
  • 在操作系统中构建几个强隔离区,代表软件是 vserver 和 OpenVZ,通过在内核上构建几个强隔离区域,让不同的区域好像不同的操作系统在运行一样,这种隔离的方式执行效率最高、代价最低,但也隔离性最差,通常是用于同一服务器隔离开提供不同的服务。
  • API仿真模拟,代表软件 Wine,严格地说,这种方式不符合上述虚拟化计算的定义,因为它只是为应用模拟了一个异构的虚拟化环境,Wine 模拟了 Windows 运行时环境,从而帮助 Windows 平台的软件可以不加任何修改地运行在 Linux 中,这之间没有虚拟化出一个操作系统,简单,但做到完备相对困难,只对部分应用有效。

至此,本篇已经介绍了虚拟化和虚拟化计算技术,提到了 Linux 中可用的各种具有代表性的虚拟化软件,并进行了简单的分类,在接下来的系列文章中,将逐一介绍这些虚拟化技术。有些还需要本人的一些更充分的实验,因此可能不会太快完成,一点一点来吧,将来 unleashed 出第二版的时候应该有这些内容了。