使用虚拟化(即使用VMWare和Microsoft Virtual PC等软件运行一台或多台“虚拟 PC” )进行软件开发的关键用例是什么?
还有——是否还有我上面的定义没有涵盖的其他虚拟化实例/使用(使用像 MS Virtual PC 或 VMWare 这样的工具),并且对开发人员有用?
我提出这个问题的动力是Metro Smurf的StackOverflow 评论断言“你会想知道没有它你是如何开发的!”,关于虚拟化的使用。
(请在每个回复中仅包含一个用例。谢谢!)
使用虚拟化(即使用VMWare和Microsoft Virtual PC等软件运行一台或多台“虚拟 PC” )进行软件开发的关键用例是什么?
还有——是否还有我上面的定义没有涵盖的其他虚拟化实例/使用(使用像 MS Virtual PC 或 VMWare 这样的工具),并且对开发人员有用?
我提出这个问题的动力是Metro Smurf的StackOverflow 评论断言“你会想知道没有它你是如何开发的!”,关于虚拟化的使用。
(请在每个回复中仅包含一个用例。谢谢!)
据我所知,在多个环境中进行应用程序测试是虚拟化的一种明显用途。在其他操作系统上测试您的应用程序(不需要额外的物理计算机),以及涉及通常只允许您在给定机器上安装单个版本的软件的测试(例如 Internet Explorer 浏览器;同时运行 IE6和 IE7 在同一台机器上不是官方支持的配置),是虚拟机使用的良好候选者。
如果您的构建服务器在虚拟机中运行,您可以为每个软件版本制作快照,以便 100% 确保您可以重新创建构建环境(例如,如果您想为旧版本打补丁)。
如果您设置了开发环境的快照(并对其进行备份),那么在您的计算机出现故障时可以很容易地恢复生产力。当您的机器在您发布之前发生故障时 - 您可以在安装和配置所有工具后立即恢复,它可以成为救生员。
适用于我当前情况的最简单的情况是,我们有一个复杂的客户端-服务器环境,并且通过虚拟化,每个开发人员都可以非常快速地获得一组基线操作系统,以将其本地构建部署到并验证端到端功能。
在本地,您有您的开发盒和 N 个客户端盒,每次您想尝试构建时,它们都会重新初始化为新的操作系统。从本质上讲,它相当于“make clean”的测试环境,甚至客户端工作站也被新的操作系统取代。
在团队成员之间快速分配环境对于虚拟化来说是一个非常好的用例,特别是如果您有很多不同的组件、工具等。这可以为您节省大量与新员工、承包商或其他需要环境很快。
许多演示者使用虚拟机进行演示 - 它允许他们立即恢复以重置第二天的演示,在计算机之间快速传输所有演示材料,而不必向与会者展示您凌乱的“我的文档”文件夹。
将虚拟化用于销售活动也是一个很好的用例。您可以在特定时间拍摄快照,并将其保存为演示基线。然后,一旦您完成演示并更改数据等,您就可以恢复到以前的基线以供将来的演示使用。您还可以捕获多个基线并挑选最适合即将到来的演示的基线。
我们开发用于 SaaS 应用程序的软件,我们的生产环境有大量服务器,并且它们的软件环境需要绝对可预测;我们不能在我们的开发机器上额外安装或缺少任何东西。
此外,我们的应用程序需要许多不同类型的服务器才能正常运行(我上次数至少有 7 个);大多数情况下,它们不能安装在同一台(虚拟)机器上——至少,不会违反“与生产相同的软件”的要求。
为了拥有一致的环境,有必要使用虚拟机。我不知道没有他们的人如何管理。
快照和回滚也很好,但我只是偶尔使用它们(在安装/升级测试期间非常有用)。
假设您正在开发软件的新版本,并检查从以前版本的升级是否正常工作......在无法回滚盒子的情况下进行测试周期需要多长时间?你必须重新安装操作系统然后旧版本?你能保证卸载真的卸载一切吗?
能够测试/重新测试您的部署过程是一个巨大的节省。
我很惊讶没有人提到非常适合调试的 VMware 记录/重放功能(很棒的视频演示)。
我有一个运行 ESXi 的无头服务器,它运行各种机器来构建安装程序(所以我不必放弃我桌面上的处理能力)、自动化测试(服务器比任何桌面都快)和各种测试环境(大约 20 种不同的配置) 以便支持团队可以轻松跳转到与客户系统紧密匹配的配置。
当您拥有一台运行虚拟机的非常强大的服务器时,可以在支持、测试和开发团队之间共享,您就可以节省大量成本。总之,我们在 5-10 人共享的 ESXi(双四核 Xeon 2.5G + 8Gb RAM)上运行了大约 25 个虚拟机,一些开发人员使用 Virtual PC,然后我在我的桌面上使用 VMware Workstation。这里的所有 Mac 用户也都使用 VMware Fusion
测试环境。如果您有多个系统需要针对的设置(例如 Windows 和 Linux、XP 和 Vista),那么具有大量 RAM 和 VMWare(或其他)的机器是管理环境的好方法。
另一个是在一个系统上开发并针对另一个系统。例如,有一次我在运行 Linux 的工作站上做了一些 J2EE 工作,其中客户端是 IE 5.5。带有 Windows 2000 和 IE 5.5 的 VM 可以让我测试应用程序。
我使用虚拟机进行开发的原因。
目前,我正在使用 VirtualBox 进行 VM 设置。我曾经使用 VirtualPC,但我真的很讨厌没有任何类型的“快照”功能(就像 VMware 和 VirtualBox 一样)。
我的主要工作机器有 Office 2007。当我使用 Office 2003 的加载项时,我使用带有 Visual Studio 和 Office 2003 的虚拟机。
令我惊讶的是,没有人提到通过隔离不同 VM 中的数据库服务器和 Web 服务器来提高安全性的好处。
一些服务器应用程序也可以使用虚拟机。当一个虚拟机使用不多时,服务器可以将资源定位到其他虚拟机。
某种测试环境:如果您正在调试恶意软件(编写或开发针对它的药丸),那么使用真正的操作系统并不聪明。唯一可能的缺点是病毒可以检测到它们正在虚拟化中运行。:( 这样做的一种可能性是因为 VM 引擎可以模拟一组有限的硬件。