【问题标题】:Virtualization and why it is good for programmers虚拟化以及为什么它对程序员有好处
【发布时间】:2009-06-29 13:35:45
【问题描述】:

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

【问题讨论】:

    标签: virtualization


    【解决方案1】:

    我将它用于测试我们的安装程序,因为检查应用程序是否可以在操作系统的全新安装上运行非常重要。

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

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

    【讨论】:

      【解决方案2】:

      如果您开发驱动程序或与硬件非常接近的东西,并且有很高的机器崩溃风险,您会很高兴在虚拟机上工作。

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

      【讨论】:

      • 同意,这似乎是您喜欢在虚拟机上而不是在您的机器上开发的时刻之一。
      【解决方案3】:

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

      我还可以备份我的整个开发环境以非常轻松地将其转移到另一台物理机器上。我一个人在这个办公室就用过 3 台机器,这本身就是一个救命稻草。

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

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

      【讨论】:

      • I/O 方面的性能是一个更大的问题。编译代码等需要良好的 I/O,尤其是对于较大的项目
      • 刚刚重温一下。随着廉价 SSD 的出现,I/O 问题几乎不再是问题。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        就我个人而言,我的所有开发工作都是在我的台式机上进行,以获得最佳性能,并远程调试到虚拟机中。我不在我的桌面上运行虚拟机,因为它占用了太多 RAM,我们有专门的虚拟服务器来解决这个问题。

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:
                • 记录程序中的错误状态,并将其发送给开发人员(连同整个“机器”)。
                • 在各种操作系统上测试您的代码,其中一些您没有。
                • 在更受保护的环境中工作,确保代码不会损害您的系统 - 有助于理解危险程序(如病毒),并开发针对它的安全性,编写潜在错误的硬盘驱动器程序,以及任何可能对您的系统造成灾难性影响。
                • 轻松编写自己的操作系统,而无需在“真实”引导扇区上写入,这是一种潜在的有害行为(希望这不是新事物...)。
                • 快速使用您自己的操作系统上没有的工具和程序
                • 通过还原虚拟机,在不同时间演示程序, 比尝试在演示前几分钟重新创建状态更快且更不容易失败。
                • 与编程的直接联系较少,但通过虚拟机浏览(例如查看文档)具有附加价值,即您自己的重要系统(和代码)不太可能受到恶意程序的损害。

                【讨论】:

                  【解决方案10】:

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

                  在虚拟机上运行时必须注意一些怪癖。这并不是一份详尽的清单:

                  1. 由于硬件资源仿真(在一定程度上取决于 vm 平台和操作系统),高分辨率计时器中的精度损失甚至时间反转

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

                  3. 使用模型 - 如果您的产品在与远程系统交互时具有奥威尔式许可代码或记录状态相关行为,您应该考虑如果系统“暂停”和“重新启动”或从较早的“重新启动”会发生什么状态”。通常,在健壮的实现中无论如何都会考虑到这种事情。

                  【讨论】:

                    【解决方案11】:

                    如果您在虚拟环境中进行开发,您需要确保知道创建该环境时使用了哪些规范。如果您说一台 4 Gig 机器并创建一个具有 1 Gig 的虚拟环境,您将需要确保开发中的内容不会增长到超出内存的程度。这将导致轻微的性能问题。我个人遇到了这个问题,这是一件非常棘手的事情。场景是我正在修复一个错误并在虚拟环境中对其进行测试。顺便说一句,我没有设置虚拟环境......由于发生了所有内存交换,该应用程序的性能受到了影响。

                    虚拟环境的一个很好的用途是当您开发与 Windows Gina 混淆的应用程序时。重新安装虚拟环境比重新安装整个 PC 容易得多....(这里也做过)。

                    【讨论】:

                      【解决方案12】:

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

                      【讨论】:

                        【解决方案13】:

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

                        因此对于 Sharepoint,我必须使用 Window Server VM 来完成我的开发工作。至于 Sharepoint 2010,他们支持在 Vista 和 7 x64 上安装,但我仍将使用 VM,因为我不想在我的主机上安装 Sharepoint,从而减慢一切。相反,我希望它在一个 VM 中,服务在需要时打开,而在我不需要时关闭,而无需手动关闭/打开每个服务。除了上面发布的许多很好的答案之外。

                        【讨论】:

                          猜你喜欢
                          • 2011-11-08
                          • 2011-04-04
                          • 1970-01-01
                          • 2010-11-10
                          • 1970-01-01
                          • 1970-01-01
                          • 2017-02-14
                          • 2015-04-12
                          • 2011-07-09
                          相关资源
                          最近更新 更多