Sollte sich eine Entwicklungsmaschine in einer VM befinden? [geschlossen]

41

In diesem Beitrag von Rob Conery (beachten Sie den Slug) heißt es, dass die Entwicklungsumgebung in einer virtuellen Maschine ausgeführt werden sollte. Ich verstehe, was er sagt und stimme eher zu, fühle mich aber immer noch ein wenig unwohl. Jetzt, wo die Virtualisierung so ausgereift ist, dass selbst Produktionssysteme innerhalb der Geschwindigkeit von VMs laufen, ist das so gut wie kein Problem, aber wie ich sage, stört mich hier etwas.

Wie sehen Sie die Virtualisierung Ihrer Entwicklungsmaschine? Hast du das schon getan? Wenn ja, irgendwelche Fallstricke oder Fallstricke entlang der Straße?

Anton Gogolev
quelle
1
Was stört dich? Es ist immer noch für alle Zwecke ein Computer.
2
Mögliches Duplikat von Thoughts on Development mit virtuellen Maschinen
JeffO
Was ist eine Entwicklungsmaschine? Entwicklerarbeiten oder eine gemeinsame Entwicklungsumgebung?
user606723

Antworten:

29

Meine Erfahrung mit der Entwicklung auf VMs in einer Unternehmensumgebung zeigt, dass es aufgrund der mit Schwierigkeiten behafteten Virtualisierung mehrerer Cores schwierig ist, die Leistung zu erzielen, die viele Unternehmensentwicklungsmaschinen benötigen.

Um die innere Schleife für den Code-Compile-Test so schnell wie möglich zu gestalten, sind die bestmöglichen Maschinen erforderlich. Das Kompilieren und Ausführen von Tests erfolgt auf Maschinen mit mehr Kernen offensichtlich schneller, da diese Aktivitäten relativ einfach gleichzeitig ausgeführt werden können. * .

Solange Mainstream-Entwicklungsbetriebssysteme nicht mit der Flüchtigkeit der Anzahl verfügbarer Kerne fertig werden und Virtualisierungssoftware nicht auf intelligente Weise einen "bis zu N-Kern" -Vertrag anbieten kann, bieten virtualisierte Entwicklungsmaschinen nicht die gleiche Produktivitätsrendite wie physische Geräte.

BEARBEITEN: Dies ist nur eine Erinnerung an meine persönlichen Gefühle bei der Entwicklung mit von Unternehmen diktierten VMs, die häufig zur Senkung der Hardwarekosten eingesetzt werden, die in der Regel auf Servern ausgeführt werden. Das Ausführen einer lokalen VM erscheint meistens überflüssig, vorausgesetzt, Sie setzen eine gute Disziplin für die Quellcodeverwaltung durch, es sei denn, für Ihr Projekt müssen Sie speziell Code für mehrere Betriebssysteme entwickeln.

*: Damit meine ich, dass die Unteraufgaben in den Kompilierungs- und Testphasen gleichzeitig ausgeführt werden können, NICHT gleichzeitig kompilieren und testen :)


quelle
+1 - das war meine Erfahrung mit der Entwicklung auf einer VM. Der Performance-Hit ist einfach keine potenziellen Gewinne wert. Eine Entwicklungsmaschine kann einfach nicht schnell genug sein.
Scott Whitlock
Ich habe es nie gemacht (außer für Multi-Plattform-Tests), aber im Prinzip, konnte die VM nicht auf verrückte Geschwindigkeit gebracht werden? Die Benutzeroberfläche könnte langsamer sein, aber Sie könnten beim Kompilieren eine Menge Eisen in den Serverraum werfen, nicht wahr?
Dan Ray
1
Im Prinzip sicher! Das Definieren einer VM mit viel Arbeitsspeicher und 20 Prozessoren ist nicht der schwierige Teil. Der schwierige Teil ist, wenn Sie ein Dutzend hochspezifizierter VMs auf demselben Server haben - wenn Sie 12 Einzelprozessor-VMs auf einem 8-CPU-Server haben, bekommt jede VM etwas CPU-Zeit, wenn ein Prozessor verfügbar wird. Wenn Sie 3 VMs mit jeweils 4 Kernen haben, müssen Sie warten, bis 4 CPUs frei sind, bevor jede VM CPU-Zeit erhält. Ganz zu schweigen von der Notwendigkeit, alle diese Kerne in einen anderen Kontext zu setzen ... es wird schwierig. Ich habe nicht gehört, dass es in großem Maßstab zufriedenstellend gemacht wird - was nichts bedeutet :)
1
+1 Dies ist auch meine Erfahrung. Dies wird durch die Vorteile von Checkpoints und dem Null-Setup für neue Entwicklungsumgebungen etwas ausgeglichen, aber die Leistung ist nicht die beste.
Steven Evers
1
@MarcoDinacci Fairer Punkt. Ich würde behaupten, dass Sie mit der richtigen Quellcodeverwaltung nicht in einer VM sein müssen , es sei denn, Sie entwickeln für mehrere Betriebssysteme.
12

