开发机器应该在VM内吗?[关闭]


41

Rob Conery的这篇文章(请注意)表示开发环境应在虚拟机中运行。我明白他在说什么,并且倾向于同意,但仍然有些不安。既然虚拟化已经非常成熟,甚至生产系统都可以在VM内运行,那么这几乎不是问题,但是正如我所说的那样,这让我很困扰。

您如何虚拟化开发计算机?你已经这样做了吗?如果这样做的话,路上有什么陷阱或陷阱吗?


1
是什么困扰你?它仍然是一台用途广泛的计算机。


什么是开发机器?开发人员的工作或共享的开发环境?
user606723 2011年

Answers:


29

我在公司环境中开发VM的经验是,由于多个内核的虚拟化充满困难,因此很难获得许多企业开发机器所需的性能。

要使代码编译测试内部循环尽可能快地需要最好的机器-编译和测试运行显然在具有更多内核的机器上运行得更快,因为这些活动可以很容易地以并发方式执行* 。

除非主流开发操作系统能够处理易变的可用核心数量,并且直到虚拟化软件能够智能地提供某种“最多N个核心”合同,否则虚拟化开发机器将无法提供与物理设备相同的生产力回报。

编辑:这只是重述了我个人对使用公司指定的虚拟机进行开发的感觉,这些虚拟机通常被削减以降低硬件成本,而这些成本往往在服务器上运行。除非您的项目明确要求您为多个操作系统开发代码,否则在您执行良好的源代码控制规则的情况下,运行本地VM似乎几乎是多余的。

*:我的意思是,编译阶段和测试阶段中的子任务可以同时运行,而不是同时编译和测试:)


+1-这是我在VM上进行开发的经验。性能下降根本不值得任何潜在的收益。开发机器不能足够快。
Scott Whitlock,

我从来没有做过(除了跨平台测试),但是原则上,难道虚拟机不能达到疯狂的速度吗?UI可能很慢,但是您可能在编译步骤中扔了很多服务器空间,不是吗?
丹·雷

1
原则上可以!定义具有多个存储区和20个处理器的VM并非易事。困难的部分是,当同一服务器上有十二个高规格虚拟机时-如果一台8 CPU服务器上有12个单处理器虚拟机,那么当一个处理器可用时,每个虚拟机都会获得一些CPU时间。如果您有3个VM,每个VM具有4个核心,则必须等待4个CPU可用,然后每个VM才获得CPU时间。更不用说需要上下文切换所有这些内核了……这变得很困难。我还没听说过大规模完成的情况-这没什么意思:)

1
+1这也是我的经验。为新的开发人员环境设置检查点和零设置的好处在一定程度上弥补了这种不足,但是性能并不是最好的。
史蒂文·埃弗斯

1
@MarcoDinacci公平点。我认为,只要有适当的源代码控制,除非您正在为多个操作系统开发,否则您不必在VM内部。

12

我在VM中进行所有个人开发。我为不同的环境设置了多个虚拟机,并且工作正常。

我有一台运行win 7 Ultimate 64bit并安装了virtualbox的Dell Studio 15笔记本电脑(四核I7 2.8GHz,8GB内存,ATI图形)。我的所有VM都依靠外部500gb USB驱动器粘在笔记本电脑上。

VM 0-Win 7 64位全新安装作为基本模板

VM 1-使用Visual Studio 2008工具集获得Win 7 64位(2 cpu,4gb ram,120gb hd)

VM 2-使用Visual Studio 2010工具集的Win 7 64位(2 cpu,4gb ram,120gb hd)

VM 3-使用Eclipse Java工具集的Win 7 64位(2 cpu,2gb ram,120gb hd)

除非我做的事情需要很高的IO,否则我会感觉性能很好,而且如果有人刚把笔记本电脑交给我并说开始开发,我就不会知道我在VM中。


1
我也运行类似的东西,但是最大的问题是,一旦您拥有一个包含许多项目的Visual Studio解决方案,您最终将在等待几分钟的时间来等待项目启动/磁盘I / O瓶颈难以解决。也就是说,只要这不是问题,我仍然会使用VM,拥有可移植的环境非常好。
Ally 2014年

11

我想补充一点,通过虚拟机,某些类型的开发要困难得多(如果不是不可能的话)。

