虚拟化以及为什么它对程序员有好处

时间:2009-06-29 13:35:45

标签: virtualization

为什么从程序员的角度了解虚拟化有帮助?除了在几个不同的平台上进行测试和开发而不需要在操作系统之间切换之外,虚拟化对程序员来说很重要吗?在虚拟实例上开发之前是否还有任何必须牢记的细节?

13 个答案:

答案 0 :(得分:13)

我用它来测试我们的安装程序,因为检查应用程序是否可以在干净的操作系统安装上运行是很重要的。

我过去通过保持硬盘驱动器安装新的操作系统并为(几乎)每次新的测试运行制作该磁盘的副本来进行这些测试。这非常耗时,虚拟机解决方案为我节省了很多时间。请注意,这甚至可以让您像使用两台非虚拟机一样轻松地进行远程调试。

注意:如果您有兴趣,我正在使用VirtualBox,这是一个非常好的免费虚拟化工具。

答案 1 :(得分:11)

如果您开发的驱动程序或非常靠近硬件的设备可能会导致机器崩溃,那么您将很高兴能够使用虚拟机。

恢复旧状态比修复损坏的操作系统更容易。

答案 2 :(得分:6)

其中一个主要优点是将整个开发环境作为单个图像文件。我有一个完美配置的Windows Server,Visual Studio,ReSharper等版本。我可以轻松地在这个虚拟机的副本上尝试新版本的东西而不用担心它会导致问题。

我还可以备份整个开发环境,将其轻松转移到另一台物理机器上。我单独在这个办公室里经历过3台机器,这本身就是救生员。

我看到的唯一真正的权衡是表现。您通常必须使用比实际拥有的更少的物理CPU核心和更少的内存。有了足够强大的机器,这不是一个问题。

编辑:正如nader所说,I / O对大多数项目来说显然也很重要。虽然与本机操作系统安装相比,在虚拟机上进行开发确实意味着相当大的I / O代价,但实际上我很少发现这是一个问题。 SSD的卓越随机访问功能也有助于缓解这一缺陷。

答案 3 :(得分:4)

能够完全重置系统状态对于调试修改其环境的应用程序非常有用 - 如果重置后重复操作,并且它们受限于沙箱环境VM,你几乎可以保证获得相同的结果。

答案 4 :(得分:2)

我们的软件有大量不同的版本/客户定制,我们的软件不能在同一台机器上共存。虚拟化允许我们用2-3个虚拟服务器替换我们需要维护的50-60个物理机器以进行测试和问题再现 - 我们需要大约10分钟才能复制我们拥有的VHD模板并创建一个新的虚拟机,只要你分配1-2Gb的RAM,性能就可以与(慢)物理机器的性能相媲美。

虚拟机也非常适合构建机器。

我个人在桌面计算机上进行所有开发,以获得最佳性能,并远程调试到VM。我不会在我的桌面上运行虚拟机,因为它占用了太多的RAM,我们有专用的虚拟服务器。

答案 5 :(得分:1)

适合开发,因为您在虚拟机中具有与生产服务器上相同的服务器配置。

https://stackoverflow.com/questions/905926/developer-software-setup

答案 6 :(得分:1)

从用户空间应用程序开始,虚拟化操作系统与普通操作系统的开发应该没有区别。如果您的代码明确假设机器内存大小和处理器数量并且相信管理程序告诉您的内容,则可能存在一些问题。

答案 7 :(得分:1)

我很惊讶没有人提到部署的简易性。您需要做的就是在虚拟O / S上进行构建,然后您可以根据需要将映像复制到尽可能多的新服务器(运行某种虚拟化解决方案[如VMWare]),轻松扩展您的应用程序。 / p>

答案 8 :(得分:1)

  • 记录程序中的错误状态,并将其发送给开发人员(以及整个“计算机”)。
  • 在各种O.S上测试您的代码,其中一些是您没有的。
  • 在更受保护的环境中工作,确保代码不会损害您的系统 - 有助于理解危险程序,如病毒,开发安全措施,编写可能错误的硬盘程序,以及任何可以对你的系统造成灾难性后果。
  • 轻松编写自己的O.S而无需在“真正的”引导扇区上书写,这是一种可能有害的行为(希望这不是新的......)。
  • 快速使用自己没有的工具和程序O.S。
  • 通过还原虚拟机,在不同时间演示程序, 比试图在演示前几分钟重新创建状态更快,更不容易出现故障。
  • 与编程没有直接联系,但是通过虚拟机浏览(例如查看文档)具有附加价值,即您自己的重要系统(和代码)不太可能受到恶意程序的伤害。

答案 9 :(得分:1)

根据我的经验,在大多数情况下,答案通常是“不”(当删除测试和定位多个平台时)两者都是熟悉“桌面”VM解决方案的重要原因。其他人在列出调试内核代码等罕见异常方面做得非常出色。

在虚拟机上运行时,必须注意一些必须要注意的问题。这不是一个详尽的清单:

  1. 由于模拟硬件资源而导致高分辨率计时器中的精确度甚至时间反转(取决于虚拟平台和操作系统)

  2. 虚拟网络接口通常桥接。我们在主机系统中看到了一些非常奇怪的行为,其中一个应用程序在虚拟接口之间建立了自己的桥梁 - 行为在逻辑上不应影响其中一个主要VM解决方案中的主机。

  3. 使用模式 - 如果您的产品在与远程系统交互时具有orwellian许可代码或记录状态依赖行为,则应考虑如果系统被“暂停”并“重新启动”或从之前重新启动时会发生什么情况“州”。通常,在强有力的实施中,这种事情都会被考虑在内。

答案 10 :(得分:0)

如果您在虚拟环境中进行开发,则需要确保知道用于创建环境的规范。如果您说4 Gig机器并创建1 Gig的虚拟环境,您将需要确保开发中的内容不会增长到超出内存的程度。这将导致轻微的性能问题。我个人遇到了这个问题,追踪是一个相当棘手的事情。场景是我正在修复一个错误并在虚拟环境中测试它。我没有按顺序设置虚拟环境......由于正在进行的所有内存交换,应用程序受到了性能损失。

虚拟环境的一个非常好的用途是在开发混乱了Windows Gina的应用程序时。重新安装虚拟环境要比整个PC容易得多....(在这里也做过)。

答案 11 :(得分:0)

我在VMWare Fusion下的虚拟XP实例上进行所有开发,这样我就可以使用Mac来处理所有内容并仍然编写.NET代码; - )

答案 12 :(得分:0)

有时它们是必需的,因为您编程的平台不支持标准开发人员环境。一个这样的例子是Sharepoint。从Sharepoint 2007开始,您仍然需要一个服务器操作系统来安装Sharepoint 2007,WSS和Visual Studio Sharepoint Extensions(VseWSS)。

因此对于Sharepoint,我必须使用Window Server VM来完成我的开发工作。至于Sharepoint 2010,他们支持Vista和7 x64上的安装,但我仍然会使用VM,因为我不希望在我的主机上使用Sharepoint来减慢所有内容。相反,我希望它在需要时启用服务的虚拟机中,而在不需要手动关闭/打开每个服务的情况下关闭。除了上面发布的许多重要答案之外,还有这个。