Ich mache meine ganze persönliche Entwicklung in VMs. Ich habe mehrere VMs für verschiedene Umgebungen eingerichtet und es funktioniert einwandfrei.

Ich habe ein Dell Studio 15 Laptop (Quad I7 2,8 GHz, 8 GB RAM, ATI-Grafik) mit Win 7 ultimative 64-Bit mit Virtualbox installiert. Ich habe alle meine VMs von einem externen 500-GB-USB-Laufwerk mit Klettverschluss an den Laptop.

VM 0 - Windows 7 64-Bit-Neuinstallation als Basisvorlage

VM 1 - Win 7 64-Bit (2 CPU, 4 GB RAM, 120 GB HD) mit Visual Studio 2008-Toolset

VM 2 - Win 7 64-Bit (2 CPU, 4 GB RAM, 120 GB HD) mit Visual Studio 2010-Toolset

VM 3 - Win 7 64-Bit (2 CPU, 2 GB RAM, 120 GB HD) mit dem Eclipse Java-Toolset

Wenn ich nicht gerade etwas mache, das sehr hohe IO erfordert, habe ich das Gefühl, dass die Leistung gut ist, und ich würde nicht wissen, dass ich mich in einer VM befinde, wenn mir gerade jemand den Laptop gereicht und gesagt hätte, dass ich mit der Entwicklung beginnen soll.

Alan Barber
quelle
1
Ich führe auch etwas Ähnliches aus. Das große Problem besteht jedoch darin, dass Sie, sobald Sie eine Visual Studio-Lösung mit vielen Projekten haben, am Ende Minuten darauf warten, dass das Projekt gestartet wird. Trotzdem benutze ich die VM immer noch, wenn dies kein Problem ist. Es ist ausgezeichnet, eine tragbare Umgebung zu haben.
Ally
11

Ich möchte hinzufügen, dass bestimmte Arten der Entwicklung durch virtualisierte Maschinen viel schwieriger (wenn nicht unmöglich) sind.

Ich arbeite zufällig in einem Unternehmen, in dem wir Softwarepakete anbieten, die sich in eine Reihe verschiedener USB-Peripheriegeräte integrieren lassen (z. B. Webcams, Etikettendrucker, Magnetstreifenleser usw.). Selbst wenn ich USB-Ports einem virtualisierten Server zuordnen würde, stelle ich bizarre und unerklärliche Probleme mit Gerätetreibern von Drittanbietern fest.

Wie gesagt, ich glaube nicht, dass diese Situation es rechtfertigt, NICHT auf virutalisierten Entwicklungscomputern zu arbeiten. Wir haben sie jedoch noch nicht herausgefunden. Daher unterhalten wir physische Workstations für verschiedene Umgebungen in einem Labor.

maple_shaft
quelle
1
Es ist auch ein Problem, wenn Sie eine RAS-Sicherheitskarte verwenden müssen, um eine Verbindung zu TFS oder etwas anderem herzustellen.
Steven Evers
8

In unserem Unternehmen verwenden wir die VM jetzt zum Entwickeln und Testen. Obwohl es einige Nachteile bei der Verwendung von VMs gibt, überwiegen deren Vorteile diese bei weitem.

