也许正是VMware公司的工作站(Workstation)产品,让虚拟化技术走上了迅速成名的道路。该产品允许各个用户可以运行多个操作系统、操作系统版本或实例(类似多个应用程序窗口),而不是只有每次运行一个操作系统的多重启动环境。但在许多公司,虚拟化技术却是这样出现的:开发人员首先悄悄使用这项技术来进行测试和开发,然后再把虚拟化工具介绍给IT主管。

尽管如今虚拟化在推动许多生产环境,比如服务器和桌面基础架构,并充当一种资源提供工具,虚拟化也被越来越多的软件开发人员所使用。首先,他们使用虚拟化工具,便于提供用于开发和测试的一系列目标环境(比如不同的操作系统、操作系统版本和浏览器),并且便于迅速而轻松地提供/重新提供配置实例。

下面介绍如今的一些开发人员在如何使用虚拟化、为什么使用虚拟化,以及他们对目前的虚拟化技术存着什么样的问题。

提供多种测试环境

高级软件架构师Mark Friedman效力于微软的开发部门,该部门有3000多名员工在开发Visual Studio和.NET框架。Friedman本人主要开发随微软Visual Studio Team System这套开发工具交付的性能工具。Friedman还是计算机测量组织(Computer Measurement Group)的董事,他说:"我所在部门大约三分之二的人从事开发和测试工作――这些开发和测试人员大多数在使用系统虚拟化(通过微软的Hyper-V技术),作为他们主要的生产力工具之一。"

虚拟化技术的一个主要优势在于,它能够分离不稳定的环境,这是任何开发人员都希望在应用程序设计的早期阶段所具备的功能。Friedman表示,随着微软工具的不断开发,测试早期版本可能会使开发人员的整个计算环境不稳定。

他说:"这是无法改变的本质。除了简单的桌面应用程序外,几乎任何应用程序都会导致系统崩溃。我经常告诉我的开发人员,如果他们没有经常导致系统崩溃,说明他们的尝试还不够积极。我们喜欢虚拟化技术,因为它能节省时间,让我们的开发人员可以花更多时间用在有挑战性的工作上,而不是用在准备测试环境那些单调而极其耗费时间的方面上。"

与其他虚拟化工具一样,微软的Hyper-V可以让用户对系统"拍取快照",保留"近一个已知的完好版本"。Friedman说:"我们创建了回滚机制(rollback),那样我们在几分钟之内能把系统恢复到之前的那个完好状态。另一种方法是,不得不重新创建系统镜像或者重新构建环境,但这需要好几个小时。而虚拟化技术大大节省了时间。"

Friedman的小组还在质量保证(QA)测试当中全面利用了虚拟化技术和虚拟机镜像。他说:"一旦通过了开发人员的单元测试,我们会谈论测试矩阵――比如在什么版本的操作系统上运行测试矩阵。然后,我们需要针对32位版本或64位版本进行测试。使用虚拟机镜像是维持一系列测试环境的快速、省钱、灵活的一种方法。在我们的质量保证实验室,我们一直在这么做;我们进行了许多自动化测试,以便把这些镜像作为虚拟机来保存,并且用测试套件对它们进行测试。这种方法很实用;我们节省了许多时间,多得让人难以置信。"

拍取快照、然后在几分钟之内恢复工作镜像的功能特别重要,不必为重建系统等上数小时。Friedman说:"你在查找软件错误时,仅仅为了重现软件错误,常常得花上一两天时间来建立环境,所以你一次又一次地花时间来重建系统――这浪费了时间;从而导致工作效率降低。"

比方说,某个软件错误导致系统崩溃时,开发人员得回过头去,找出系统崩溃的那个地方。Friedman说:"人们初设置的断点常常离进程太远,于是系统再次崩溃。因为开发人员在内很容易导致系统崩溃好几次,趁开发人员对问题很清楚的时候,能够迅速恢复,然后重新运行调试过程,这大有帮助。如果你在调试一个复杂的软件错误,能保持在这种状态下再好不过了。"

开发人员表示,虚拟化技术非常有助于迭代测试。Adam Moskowitz是生产及销售一系列节能型计算机的SiCortex公司的高级软件工程师,他说:"我们有许多测试系统供我们的开发人员使用――每个测试系统都需要各自的x86控制系统。我们使用虚拟化技术来创建虚拟机,然后虚拟机’连接到’外部集群板,而不是购置许多PC,哪怕是便宜的PC。"

SiCortex的开发部门使用免费版本的VMware Server,运行在功能较强大的机架服务器上(配备双核或四核x86处理器、4GB内存和300GB硬盘),这些服务器可以运行四至八个充当控制系统的虚拟机。Moskowitz说:"因为控制系统上的负载非常小,这种办法的效果非常好,资本开支也比较低。我们大约25名工程师中有一半以上的人在使用这些虚拟化系统。"

Moskowitz表示,控制系统虚拟化的一个主要好处是易于测试。他说:"想要一个实验系统?你只要克隆一个标准的虚拟机,可以使用了。虚拟化工具有价值的另一个原因是易于配置;开发人员只要用新软件构建一个虚拟机――只要构建一次;以后你想要多少个虚拟机,可以克隆多少个。"

Mike Brescia在一家记录及恢复实时环境数据的公司工作;他说:"除了把系统作为虚拟设备来提供外,我们公司的开发人员还使用虚拟化技术,在比较少的硬件设备上搭建不同的测试环境,比如Windows和Linux环境。"Brescia表示,克隆一个干净的计算机系统用于测试要比拷贝磁盘镜像、使用 Clonezilla克隆工具简单得多。他补充说:"运行虚拟机不需要拆掉、清除整个系统;我们只需要小心,别往主机机器上装入过多的资源。"