我碰巧在一家公司工作,该公司提供与许多不同的USB外围设备(例如,网络摄像头,标签打印机,磁条读取器等)集成的软件包。即使我将USB端口映射到虚拟服务器,我也注意到第三方供应商设备驱动程序的怪异和莫名其妙的问题。

就像我说的,我认为这种情况不保证不能在虚拟化的开发机器上工作,但是我们尚未弄清楚这种情况,因此我们在实验室中为不同环境维护物理工作站。


1
如果您需要使用远程访问安全卡连接到TFS或其他设备,这也很痛苦。
史蒂文·埃弗斯

8

在我们公司中,我们现在使用VM进行开发和测试。尽管使用虚拟机存在一些弊端,但其优势远胜于它们。

在开始使用VM之前,我们在为新开发人员设置开发计算机时遇到了问题。团队中新开发人员的首要任务通常是设置自己的开发机器。我们是一家小公司,我们并不总是有人力来帮助新的团队成员设置他们的机器。这导致了不同的问题:有时该错误仅在他们的计算机上可复制,或者根本无法复制,该应用程序无法正确构建等。此外,还有一个问题,即我们的一些高级开发人员正在从事多个项目在并不总是兼容的工作环境上。

当我们切换到虚拟机时,一切都改变了。现在,只有一个人负责在VM中设置与项目相关的所有环境。完成后,将为所有团队成员提供VM副本。这样可以减少为每个新团队成员设置环境的时间(复制VM的时间不应超过1小时)。它还使我们可以在多个工作环境中并行工作。

使用VM的缺点:速度。可以看到虚拟机上的性能下降。在较慢的工作站上,这几乎使开发变得不可能。如果您有一个好的工作站(四核,8 + GB RAM,SSD),您可能不会注意到它。


1
您是否考虑过做一些工作来优化您的工具链?如果您的工具设置过于复杂以至于无法轻松安装,则可能需要重新考虑一下工具。
迈克尔·科恩

这不只是工具链更关心的是在时间设置在机器和故障排除的问题,在不同环境。为什么别人已经花了2个小时来安装/设置某些东西?
Christian P

为什么不能创建开发机并拍摄图像来创建其他实例?假设您都使用相同的硬件。
JeffO 2011年

@JeffO您可以更加灵活地使用VM,因为它与硬件无关。如果我们都在同一硬件上工作,那没关系,但我们使用的是笔记本电脑/台式机。
Christian P

1
只是好奇-您的团队中是否经常有人离开/进来以至于您关心设置新机器?如果是这样,我怀疑稳定团队会给您带来更多的生产率提高。(我认为,设置人员实际上是瓶颈,而不是机器)
kizzx2 2011年

7

正如其他人提到的,它取决于几件事:

  • 您的环境是什么样的?
  • 您是否具有足够的访问权限来进行开发?
  • 您的HW可以sn灭吗?

环境

如果您正在处理项目的多个版本,则使用VM可能会有所帮助。多个项目;或定位不同于您通常运行的操作系统(主机操作系统)的操作系统。我做了很多SharePoint工作,并且能够针对不同版本的发行版运行另一台计算机非常有帮助,因为我可以启动另一台计算机,并且对GAC /数据库的状态有良好的感觉。同样,如果您需要针对* nix应用程序环境但拥有Windows计算机,那么您仍然可以在VM中进行开发(这是我在家学习Ruby的方式,即使我通常从事.NET开发人员也是如此)。我通常会在应用程序最终运行于相同版本的IIS上进行ASP.NET开发测试/开发时提倡(这种合理性适用于其他服务器目标环境)。根据操作系统的版本,可能会有一些细微但重要的差异。请注意,这并不意味着您应该对特定版本的IIS / OS进行编码,但是说实话,确实,它确实必须能够在不仅仅在本地计算机上进行部署的地方工作。

VM(取决于所使用的软件)还允许您拍摄当前计算机状态的快照和/或克隆它们。在制作原型时这可能是无价的,您不必担心GAC / Registry等中发生的事情。我还发现它们对于提前设置客户演示非常有价值。因为演示环境在VM中,所以我可以继续工作,直到向客户端显示由于我在另一台机器上工作而完成的工作

足够的权利