Bevor wir anfingen, VMs zu verwenden, hatten wir Probleme, Entwicklungsmaschinen für neue Entwickler einzurichten. Die erste Aufgabe für den neuen Entwickler im Team bestand normalerweise darin, eine eigene Entwicklungsmaschine einzurichten. Wir sind eine kleine Firma und wir haben nicht immer genug Personal, um neuen Teammitgliedern bei der Einrichtung ihrer Maschine zu helfen. Dies führte zu verschiedenen Problemen: Manchmal war der Fehler nur auf ihrem Computer reproduzierbar oder sie konnten ihn überhaupt nicht reproduzieren, die Anwendung konnte nicht richtig erstellt werden usw. Außerdem gab es ein Problem, dass einige unserer leitenden Entwickler an mehreren Projekten arbeiteten auf Arbeitsumgebungen, die nicht immer kompatibel waren.

Als wir auf VMs umgestiegen sind, hat sich alles geändert. Jetzt ist nur noch eine Person für die Einrichtung der Umgebung in einer VM mit allem verantwortlich, was mit dem Projekt zusammenhängt. Wenn er fertig ist, erhalten alle Teammitglieder die Kopie der VM. Dies verkürzt die Zeit zum Einrichten der Umgebung für jedes neue Teammitglied (das Kopieren der VM sollte nicht länger als 1 Stunde dauern). Es ermöglicht uns auch, in mehreren Arbeitsumgebungen gleichzeitig zu arbeiten.

Die Nachteile für die Verwendung von VMs: Geschwindigkeit. Der Leistungstreffer auf der VM ist sichtbar. Auf langsameren Arbeitsstationen kann dies die Entwicklung nahezu unmöglich machen. Wenn Sie eine gute Workstation haben (Quad Core, 8 + GB RAM, SSD), werden Sie es wahrscheinlich nicht bemerken.

Christian P
quelle
1
Haben Sie darüber nachgedacht, Ihre Toolchain zu optimieren? Wenn Ihre Tool-Einrichtung so kompliziert ist, dass sie nicht einfach installiert werden kann, müssen Sie die Tools möglicherweise ein wenig überdenken.
Michael Kohne
Es geht nicht nur um Toolchain, sondern auch um die Zeit , die Maschine einzurichten und Probleme in verschiedenen Umgebungen zu beheben. Warum sollte jemand 2 Stunden damit verbringen, etwas zu installieren / einzurichten, wenn dies bereits jemand anderes getan hat?
Christian P
Warum können Sie keine Entwicklungsmaschine erstellen und ein Image erstellen, um zusätzliche Instanzen zu erstellen? Dies setzt voraus, dass Sie alle die gleiche Hardware verwenden.
JeffO
@ JeffO Sie haben mehr Flexibilität mit VM, weil es nicht so hardwareabhängig ist. Es wäre in Ordnung, wenn wir alle an der gleichen Hardware arbeiten würden, aber wir verwenden Laptops / Desktops.
Christian P
1
Nur neugierig - hat Ihr Team Leute, die so oft abreisen / kommen , dass Ihnen das Einrichten einer neuen Maschine am Herzen liegt? Ich vermute, dass Sie durch die Stabilisierung des Teams erheblich mehr Produktivität erzielen können. (Das Einrichten des Menschen ist eigentlich der Engpass, im Gegensatz zur Maschine, denke ich)
kizzx2
7

Wie andere bereits erwähnt haben, hängt es von mehreren Dingen ab:

  • Wie sieht Ihre Umgebung aus?
  • Haben Sie ausreichende Zugriffsrechte für die Entwicklung?
  • Hat deine HW Lust zu schnupfen?

Umgebung