设计和营销公司Eli Kirk的高级Web开发人员Connor Boyack表示,该公司的15名Web开发人员必须兼顾许多Web浏览器和操作系统的需要。Boyack在Mac OS X Leopard操作系统上使用Parallels版本4,并且运行各自安装了Windows XP、OpenSUSE 11和Windows 7测试版等操作系统的虚拟机。Boyack说:"创建实用、而且外观一致的网站需要进行大量的浏览器测试;这样一来,虚拟化技术必不可少。虚拟化技术让我可以使用多个操作系统和多个浏览器,让它们可以无缝合作(前提是Windows XP运行要顺畅)。"

SmartLogic Solutions公司的开发人员Nick Gauthier也认为,能够同时测试许多不同场景、确保有一致的用户体验,这是一大优势。"另一个优势是,如果用户有抱怨,可以启动某个特定的版本和浏览器。我们再没有必要说’哦,我不运行这个浏览器,我用的是Linux操作系统;’现在我们可以说’稍等片刻;我发现问题了,我马上解决。’"

Eric Floer是开发及销售远程备份设备的新兴公司3X Systems的首席技术官,他说:"我们使用虚拟化技术测试平台上的软件以及我们支持的应用程序(以便保证质量);如果客户出现了问题需要支持,还可以用来重现客户环境。虚拟化让我们可以迅速构建及拆掉环境,而且只要使用数量极少的物理硬件可以做到。"对一家小规模的新兴公司而言,这种使用极少资本开支能测试许多平台和环境的能力非常重要。另外,"虚拟化技术大大提高了我们产品的质量和可靠性,"Floehr补充说。

Aamoggemon软件公司致力于为手持计算机开发程序,原先为Palm OS开发程序,现在还为Symbian OS Series 60和PocketPC开发程序。开发人员Tam Hanna说:"现在我使用虚拟化有好多原因;主要原因是,基于Cygwin/Elipse的开发系统很流行(针对J2ME的Eclipse、Palm的 PODS和诺基亚的Carbide)。把这些开发系统全部安装在一台机器上会导致它们都出问题。所以,我需要使用虚拟化技术,以便能够完成我的工作。此外,我想使用虚拟机,确保所有机器上都有同样的配置设置。"

MarkMail是一家搜索公共邮件列表归档的免费服务机构。MarkMail的开发人员John D. Mitchell(其正式头衔是"狂热的科学家")声称:"我们的团队在许多方面使用虚拟化技术。关键在于,对系统中的每一项服务进行虚拟化处理给了我们很大的灵活性。在开发时,我们对物理资源没有太多的要求,

那样我们在少数几个硬件节点上能运行许多虚拟实例,包括数据库。"

MarkMail用的是OpenVz,那样开发人员沙盒中的镜像与部署环境的完全一样。Mitchell说:"有了虚拟化技术,测试不同的环境和版本等方面非常容易;我们总是可以拆掉一个实例,然后从干净的检查点重新创建一个实例。"据Mitchell声称,使用虚拟化技术可以减少所要购买、租用及管理的硬件数量。"总的来说,我们使用的虚拟实例与硬件节点之比大约是3:1。"

虚拟化的局限

开发人员承认,开发过程中有许多方面是虚拟化技术无能为力的。

3X公司的Floehr强调:"虚拟化无能为力的一个方面是对我们的产品(基于网络的备份设备)进行压力测试(stress testing)。尽管我们可以在虚拟化环境同时测试10个客户机,但那不是真正的压力测试,因为10个客户机只使用4个物理CPU和两块网卡来测试;如果在实际环境有10个物理客户机,这些约束条件不会存在。"

MarkMail的Mitchell补充说:"虚拟化确实会增加一些复杂性。它总是会增加一些延迟。但是更糟的是,如果改变底层的执行环境――比如从开发环境到测试环境再到生产环境,无法依赖虚拟机清楚地了解性能方面的特点。"

后,Mirtchell强调"当前一代的桌面虚拟化产品仍有太多令人头疼的问题、缺陷以及缺失的功能,"至少开发人员在用于软件开发方面遇到了这种情况。

微软的Mark Friedman说:"如果进行负载测试或规模扩展,得运行在原始硬件和物理机器上。除非你准备部署在虚拟机上,否则性能方面的特点完全不一样。性能测量方面的情况也是这样。"Friedman强调,但随着时间的推移,这个问题有望得到解决。

Friedman表示,另外,虚拟化行业采用的半虚拟化方法改变了操作系统的一些底层方面,尤其是操作系统的驱动程序。"所以,如果你依赖特定的驱动程序或硬件环境,那会受到影响。比方说,有一个虚拟网卡,有一个特定的驱动程序。该驱动程序’可识别虚拟化技术’。你得明白,如果你需要针对一组本地驱动程序进行测试,在虚拟机里看不到驱动程序。所以,这影响了从事驱动程序开发的人员,但对Web开发人员没有影响。"

Friedman还指出:"如果你有一个多层应用程序需要几台机器,把这些机器整合成共享硬件意味着’

你可以进行的是功能测试,而不是性能测试。’"

尽管有这样那样的问题,虚拟化技术已经为开发人员带来了切实的好处。微软的Friedman说:"一旦我们的开发人员学会使用虚拟化技术,这项技术能提高他们的工作效率。虚拟化技术让他们可以花更多的时间用在编码、测试和调试上。它消除了用在构建及准备环境方面的大量时间和延迟,我们并不希望他们把大部分时间用在这方面上。"