为计算机“扩容”的虚拟技术

技术与开发

毫无疑问虚拟化技术已经成为近几年最热门的技术之一。我们先来看一组数据:2007年英特尔公司向虚拟机软件厂商VMware注资2.185亿美元帮助他们上市;VMware公司在上市当日股价飙升七成;很快另外一家虚拟化公司XenSource被Citrix Systems公司以5亿美元的天价收购……同时,软件巨头们也对虚拟技术有着极大的关注:有消息称,微软的下一代操作系统Windows 7会支持虚拟技术,RedHat在最新发布的AS5版本里也集成了虚拟化软件……

为何众多巨头公司都对虚拟技化如此热心?虚拟技术到底有什么魅力呢?

什么是虚拟技术

虚拟技术,顾名思义就是指计算元件在虚拟的基础上而不是真实的基础上运行。比如借助虚拟化技术可以让单CPU模拟多CPU运行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。与多任务、超线程技术不同,虚拟化技术可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上。当然,如果一个CPU同时支持HyperThreading和Virtualization技术的话,每一个虚拟CPU在各自的操作系统中都被看成是两个对称多任务处理的CPU。

3-f10-1.jpg
虚拟化技术将各种资源虚拟出多台主机

在虚拟状态下有两种工作模式:root操作和非root操作。通常只有虚拟操作软件——Virtual Machine Monitor (VMM)能够运行在root操作模式下,而操作系统在虚拟机的顶层运行在非root操作模式下。运行在虚拟机顶层的软件同时也叫做“guest software”。要进入虚拟模式,VMM需要执行VMXON指令来调入VMM软件,VMM软件使用VMLAUNCH指令来进入每一个虚拟机,使用VMRESUME指令来退出。如果想要退出虚拟模式,可以使用VMM运行VMXOFF指令。在下图中的每个guest系统可以是不同的操作系统,同时运行自身的软件。

3-f10-2.jpg

由于并不是真实的系统,因此虚拟系统在操作上仍是有一定限制的。比如用户对虚拟系统操作时许多情况下需要通过VMM。这一额外的通信层需要进行二进制转换来模拟硬件环境。这种转换必然会增加系统的复杂性,并对系统性能造成负面影响。值得庆幸的是,随着Intel、AMD处理器厂商在自家处理器中引入虚拟化技术,很大程度简化了虚拟系统的操作,相比软件的虚拟实现方式会很大程度上提高性能。

主流的虚拟技术代表

现在虚拟化已经形成一股潮流,从核心技术上来讲,这个领域主要存在两个不同的派别。其中一派是全面的硬件仿真系统,以VMware和微软的虚拟服务器为代表。另一派是基于主机的虚拟化技术,SWsoft的Virtuozzo和Sun的Solaris容器是其中的代表。除此之外,AMD和英特尔在新一代处理器中加入了硬件的虚拟化功能,则属于x86架构虚拟领域的新力量。

1.VMware虚拟技术

VMware可以说主导x86系统上的虚拟化技术,其产品占据了半数以上的市场份额。VMware使用二进制转化方法来提供一个通用的硬件平台,并支持不加任何改变地使用所有x86兼容的操作系统。当然VMware也有不足之处:由于采用软件模拟硬件服务,所以会占用大量CPU资源,另外用许多代码取代一条代码也不会使事情运作得快些。

VMware的三个主要核心产品是VMware Workstation、免费的VMware Server以及VMware Player,这些软件可以在Windows或Linux上运行。这些产品需要在一个主要的操作系统上执行,但VMware的高档产品ESX Server由于可以不使用操作系统而在一定程度上增加性能。

2.微软Virtual Server及Virtual PC

随着虚拟化技术发展,操作系统内建虚拟技术已经变成一种趋势。比如收购Connectix后的微软近年来也不断将虚拟机技术纳入到自己操作系统中,并推出服务器版的Virtual Server与单机版的Virtual PC。

Virtual Server主要针对服务器操作系统,提供了更多的企业级管理和扩展特性,例如虚拟机的远程管理、虚拟机所使用的CPU和系统资源分配等等,特别是支持无限个虚拟网络,这对众多软件测试者来说是相当有用的。不过,Virtual Server并没充分考虑桌面用户的使用需求,故也存在不足之处,比如不支持在虚拟机和宿主机之间拖放文件、不支持通过共享目录功能允许虚拟机访问宿主机上的文件等等。对于普通用户来说,或许Virtual PC更合适你!目前Virtual PC 2007是最新版本,这也是一个功能强大的虚拟软件,可以实现硬件层级的虚拟化运算,同样允许你在一个工作站上同时运行多个PC操作系统。如果你的CPU支持Intel的VT或AMD的Pacifica的话,还可以在很大程度上提高虚拟机的性能。

需要说明的是,即将发布的Windows Server 2008将为我们带来研发代号为Viridian的Windows Server Virtualization(WSV)虚拟技术。相对于当前的Virtual Server,WSV拥有更高性能、更易管理、更有效率的优点。