Die Verwendung einer VM kann hilfreich sein, wenn Sie an mehreren Versionen eines Projekts arbeiten. mehrere Projekte; oder ein anderes Betriebssystem als das, das Sie normalerweise ausführen (Host-Betriebssystem). Ich arbeite viel mit SharePoint und es ist hilfreich, einen anderen Computer für die verschiedenen Versionen einer Version ausführen zu können, da ich einfach einen anderen Computer starten kann und ein gutes Gefühl für den Status der GAC / Datenbank habe. Auch wenn Sie auf eine * nix-Anwendungsumgebung abzielen müssen, aber einen Windows-Computer haben, können Sie die Entwicklung trotzdem in einer VM durchführen (so lerne ich Ruby zu Hause, obwohl ich im Allgemeinen .NET-Entwickler bin). Ich empfehle im Allgemeinen, wenn Sie die ASP.NET-Entwicklung auf derselben Version von IIS testen / entwickeln, unter der die App letztendlich ausgeführt wird (dasselbe gilt für andere Serverzielumgebungen). Abhängig von der Version des Betriebssystems kann es einige kleine, aber kritische Unterschiede geben. Beachten Sie, dass dies nicht bedeutet, dass Sie auf eine bestimmte Version von IIS / OS programmieren sollten, aber seien wir ehrlich, es muss wirklich funktionieren, wo Sie es bereitstellen wollen, nicht nur auf Ihrem lokalen Computer.

Mit VMs (abhängig von der verwendeten Software) können Sie außerdem Snapshots des aktuellen Maschinenzustands erstellen und / oder klonen. Dies kann von unschätzbarem Wert sein, wenn Sie einen Prototyp erstellen, und Sie müssen sich nicht so viele Gedanken darüber machen, was in Ihrem GAC / Ihrer Registrierung / usw. vor sich geht. Da sich die Demo-Umgebung in einer VM befand, konnte ich weiterarbeiten, bis dem Kunden gezeigt wurde, was wir erledigt hatten, weil ich auf einer anderen Maschine arbeitete .

Ausreichende Rechte

Dies gilt im Allgemeinen für Personen, die für ein Unternehmen arbeiten und über recht strenge Richtlinien für Zugriffsrechte verfügen. Wenn Sie keinen uneingeschränkten Administrator auf Ihrem Computer haben können, ist dies ein guter Zeitpunkt, um in einer VM zu arbeiten. Normalerweise sorgen sich die Befugnisse nur darum, Ihr Host-Betriebssystem zu sperren. Der Gast kann weit offen sein (in Bezug auf Berechtigungen). Ich habe seltsame Probleme mit Roaming-Profilen, eingeschränkten Administratorrechten und der Ausführung von VS 2010. Mit einer VM konnte ich diese Probleme vermeiden.

Hat deine HW Lust zu schnupfen?

Dies hat zur Folge, dass sich Ihre VM-Images entweder auf einem Server befinden und Ihre Fernbedienung in sie einbindet, ODER Sie sie lokal ausführen. Wenn Sie auf dem Server ausgeführt werden, besteht die größte Sorge wahrscheinlich darin, dass zu viele VMs auf derselben Hardware ausgeführt werden. Vor Ort möchten Sie grundsätzlich viel RAM und minimieren, wie oft Sie den R / W-Puffer für Ihre Festplatte überlasten. Für die grundlegende LOB / SharePoint / ASP.NET-Entwicklung habe ich festgestellt, dass mindestens 8 GB RAM und eine Konfiguration mit zwei Festplatten in der Praxis einwandfrei funktionieren (mit einem i5, aber ich habe auch mit einem Core 2 gearbeitet). Die zweite Festplatte macht den größten Unterschied in der Leistung.

Hinweis: Ich habe keine Statistiken, um dies zu sichern, aber ich habe festgestellt, dass Virtual PC im Vergleich zu VMWare und Virtual Box tendenziell eine Underperformance aufweist. Ich kann nicht mit Hyper-V sprechen, da ich nicht damit gearbeitet habe. Ich wäre nicht überrascht, wenn die Verwendung von Virtual PC (als erster Einstieg in die Verwendung von VMs) den Entwicklern die Verwendung von Virtualisierungssoftware erschweren würde.

Ken Henderson
quelle
5

Wie immer: es kommt darauf an. Zum Beispiel würde ich es auf keinen Fall für Echtzeit- oder Computerspielentwicklungen empfehlen.

Meine persönliche Erfahrung: Ich besitze einen iMac von Ende 2009 und habe festgestellt, dass Visual Studio 2010 in Parallels Desktop im Grunde unbrauchbar ist, sodass das Drücken einer Taste im Code-Editor nur wenige Sekunden dauert, um sich zu registrieren. Windows in SQL Server Management Studio würde den Fokus anscheinend nach dem Zufallsprinzip defokussieren und wechseln. Ich bin gerade mit Bootcamp gefahren.