这通常适用于为公司工作的人员,他们对访问权限的政策设置得相当严格。如果您无法在计算机上拥有不受约束的管理员,那么这是在VM中工作的好时机。通常情况下,权力只在担心锁定主机操作系统,来宾可以敞开大门(允许这样做)。我在漫游配置文件,削弱的管理员权限以及运行VS 2010时遇到了奇怪的问题;使用虚拟机可以避免这些问题。

您的HW可以sn灭吗?

归结为您的VM映像位于服务器上,而远程映像位于服务器上,或者您在本地运行它们。如果您在服务器上运行,则最大的担忧可能是在相同硬件上运行的VM过多。在本地,您基本上需要大量的RAM,并尽量减少硬盘驱动器的R / W缓冲区超载的频率。对于基本的LOB / SharePoint / ASP.NET开发,我发现至少8 GB的RAM和双硬盘驱动器配置在实践中可以正常工作(运行i5,但我也使用Core2。)第二块硬盘驱动器在性能上的差异最大。

注意:我没有任何统计数据可支持此操作,但是我注意到与VMWare和Virtual Box相比,Virtual PC的表现都较差。由于没有使用Hyper-V,因此无法与它交谈。如果使用Virtual PC(作为使用VM的最初尝试)对开发人员使用虚拟化软件的厌倦,我不会感到惊讶。


5

和往常一样:这取决于。例如,对于任何实时或与计算机游戏相关的开发,我当然都不会推荐它。

我的个人经验:我有一台2009年末的iMac,我发现Visual Studio 2010在Parallels Desktop中基本上不可用,以至于在代码编辑器中按一个键仅需几秒钟即可注册。SQL Server Management Studio中的Windows显然会自动散焦并切换焦点。我刚刚结束了新兵训练营。

当然,我的一个新项目将涉及一个带有基于Windows的配置工具的iOS应用程序,因此不使用虚拟化可能会很痛苦,但是如果桌面虚拟化技术在过去一年左右的发展还不够好,我可能会在这里设置另一个桌面。

在测试服务器应用程序时,情况有所不同,我非常乐意将其虚拟化,但是我需要开发应用程序中的响应能力。


1

我已经使用VM进行开发,并且总的来说,它与在我自己的机器上进行开发没有太大区别。如果您正确使用了源代码管理,则不会有太多差异。

主要区别在于,如果由于任何原因导致您离线,那么您就没有可用的开发机器,因此如果您经常出差或在家工作,那就没那么好了。另外,我从来没有想过如何在远程桌面上运行多台显示器,但是我确信这是我的失败,而不是原理上的问题。我通常使用主监视器进行开发,而第二个监视器则用于运行电子邮件,浏览器等的台式机。

我要补充一点,如果您以某种方式检查代码是否可以在不同平台上工作,尤其是开发安装程序之类的东西,那么能够为不同操作系统版本运行VM便非常方便。


2
您不是在自己的计算机上运行VM吗?

1
有时,在公司环境中,为人们分配了在数据中心运行的VM,而不是在本地拥有机器映像。

完成后,我已经在VMWare服务器上运行它们。
glenatron 2011年

1

我在以前的公司中使用过它们。多个第三方控件与同一公司的其他版本不能很好地共存。我还使用了一些工具来测试和调试其他操作系统(XP vs Vista vs 7)。其中一个虚拟机具有用于较旧产品的VB6和VS2003。是的,在典型的开发人员的计算机上,它可能很慢而且很麻烦,但是我“捐赠”了一些备用硬盘驱动器,并将虚拟机放在自己的硬盘驱动器上。我是最后一个继续使用虚拟机的人,而且对于某些错误,只有我才能使用它们(由于操作系统和组件方面的问题)。

有些人安装了beta版软件后就被烧死了,MS的某些beta版无法删除,因此他们被迫使用虚拟机,直到他们重新格式化硬盘。

对于使用虚拟机进行开发,我的建议是获取至少8GB的RAM。16或更多会更好,因为您会发现任何装有Visual Studio的虚拟工作室都需要大约1.5GB的主机RAM,才能以高于“ glacial”的速度运行。另外,购买计算机时请购买大量硬盘。对于从备用硬件堆中挑选出来的驱动器,请寻找至少要运行的VHD大小两倍的驱动器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.