3-f10-3.jpg
3-f10-5.jpg
Intel VT下面的VMM其实可以认为就是主机操作系统

3.Intel及 AMD处理器虚拟技术

在过去的10多年间,x86处理器的核心指令集虽然没有什么变化,但AMD和Intel却在处理器中加入了许多创新功能,其中在CPU中加入了虚拟技术(Intel的 Virtualization Technology,AMD的Pacifica技术)这一创新就将桌面硬件虚拟化从梦想推向现实。

这些带有虚拟技术的处理器具有额外的指令集,叫做Virtual Machine Extensions,简称VMX。任何一个运行在VMX模式下的操作系统,都拥有所有运行于非VT系统中的一般操作系统的功能和特性。当得到授权,CPU进入VMX根模式,VMM就可以切换到其他一个运行在另一VMX实例的操作系统。这些切换被称做VM登录和VM退出。值得注意的是,这些虚拟技术的实现需要同时具有处理器、芯片组、BIOS、VMM软件的支持。

虚拟技术能带给我们什么好处

那么虚拟技术到底对我们有什么好处呢?虚拟化技术的最大好处是降低了成本,包括管理成本、硬件成本,同时它提供了一个简单高效的IT管理模型,采用动态分配资源的方式,让每一个应用程序可以动态地获取所需要的资源。

1.让系统分身有术,降低管理成本

在数据中心,虚拟化技术最常用的是用来把单独的一台物理服务器转变成使用于各种类型的工作平台。举例来说,微软的Exchange 或Windows 产品需要有专门的一台独立的服务器,因为它们的业务是完全不同的。通过使用虚拟技术,你可以让一台服务器承担很多不同类型的工作量:在一台服务器上运行几种不同的应用程序,从而可以取消每个不同的应用需要对应不同的服务器的限制;让数据中心现有的资源发挥更大的能力;并且减少费用。

2.让你的电脑更安全

除能提高利用率外,虚拟技术其中一个重要应用就是灾难复原,其精髓就是当硬件出故障时,可以在几乎没有中断的情况下,自动把执行的服务器从一台转到另一台上。目前大部分的虚拟技术都提供可以在不中断服务的情况下,自动执行此功能的软件。

虚拟化同时也让备份资料变得容易许多,比如VMware虚拟技术可以在二十分钟之内为两百台虚拟服务器提供备份,而且有三分之二的用户都是因为有灾难复原这个功能而使用虚拟技术。在过去因为硬件、操作系统跟应用程序紧密结合,所以当你要做灾难复原时,备份系统必须要有完全一样的硬件、应用程序跟其他部分,还要让上面的数据完全同步。如果使用虚拟系统,你可以带着虚拟文件,把它传到另一个硬件平台上便可立即开机执行。

除此之外,像是应用程序的快速配置、操作系统仿真也吸引了许多虚拟技术的使用者。例如在病毒网络化时代,对企业来说最原始实现安全性的方法是使用两台PC:一台与因特网连接,用来收发电子邮件及浏览网页(有受到病毒、蠕虫及其他网络攻击的危险);而另一台“关键性”PC则与互联网断开,用来储存重要文件与应用程序。 但是维护两台PC的额外成本、空间及麻烦非常多,而且在两个环境之间传输数据也很不方便。设想用电子邮件发送一份在非联网PC上写成的重要文件会多么麻烦——将文件存到一个移动存储设备上,然后再把它转移到一台联网PC上!这种方法很快就会过时。而借助虚拟技术,这一切就变得简单许多!

由于VM本身就是一个软件,因此多个虚拟机拷贝可同时在一台计算机上执行。利用这种模式,可将其中一个虚拟系统与互联网连接,而让另一个虚拟系统提供关键PC应用环境。这两个虚拟系统可以共享一个磁盘,只要这个磁盘能被安全分区。因此数据能很容易地在两个环境间传输,而且依靠可利用的硬件资源,可执行两个以上的独立环境。

如果你是一名程序员,需要编写代码使它们在Windows 98/Me/2000/XP/Vista上都能运行,你会在你的办公桌上准备5台机器分别安装相应的系统吗?面对这种情况你可借助虚拟主机一个个地安装旧的操作系统一一解决方法,并让它们同时运行。

这一切就是虚拟技术的魅力!

你需要虚拟技术吗

现在虚拟化技术可以说是伸手可及了,然而这也不代表每个人都要使用。它有一些先天的技术限制,比如较高的负载会让它不适合运算量较重、持续运行I/O的程序。从相关数据统计来看,虚拟化技术的应用趋向于四个关键点:与数据库或分公司的服务器整合;旧应用的整合与重新架设;自动化整合的软件测试研发环境;灾难复原的简化步骤。如果你的需求是四个的其中之一,就值得使用虚拟化技术。如果不是,你最好先想清楚使用虚拟技术的理由是什么。毕竟虚拟化技术只是让计算机设备可靠、可调整、便宜、方便管理的方法之一。

不管怎么说,虚拟化技术的现有优点决定了该技术在可预见的未来还会快速成长。