Natürlich wird ein neues Projekt von mir eine iOS-Anwendung mit einem Windows-basierten Konfigurationstool beinhalten, daher ist es möglicherweise zu schmerzhaft, die Virtualisierung nicht zu verwenden, aber wenn die Desktop-Virtualisierungstechnologie im letzten Jahr nicht genügend Fortschritte gemacht hat, Ich werde hier wahrscheinlich nur einen weiteren Desktop einrichten.

Wenn es um das Testen einer Serveranwendung geht, ist das eine andere Situation. Ich bin sehr froh, das zu virtualisieren, aber ich brauche Reaktionsfähigkeit in meinen Entwicklungsanwendungen.

Steve Rukuts
quelle
1

Ich habe VMs für die Entwicklung verwendet und im Großen und Ganzen unterscheidet es sich nicht wesentlich von der Entwicklung auf meinem eigenen Computer. Wenn Sie die Quellcodeverwaltung ordnungsgemäß verwenden, gibt es nicht viele Unterschiede.

Die Hauptunterschiede bestehen darin, dass Sie, wenn Sie aus irgendeinem Grund offline sind, keinen Entwicklungscomputer zur Verfügung haben, also nicht so toll, wenn Sie viel von zu Hause aus reisen oder arbeiten. Ich habe auch nie herausgefunden, wie man mehrere Monitore auf einem Remotedesktop ausführt, aber ich bin mir sicher, dass dies eher ein Fehler als ein Problem mit dem Prinzip ist. Normalerweise habe ich meinen Hauptmonitor für die Entwicklung verwendet und den zweiten für meinen Desktopcomputer mit E-Mail, Browsern usw. ausgeführt.

Ich füge hinzu, dass es erstaunlich praktisch ist, VMs für verschiedene Betriebssystemversionen auszuführen, wenn Sie so arbeiten, dass Sie überprüfen müssen, ob Ihr Code auf verschiedenen Plattformen funktioniert - insbesondere bei der Entwicklung von Installationsprogrammen.

Glenatron
quelle
2
Sie betreiben Ihre VMs nicht auf Ihrem eigenen Computer?
1
In Unternehmensumgebungen werden den Benutzern manchmal VMs zugewiesen, die in einem Rechenzentrum ausgeführt werden, anstatt dass Computerabbilder lokal vorhanden sind.
Wenn ich es getan habe, habe ich sie auf einem VMWare-Server ausgeführt.
Glenatron
1

Ich habe sie bei der vorherigen Firma verwendet. Mehrere Steuerelemente von Drittanbietern existierten nicht gut mit anderen Versionen desselben Unternehmens zusammen. Ich habe auch ein paar zum Testen und Debuggen anderer Betriebssysteme verwendet (XP vs Vista vs 7). Ein virtueller hatte VB6 und VS2003 für die älteren Produkte. Ja, auf einem typischen Entwicklercomputer kann es langsam und umständlich sein, aber ich hatte ein paar freie Festplatten, die ich "gespendet" habe und die die virtuellen auf ihre eigenen Festplatten auf ihre eigenen Laufwerkscontroller gestellt habe. Ich war der letzte, der weiterhin Virtuals verwendete, und für einige Bugs konnte nur ich daran arbeiten (aufgrund von Bedenken hinsichtlich des Betriebssystems und der Komponenten).

Einige der Jungs brannten darauf, Beta-Software zu installieren, und einige der Betas von MS konnten nicht entfernt werden, so dass sie gezwungen waren, Virtuals zu verwenden, bis sie ihre Festplatten neu formatierten.

Für die Entwicklung in virtuellen Umgebungen empfehle ich mindestens 8 GB RAM. 16 oder mehr wären besser, da jedes mit Visual Studio ausgestattete virtuelle System etwa 1,5 GB RAM des Hosts benötigt, um mit Geschwindigkeiten über "glacial" zu arbeiten. Holen Sie sich außerdem beim Kauf eines Computers viele Festplatten. Suchen Sie für Laufwerke, die Sie aus Ihrem Hardware-Ersatzstapel auswählen, Laufwerke, die mindestens doppelt so groß sind wie die VHD, die Sie ausführen werden.

Tangurena
quelle