我们原来总说DLL地狱。想要在自己的计算机上运行太多应用程序的够邪恶的人会把这里当作一片乐土。很有可能有一天你会安装一个新的应用程序,结果马上掉进了这个地狱。你会不停地尝试更换DLL。你会把DLL移到单独的应用程序目录里。最终你会感觉就好像在DLL丛林里乱穿,碰到的问题是一个接一个。
虽然自从DLL地狱时不时让开发人员备受煎熬之日开始,我们已经取得了一些进展,但是我们还是没有从根本上解决因为让一台机器服务多个用户而造成的问题。最近的一个难题可能就是让多个版本的Windows运行在一台硬盘驱动器上,或者是让Linux与Windows同时运行在(一台机器)的多个分区上。无论我们在技术周期的哪一个阶段,我们都已经看到了自己能够让一个系统完成过多的事情,并面对这些难题。这就是虚拟化技术真正的用武之地。
你不再因为只有一台工作用的计算机但是却需要让两个不兼容的应用程序放在一起同时运行而苦恼。虚拟化技术让你能够运行多个独立的操作系统,每一个都可以与你PC上的其它进程完全隔离。
在本文中,你将了解到利用虚拟化技术改善开发体验的一些重要方法。
你要把它们分开
在上面描述的情景里,我们还是没有躲过DLL地狱。如果想要在同一台计算机上运行多个应用程序,你就必须考虑是否会碰到两个需要的应用程序安装了不兼容的DLL的情况。但是,虚拟化技术提供了完全独立的操作系统环境,完全由自己分配的内存、硬盘,以及处理器时间。
虚拟化技术,从本质上讲,是在你的主计算机上创建了多个微型的(虚拟)计算机。这种技术的一大优势是让你在一个不受其他东西干扰的环境里隔离和测试一个或者多个应用程序。过去的做法常常是,为了获得一个带有全新开发环境的新计算机,你需要另外购买一整套硬件,或者把你的系统重新搭建成一个新的开发环境。有了虚拟化技术,你只用把所需要的新环境安装到某一个虚拟机上,并根据需要运行它。当你完成之后,直接关机就可以了。
虚拟化可以做到真正的隔离——它让你能够在一套硬件上(安装多个系统)工作,没有这项技术是做不到这一点。例如,你可以在一个成员服务器上安装一个测试环境,因为它不能运行在域控制器上。你只用同时启动两个虚拟机都行了——一个是域控制器,另一个是成员服务器。两个虚拟机都能够同时运行在同一套硬件上,而它们并不知道自己在共用一台机器。这样的结果就产生了一种实现测试环境的快速方法。
状态冻结
在典型的机构里,在结束一天的工作时,你会关闭所有的应用程序,并从计算机登录出来。你必须停止之前正在进行的开发或者调试活动,让机器在夜里安静地待机,等待网络小组发送补丁和更新程序。第二天,你会一如往常地登录进计算机,重新恢复到前一天在工作的内容上。虽然这些都不是很困难的事,也不是什么特别耗时的工作,但是如果把数十个开发人员在数年中的时间都加上的话,那么花在启动和关闭开发环境和重新建立开发或者测试环境上的时间会是巨大的。
使用笔记本计算机进行工作的开发人员是幸运的,他们知道使用休眠或者待机状态的巨大好处——即使有的时候这会导致一些稀奇古怪的问题发生。作为一个经常跑客户的咨询人员,能够停止我的计算机并在到达客户那里的时候恢复到之前的状态会节省大量的时间。
尽管待机和休眠是一个良好的开始,但是它们都有自己的限制。它或许可以保持住你整个的上下文,但是却不能保存任何项目具体的上下文。开发环境没有用于你项目的重要文件。它没有专门的设置来帮助进行项目所需要的调试。
虚拟化技术允许虚拟系统冻结在某个状态。换句话说,(虚拟)机器所处的准确状态可以被冻结无限长的时间。如果你正在开发一个项目,直到其发布和稳定,一年之后你需要回来重新开始对它进行开发,那么你可以把系统冻结在停止进行项目开发的时刻,再在一年——或者更长的时间之后重新开始它。当系统重新启动的时候,它就像根本就没有经历过这么长时间的停顿一样。系统会被精确恢复到它停止时的状态。
这个与众不同的特性对于支持多系统的开发人员来说十分有利——包括那些需要在一定时间范围内为不同项目的不同客户提供支持的咨询人员。你不需要担心重新建立一个用来测试错误修复程序的环境;你只需要用好你的虚拟机就行了。
时间回溯
你曾经犯过错误吗?每个人都犯过错误;这是人一种天性。但是,有的时候人们并不能够那么容易从错误中恢复过来。如果你编的一小段代码不小心破坏了注册表,或者损坏了你的用户身份档案,你可能会花上几个小时,甚至是好几天来重新完成这项工作。我们都有犯大错误的时候。我们中的大多数人应对错误所造成的后果的方式是硬着头皮尽可能挽回损失。但是虚拟化技术让我们能够挽回大量的时间。
虚拟化程序有一个叫做“撤销(Undo)”磁盘操作的特性。撤销磁盘操作让能够对系统进行操作,如果觉得不想保存你的工作,只用在撤销磁盘操作(菜单)里选择不接受更改就行了。哇哦。就像变魔术一样,你做过的一切都被撤销,就好像从来都没有发生过一样。
假设你正在为自己的应用程序创建安装程序,你需要把应用程序安装到一个“干净”的机器上。当然,创建安装是一个反复进行的过程,在这期间你要找出安装程序中的错误。那你要怎么样做才能够在每次运行的时候得到一个干净的机器呢?使用撤销磁盘操作特性就能够让你一遍又一遍地在一个虚拟机上反复进行安装操作。每次安装失败或者错误,你只用简单地撤销磁盘操作就可以再次准备安装了。
假设你正在开发一个用来删除重复文件的程序,结果程序里面的某个东西出了问题,它开始胡乱删除文件。如果使用撤销磁盘操作特性,你只用放弃更改,文件就会立即被恢复。
在使用撤销磁盘操作特性要两个条件。第一个,它需要更多的磁盘空间。它会要求为在会话期间写入硬盘的每个扇区提供空间。对于大型的操作而言,这可能需要相当大的存储空间。第二,它稍稍会降低系统运行的速度。这是因为为确定数据的位置而进行的额外查询会花掉更多的时间,而运行撤销磁盘操作所进行的非连续性访问也会用掉更多的时间。当然,如果你能够忍受这稍稍降低了的性能,那么它绝对是帮你走出困境的好工具。
开发人员
虚拟化技术是现在的一个热门术语。人们都在谈论虚拟化对IT行业的影响,比如减少服务器的数量、合并等等,但是,关于虚拟化技术为开发人员带来的好处却很少有人知道。能够保证隔离的环境,能够在转到另外一个项目时保持原有项目的状态,以及能够恢复误操作等等都为软件开发人员提供了一个重要的(有效的)性能增强工具。
责任编辑:张琎
|
|
|
|
|
|
|
|
|