Gedanken zur Entwicklung mit virtuellen Maschinen [geschlossen]


51

Ich werde als Entwicklungsleiter für ein Startup arbeiten und ich habe vorgeschlagen, dass wir VMs für die Entwicklung verwenden. Ich spreche nicht von jedem Entwickler, der einen Desktop mit VMs zum Testen / Entwickeln hat, sondern von einem Server-Rack, in dem alle VMs verwaltet werden und die Entwickler von einem MicroPC (ChromeOS?) Vor Ort oder sogar von zu Hause aus arbeiten Computer.

Die Vorteile liegen für mich in der Tatsache, dass es extrem skalierbar, langfristig günstiger, einfacher zu verwalten ist und dass wir das maximale Potenzial der Hardware ausschöpfen. Was die Nachteile angeht, kann ich mir keine besonderen Showstopper vorstellen, außer dass wir jemanden brauchen, der das Setup einrichtet / wartet.

Ich hatte gehofft, dass einige von Ihnen möglicherweise eine ähnliche Einstellung an Ihrem Arbeitsplatz haben und sich mit Ihren Meinungen abfinden könnten. Vielen Dank.


7
Dies ist nicht die IBM VM / ESA Ihres Vaters! Zurück zum IBM Mainframe.
Vitor Py

23
Über den einzigen Showstopper für mich wäre die Unterstützung mehrerer Bildschirme. Ich konnte nicht auf weniger als 2 Bildschirmen entwickeln.
Justin Shield

27
Es gibt viele exotische Gründe: Manchmal muss ein USB-Stick für Lizenzierungszwecke an einen physischen Computer angeschlossen werden. Manchmal haben Sie es mit tatsächlichen CDs zu tun. Manchmal müssen Sie den Sucker neu starten. Manchmal müssen Sie die Leistung wie auf einem tatsächlichen Computer messen. Manchmal entwickeln Sie Treiber. Manchmal braucht man die Geschwindigkeit, die man bekommen kann. Manchmal müssen Sie das Produkt an einem Ort ohne Internetzugang testen. Manchmal müssen Sie sich mithilfe der Fingerabdruckvalidierung bei einem System anmelden.
Job

47
Moderne IDEs erfordern dedizierte, lokale Hardware. Bevor Sie überhaupt darüber nachdenken, sollten Sie einen Prüfstand und eine Studie haben, um zu sehen, ob es überhaupt machbar ist. Sie können ein oder zwei Dinge lernen, von denen Sie nicht wussten, wie Menschen mit Maschinen interagieren. Wenn Sie mir sagen, dass Sie nicht die Zeit oder das Geld haben, um eine solche Studie durchzuführen, werde ich Ihnen sagen, dass Sie nicht über genügend Umfang verfügen, um Ihr Setup zu rechtfertigen.
Robert Harvey

4
Denken Sie daran, dass Sie auch physische Maschinen benötigen. Unsere Testserver befinden sich fast ausschließlich auf VMs, die auf zwei SAN-Hosts verteilt sind. Es treten jedoch Probleme auf, bei denen wir überprüfen möchten / müssen, ob die Virtualisierung kein Faktor oder gar der Schuldige ist. Außerdem unterstützen nicht alle VMs das Theming mit Glas. Wenn Sie GUIs entwickeln, müssen Sie Ihre GUI auch in einer Glas-Themenumgebung überprüfen.
Marjan Venema

Antworten:


96

Was möchten Sie als Bruchteil des Entwicklungsbudgets einsparen? Mir scheint, Sie machen sich Sorgen um ein Epsilon. Die Maschinenkosten für Entwickler betragen weniger als 5% der Gesamtkosten für die Mitarbeiterbindung eines Entwicklers. Daher ist die einzig wichtige Frage: "Spart es Entwicklern Zeit?" Dies könnte der Fall sein, wenn sie keine Zeit damit verbringen müssen, Entwicklungssoftware zu installieren und zu aktualisieren. Oder es kann Zeit kosten, wenn das Netzwerk ausfällt oder der Server ausfällt oder höchstwahrscheinlich, wenn die Reaktionsfähigkeit über das Netz am wenigsten fehlt. Die moderne Entwicklung hängt von der Interaktion per Tastendruck mit einer IDE oder zumindest einem sehr intelligenten Editor ab. Die Verzögerung dieser Interaktion um einige zehn Millisekunden zerstört die Entwicklerproduktivität. Entwickler müssen sich auch mit dieser neuen Arbeitsweise auseinandersetzen.

Dies sind keine Einwände gegen VMs, sondern potenzielle Einwände gegen die Remote-Entwicklung.


Ich verstehe Ihren Standpunkt, aber der Server wird lokal sein (derselbe Raum) wie die Entwickler. Die Latenz ist gegeben, wenn sie von zu Hause aus arbeiten, und diese Latenz ist unabhängig davon, ob sie von einer VM stammt oder von einem Entwickler stammt. Das Entwicklungsbudget umfasst nicht nur das Erstellen von Entwicklungs-VMs, sondern auch das Testen von Umgebungen. Ich stellte fest, dass diese Methode viel skalierbarer ist als jede andere, und dass sie einfacher zu unterstützen ist. Vielen Dank für die Antwort, aber es brachte mich dazu, an andere Dinge zu denken :)
J_A_X

5
Dieser Ansatz kann in der Tat eine Wartungszeit sparen. Aber wahrscheinlich nicht im Anfangsstadium. Es müssen mindestens 20 Benutzer sein, um finanziell interessant zu werden.
SK-logic

6
Wenn Sie den Server in einem Ausrüstungsraum aufstellen, wird die Umgebung besser für den Server und die Mitarbeiter getrennt. Hintergrundgeräusche im Büro werden reduziert und die Wärme kann besser verwaltet werden.
Mattnz

1
@J_A_X: Diese Latenz würde bei der Arbeit von zu Hause aus nicht auftreten, wenn es sich bei den Computern um Laptops handelt. Die Netzwerklatenz über das VPN wäre sicherlich vorhanden, die Latenz bei der Interaktion mit dem Computer selbst jedoch nicht.
Adam Robinson

1
@J_A_X: Die Latenz ist nicht gegeben, wenn die gesamte Entwicklungsumgebung im Laptop des Entwicklers enthalten ist. Und es kann immer noch zu einer spürbaren Latenz kommen, die Bildschirmaktualisierungen durch den Raum schiebt, wenn bei jedem Tastendruck eine Interaktion stattfindet. Eine Verzögerung von 50 Millisekunden im Zeichenecho wäre sehr schmerzhaft. Vielleicht würde alles glatt gehen, aber lohnt es sich wirklich, es herauszufinden?
Kevin Cline

58

Ich denke, Sie sind Penny-weise und Pfund-dumm.

Erstens sind die Maschinenkosten im Vergleich zu den Kosten eines Entwicklers trivial . Sie sollten die Produktivität maximieren und nicht die Maschinenkosten minimieren.

Zweitens ist die Latenz (nicht die Bandbreite) der Schlüssel für viele Programmieraufgaben - insbesondere für die Textbearbeitung. Für jeden Dollar / Pfund / Euro, den Sie für Ihre Entwickler auf Computern einsparen, geben Sie mindestens zehn Euro für Netzwerk-Upgrades aus, um selbst einen Anschein von Produktivität zu erhalten sie mit Pentium III's haben Sie irgendwo in einem Müllcontainer gefunden.

Ich denke auch, dass es von großem Vorteil ist, wenn Ihre Entwickler eine Umgebung verwenden, die der vom Endbenutzer erwarteten Umgebung zumindest einigermaßen nahe kommt. Unabhängig von den offiziellen Leistungszielen in einer Spezifikation und dergleichen basieren die meisten Programmierer ziemlich stark darauf, wie sich der Code "anfühlt", wenn sie ihn testen. Wenn sie eine völlig andere Umgebung als die Endbenutzer verwenden, verschwenden sie wahrscheinlich Zeit mit Kleinigkeiten und übersehen gleichzeitig wichtige Probleme.

So attraktiv eine homogene Umgebung aus Sicht des Supports klingt und so sollten Sie im Allgemeinen so viel Abwechslung in den Maschinen der Entwickler wie möglich fördern. Entwickler benötigen ohnehin selten viel Unterstützung. Wenn Sie sofort wissen, wann Code mit einem anderen Grafikchip, einer anderen CPU, einem anderen Netzwerkadapter usw. versagen wird, zahlt sich dies mehr als nur für eine minimale Investition aus.

Fazit: Wenn Sie das Schreiben von Code, der (zumindest in erster Linie) bestimmt ist werden verwendet in einer virtualisierten Serverumgebung, die Sie gerade über Notwendigkeit, dass für Ihre Entwickler. Wenn Sie es trotzdem zum Testen machen, kann es (aber nicht unbedingt) auch für die Entwicklung Sinn machen. Ebenso ist ein stark über speced wenn Sie brauchen (oder zumindest haben) Server und Netzwerk wie auch immer, es könnte sinnvoll nutzen , dass zu nehmen , indem Sie , was Sie bereits zur Verfügung haben.

Unter den meisten typischen Umständen scheint es mir jedoch wahrscheinlich, dass dies mehr Probleme mit sich bringt, als es löst.


4
Ich weiß, dass es nicht ernst genommen werden sollte, aber ich würde eine anständige virtuelle Umgebung über einige "Pentium III, die Sie irgendwo in einem Müllcontainer gefunden haben" nehmen
Davy8

Nein nein Nein. Ermutigen Sie nicht so viel Abwechslung unter den Entwicklungsmaschinen. Wenn Sie für Hardware entwickeln müssen, führen Sie diese ordnungsgemäß aus, indem Sie eine Reihe von Testfeldern verwenden, die die Hardware darstellen, auf der Ihre Software ausgeführt werden soll. Sie werden niemals zufällige Hardwareabweichungen auf Ihren einzelnen Entwicklungsmaschinen fördern. Dies ist die schlechteste Vorgehensweise bei der Softwareentwicklung .
Dietbuddha

19

Das war eine meiner Ideen in der Vergangenheit: einen Hochleistungsserver mit der erforderlichen Software und eine Reihe von leistungsschwachen Desktop-PCs, die nur zum Herstellen einer Verbindung zum Server über Remote Desktop verwendet werden.

Die Vorteile wären:

  • Das solide Backup. Einige Entwickler möchten ihre Desktop-Computer möglicherweise nicht regelmäßig sichern, sodass eine zentrale Lösung zuverlässiger ist.
  • Die Möglichkeit für jeden Entwickler, von überall aus zu arbeiten. Damit meine ich auch, von jedem PC im Unternehmen aus zu arbeiten. Sagen wir morgens, der Entwickler möchte stille Arbeitsbedingungen. Er geht in sein eigenes Zimmer und arbeitet dort. Dann möchte er ein paar programmieren oder in einem sozialeren Umfeld arbeiten. Er fährt einfach seinen Desktop-PC herunter, geht in einen anderen Raum mit zehn Computern und stellt von dort aus eine Verbindung her. Nein "Ich muss alle meine Apps erneut laden".

Nun, da gibt es einige ernsthafte Probleme, die mich denken lassen, dass ich das Ding in den nächsten Jahren nie mehr so ​​benutzen werde.

  • Spezifität von Remote-Lösungen. Wie wäre es, wenn Sie fern arbeiten und mehrere Computerbildschirme gleichzeitig verwenden? Ich meine, ist es einfach? Ist es offensichtlich? Sind Verknüpfungen, die ich täglich verwende, aktiviert, wenn ich auf Distanz arbeite? Ich bin mir nicht sicher. Was passiert, wenn ich Strg + Umschalt + Esc drücke, um die Liste der aktuell ausgeführten Programme anzuzeigen? Oh ja, es funktioniert nicht, also muss ich mich jetzt daran erinnern, es anders gemacht zu haben.

  • Performance-Hit. Ich bin mir nicht sicher, ob es überhaupt keine Leistungseinbußen geben wird. Und denken Sie daran, ein Programmierer, der einen langsamen Computer verwendet, ist ein unglücklicher Programmierer. Und das Unternehmen, das seine Programmierer mit beschissenen Bedingungen unzufrieden macht, wird niemals qualitativ hochwertige Software produzieren.

  • Höhere Auswirkung einer Katastrophe. Hosten Sie die Lösung auf einem redundanten Server? Haben Sie ein redundantes Netzwerk in Ihrem Unternehmen? Angenommen, der Router fällt aus und ist nicht redundant. Dies bedeutet, dass alle Entwickler jetzt nicht mehr arbeiten können. Überhaupt. Weil dort keine Software lokal installiert ist. Weil sie nicht einmal Quellcode haben: Er befindet sich auf dem Server. Also hört jeder auf und du bezahlst all diese Leute pro Stunde, nur um darauf zu warten, dass der Router ersetzt wird.

  • Hardwarekosten. Wenn es sich um einen Einzelserver handelt, wie viel kostet er? Wenn Sie beispielsweise 20 Entwickler haben, reichen dann 64 GB RAM auf dem Server aus? Nicht so sicher. Wäre eine Quad-Core-Lösung mit zwei CPUs ausreichend? Wieder habe ich einige Zweifel. Ansonsten, woran denkst du? Eine Art Wolke? Oder haben Sie eine skalierbare Lösung, die auf mehreren Servern funktioniert? Sind Sie bereit, die Kosten für Windows Server (wenn Sie Windows verwenden) pro Computer zu bezahlen?

  • Stromkosten. Wenn Sie vollständig remote arbeiten, bedeutet dies, dass Sie fast die gleiche Menge an serverseitigem Strom verbrauchen, als würden Sie lokal arbeiten, zuzüglich der Menge an Strom, die vom lokalen Computer und dem Netzwerk verschwendet wird.

  • Lizenzen. Ich bin mir nicht sicher, ob ich es als Vorteil oder Problem bezeichnen muss, aber ich bin der Meinung, dass die Kosten für die Softwarelizenzierung in diesem Fall viel höher sein werden.

Denken Sie auch hier an alle Kosten für Verwaltung, Support, Bereitstellung und Wartung. Bei einer benutzerdefinierten Lösung wie dieser kann es leicht zu großen Problemen kommen, ohne dass jedes Mal, wenn ein Fehler auftritt, jeder Entwickler NOP-Fragen beantwortet und darauf wartet, seine Arbeit fortsetzen zu können.


Wenn der Server ausfällt, verlieren Sie alles. Es sei denn, Sie diesen Server auch replizieren ...
Rudy

4
@Rudy: In den meisten Läden kann man nicht lokal arbeiten, wenn der Server ausfällt (kein Zugriff auf die
Datenbank

4
@sleske war mit DB, E-Mail und anderen Dingen einverstanden, aber mit DVCS können Sie mindestens / branch / ...
mbx

Die meisten Geschäfte, insbesondere diejenigen, die die Verwendung von VMs in einem Rack zum Hosten von Entwicklungsumgebungen in Betracht ziehen, verfügen über separate Server für DB, E-Mail usw. Außerdem haben Sie, selbst wenn einige dieser Dienste ausfallen, weiterhin Zugriff auf Ihren lokalen Desktop und was auch immer passiert ist zur Zeit arbeiten.
Pete

@sleske - Gibt es heute eine DB-Engine, die nicht auf der Workstation eines Entwicklers ausgeführt werden kann?
Kevin Cline

18

Wir verwenden Amazon EC2-Instanzen nach Bedarf als Entwicklermaschinen. Das hat nichts mit Kosten zu tun. Wir haben einen "Pool von Entwicklern", die an mehreren Projekten arbeiten, und wir müssen in der Lage sein, schnell zwischen Projekten zu wechseln.

Im Allgemeinen spart die VM Einrichtungszeit. Längerfristig verschwendet es jedoch Zeit aufgrund von Produktivitätsverlusten. Die Kosten sind keine Achse, da die Entwicklerkosten viel mehr sind als die Maschinenkosten.

Zu den Produktivitätskosten gehören - Zeitaufwand für das Starten eines VM-Images (mehrere Minuten), schlechte Reaktionszeiten und Ressourcen- / Speicherbeschränkungen. Das ist anfangs nicht viel, wird aber mit der Zeit nervig.

In einem unserer Projekte haben wir den Code überarbeitet, um die Ersteinrichtung zu vereinfachen und "Code herunterladen und maven ausführen". Mit dieser Änderung war es für einen neuen Entwickler einfach, an dem Projekt zu arbeiten - und jetzt verwendet niemand mehr das Amazon VM-Image. Wir versuchen dies auch für andere Projekte zu emulieren, aber es wird einige Zeit dauern. Bis dahin haben wir unsere ec2-Bilder.


14

Sei hier SEHR vorsichtig. Ich wurde kürzlich bei einem Kunden eingesetzt, bei dem alle Mitarbeiter der IT-Abteilung im Wesentlichen aus dem gleichen Grund über eine virtuelle Maschine verfügten - damit sie PCs mit geringerem Funktionsumfang auf dem Schreibtisch haben und dann eine Remote-Verbindung zur virtuellen Maschine herstellen und ihre normale Arbeit ausführen können.

Die Erfahrung dort war nicht schön. Mindestens einmal pro Woche liefen wir aus verschiedenen Gründen extrem langsam. Im Allgemeinen konnten wir feststellen, wann jemand im Team eine Reihe prozessorintensiver SSIS-Pakete ausführte. Sie haben schließlich einige von uns auf andere Server verlegt, was einigen geholfen hat, aber die Leistung war nie richtig.

Ich denke, wenn Sie es tun werden - tun Sie Ihre gebührende Sorgfalt in Bezug auf die Serverleistung, Ihre Verarbeitungsanforderungen, die Anzahl der Maschinen, die Sie bedienen werden usw. Es könnte Ihnen etwas Geld sparen, aber wenn es nicht richtig implementiert wird, kann es LOTS verursachen von Kopfschmerzen.

Bitte beachten Sie: Dies ist KEINE Flamme der VM-Architektur - nur eine Warnung für Leute, die sich damit befassen - stellen Sie sicher, dass Sie Ihre Enten in einer Reihe haben, bevor Sie sie implementieren.


1
+1 Mach deine Hausaufgaben! Der Typ, der das bei meiner letzten Firma gemacht hat, hatte Erfahrung und es lief reibungslos. Es war das beste System, das ich je für die Entwicklung verwendet habe, aber es dauerte fast ein Mannjahr, um es zu entwerfen und zu implementieren.
Christopher Bibbs

12

Die Entwicklung auf virtuellen Maschinen kann recht gut funktionieren, aber nur, wenn dies richtig gemacht wird:

  • Nur weil Sie mit VMs einen einzigen Computer für Ihr gesamtes Team anstelle eines Computers pro Entwickler haben, ist dies noch lange keine gute Idee
  • Für den Neustart muss kein Support-Ticket mit einer Antwortzeit von 24 Stunden geöffnet werden
  • Entwicklungs-VMs sollten sich nicht in einem Rechenzentrum befinden, das 5000 Meilen von den Entwicklern entfernt ist.
  • Obwohl VMs möglicherweise von Entwicklern verwaltet und daher nicht unterstützt werden, bedeutet dies nicht, dass sie nicht auf Netzwerkdienste wie die Quellcodeverwaltung zugreifen können.
  • Die Remotedesktopverbindung sollte Standard sein und kein benutzerdefiniertes "Hochsicherheits" -Applet, das alle in Umlaute eingegebenen Anführungszeichen konvertiert.
  • Das Abrufen einer neuen VM oder das Wiederherstellen einer vorhandenen VM sollte Minuten dauern und nicht Wochen

Ich habe all diese Probleme gesehen und mag es nicht besonders, mit ihnen zu arbeiten. Ich habe jedoch auch ein VM-Setup zu Hause, das ich nach Wahl verwende. Das läuft schneller als eine lokale Installation und ermöglicht beispielsweise separate Umgebungen für verschiedene Projekte und schnelle Neuerstellungen, wenn eine Umgebung instabil wird.


9

Ich arbeite mit VMs, empfehle es jedoch nicht für Ihr Hauptprojekt.

Der Grund, warum ich VMs für die Entwicklung verwende, ist, dass ich ältere Projekte (z. B. VB6, .NET 1.1 usw.) unterstützen muss und meinen Hauptcomputer nicht durch die Installation von VS2003 / 2005 / vb6 / usw. verschmutzen möchte ... Es klappt, aber hier und da gibt es zeitweise Probleme.

Außerdem ist die Interaktion langsamer, es dauert eine Weile, bis die VMs gestartet / heruntergefahren werden, sie haben keine nativen UI-Effekte (wie Aero in Win7) usw.

Was auch immer Sie in Bezug auf Geld sparen werden, das Sie verschwenden und mehr durch den Aufwand, den Sie Ihrem Team auferlegen werden. Außerdem, wie hier erwähnt, keine Unterstützung für mehrere Bildschirme. Ich brauche mindestens 3 Bildschirme, um so produktiv wie möglich zu sein.


Ich verwende VMWare Workstation für die Entwicklung auf drei Monitoren.
JC01

8

Die wichtigste Regel für die Entwicklung ist, Ihre Entwickler bei Laune zu halten. Sie werden feststellen, dass dies mit Remote-VMs so gut wie unmöglich ist. Die Unterstützung mehrerer Monitore ist unzuverlässig, Netzwerkverzögerungen und Ausblendungen sind problematisch und die Kosteneinsparungen sind im Allgemeinen minimal.

Arbeiten Sie sicher an VMs, aber berücksichtigen Sie auch lokale VMs, und machen Sie den physischen Computer auch zu einem lächerlich schnellen Monster.

Ich telecommute 100% und zwischen meinem persönlichen ISP und dem VPN - trotz hoher Zuverlässigkeit - haben sie genug Blips, die mich verrückt machen würden, wenn ich nicht im Offline-Modus arbeiten könnte.

Im Allgemeinen drehe ich einfach eine Vielzahl von VirtualBox-Images hoch und arbeite daraus. Das Kopieren einiger hundert MB über das Kabel ist nicht zu zeitintensiv, wenn Sie auch lokal eine neue benötigen.


5

Mein Team hat erfolgreich eine Konfiguration "langsamer PC / schneller VM-Server" implementiert. Für ein Team von 20 Entwicklern hatten wir einen 256 GB RAM-Server mit 8 Prozessoren, der über Glasfaser mit einem sehr schnellen SAN verbunden war. Es war teuer, aber billiger, als jedem Entwickler eine Workstation mit ähnlicher Leistung zur Verfügung zu stellen. Für ein kleines Team (4 Entwickler) bin ich mir nicht sicher, ob die Skaleneffekte greifen und Ihnen tatsächlich etwas ersparen würden.


1
Sind Sie auf Probleme mit anderen VMs gestoßen, als Sie mit dem Kompilieren eines großen Projekts begannen oder andere ressourcenintensive Aufgaben ausgeführt haben?
TheLQ

@TheLQ Keine Probleme, aber der Typ, der das System entworfen hat, hat es zuvor getan, sodass die Hardware nur für diese Aufgabe ausgewählt und optimiert wurde. Das letzte Mal, als ich ihn fragte, sagte er, die Prozessoren seien immer größtenteils im Leerlauf, aber die Festplatten drehten sich wie verrückt.
Christopher Bibbs

Eine San-Festplatte lief mit 8 Entwicklern am Rande - was würden Sie zu ~ 20 sagen? Wie viele San brauchen wir für diese Aufgabe?
Toskan

1
@Toskan Nein, wir hatten 20 Entwickler und 8 CPUs auf dem Server. Was die Anzahl der Festplatten angeht, glaube ich, dass unser SAN 12 Festplatten hatte, aber ich kann nicht sicher sein.
Christopher Bibbs

5

VMs für die Entwicklung sind einen Blick wert, aber die finanziellen Kosten sind der falsche Grund.

Dies wurde kurz in Marc Holmes ' Expert .NET Delivery unter Verwendung von NAnt & CruiseControl.net behandelt. Kurz gesagt, das Argument für die Entwicklung auf einer VM ist, dass es jeden Aspekt der Arbeit davon abhält, von der jeweiligen Konfiguration des Entwicklers abhängig zu werden. Sie schalten Ihre VM zu Beginn jedes Projekts in einen Nuklear-Modus um, und wenn Sie nicht tatsächlich ein bestimmtes Tool benötigen, läuft es nicht weiter. Dadurch wird die Wahrscheinlichkeit minimiert, dass Änderungen, die Sie vornehmen, auf einem anderen Computer als Ihrem durchgeführt werden. Entwickler können weinen, wenn ihr Spielzeug weggenommen wird - aber letztendlich ist das Vertrauen in Werkzeuge eine Schwäche und alles, was Sie in einer sauberen Umgebung nicht intuitiv tun können, ist ein Geruch.

Beachten Sie, dass ich den oben vorgebrachten Argumenten nicht unbedingt glaube . Ich verstehe und stimme bis zu einem gewissen Grad mit ihnen überein, aber ich mache sie aus Gründen der Argumentation, um eine Diskussion zu erzeugen.


7
Deshalb haben Sie eine Build-Engine - eine kontinuierliche Integration sollte solche Abhängigkeiten erkennen. Entwickler benötigen jedoch alle Tools, die sie bekommen können.

4
Ja - nimm mein Spielzeug nicht weg. Sie machen mich produktiv, um Dinge zu erledigen. Die Erstellung für die Bereitstellung und das Testen in einer Zielumgebung sind verschiedene Probleme, die gelöst werden müssen.
quick_now

Eine Möglichkeit besteht darin, Setup-Skripts zu entwickeln, die in Ihre Aliase, Konfigurationsdateien und anderen Setup-Dateien kopiert werden. Zum Beispiel habe ich unter Linux einen Alias ​​eingerichtet, um all das Zeug aus git runter zu ziehen.
Michael Durrant

4

Mögliche Nachteile

  • Wenn der VM-Host ausfällt ... sind Sie alle abgespritzt. Wenn Sie jemals ein Team von 20 Leuten hatten, schreien Sie "GAH! HOST NOT RESPONDING !?" im Einklang ... es macht keinen Spaß.
  • Wenn Sie Schnappschüsse zulassen ... verschlingen diese Ressourcen schnell. 20 Personen * 10-20 Schnappschüsse sorgen für viel Speicherplatz auf der Festplatte (oder zumindest genug, um Probleme zu verursachen).
  • Wenn Sie erneut auf Probleme mit der Ressourcennutzung auf dem Host stoßen, verspürt jeder den Schmerz.

IME, es ist eine gute Lösung und es funktioniert, aber Sie benötigen eine anständige Hardware auf dem Host und wenn schlimme Dinge passieren, passieren sie allen.


4

Damit ist eines der wichtigsten Kriterien des Joel-Tests nicht erfüllt.

Ich stelle sicher, dass alle meine Entwickler mindestens einen i3 oder besseren Laptop oder Desktop mit so viel RAM haben, wie er möglicherweise aufnehmen kann.

8GB ist das, wonach ich strebe.

Dadurch sind sie produktiver und können Virtual Box für Entwicklungs- und Testzwecke auf ihren lokalen Computern ausführen, anstatt dass die Wartung der Server teuer ist. Sie können einen Schnappschuss ihrer Virtual Box erstellen, verrücktes Zeug installieren und verschiedene Browser und Installer und alles testen und in Sekundenschnelle zu einer bekannt guten Konfiguration zurückkehren, ohne die "IT" -Dienste kontaktieren zu müssen.

Entwickler benötigen die schnellsten Computer im Unternehmen mit den meisten RAM- und Root-Berechtigungen auf ihren lokalen Computern. Ende der Geschichte.


4

Ich habe bereits an VMs für die Entwicklung gearbeitet, sowohl an lokalen VMs (die auf dem lokalen PC ausgeführt werden) als auch an Remote-VMs. Es war viel angenehmer, mit den Einheimischen zu arbeiten als mit den Fernen.

Bei Remote-VMs, zu denen wir über RDP eine Verbindung hergestellt haben, trat zwischen jedem Tastendruck und jeder Aktion eine geringe Verzögerung auf. Es ist möglich, sich unter solchen Bedingungen für kurze Zeit zu entwickeln, aber Tag für Tag wurde es sehr frustrierend.

Ich habe mich gerne unter einer lokalen VM auf VMWare entwickelt, weil ich Flash Builder auf einem Linux-Computer ausführen musste, und war ziemlich zufrieden damit, solange es über genügend Arbeitsspeicher verfügte - es war ziemlich brauchbar.


Ich muss nur hinzufügen, dass Sie eine CPU mit geschachtelten Seitentabellen (2.Gen Virtualization Support) benötigen, um eine gute Leistung zu erzielen. Die Verwendung von VM Ware mit gemeinsam genutzten Pfaden ist recht langsam, wenn Sie keine SSDs haben (es dauert> git addgit status
20 Sekunden

3

Wir machen das für unsere entfernten Maschinen und es funktioniert ziemlich gut. Die meisten arbeiten nur selten von zu Hause aus (normalerweise nur für Notfälle hier und da), daher verwenden wir nur recht preiswerte Netbooks, die im Büro auf unseren schnellen Desktop-Computern installiert sind. Sie sind definitiv noch langsamer (wahrscheinlich mehr als alles andere durch das Netzwerk begrenzt), arbeiten aber ab und zu für kurze Aufgaben. Dies wäre für ein Vollzeitpferd jedoch nicht akzeptabel, da VM häufig eine Verzögerung verursachen kann, die selbst mit der besten Hardware, IMHO, ein wenig ablenkt.


2

Bei meinem letzten Job haben wir genau das gemacht:

Wir verwendeten einen Windows Terminal Server, auf dem jeder Entwickler ein Konto hatte. Die Entwickler hatten immer noch normale PCs (weil sie bereits dort waren), aber auf den PCs wurde nur der RDP-Client ausgeführt.

Wir haben Java-Entwicklung durchgeführt, daher wurde die Software verwendet, die Java-Compiler + IDE (hauptsächlich Eclipse) plus Webbrowser, DB-Abfragetools, Versionskontroll-Client und gelegentlich Office-SW (in unserem Fall OpenOffice.org) enthält.

Wir hatten keine wirklichen Probleme, und die Leistung war recht anständig.

Das einzige wirkliche Problem war, dass Sie wirklich darauf achten müssen, andere in bestimmten Situationen nicht zu stören, da Sie ein System gemeinsam nutzen. Wenn IT-Abläufe große Dateikopien oder Sicherungen auf dem Server ausführen mussten, ging die Leistung für alle zurück. Als wir dies identifizierten und lösten (durch Kopieren mit niedriger Priorität oder über Nacht), lief alles gut.

Die Einschränkung lautet also: Bewerten Sie die Leistung so bald wie möglich und planen Sie Ihre Hardware und deren Verwendung entsprechend.


Können Entwickler Software auf diesen Konten installieren? Manchmal ist Eclipse nicht das Werkzeug für diesen Job.
Kevin Cline

@ Kevin Cline: Ja, SW-Installation war erlaubt und möglich. Entwickler hatten jedoch keine Administratorrechte, sodass Sie nur SW installieren konnten, für deren Installation oder Ausführung keine Administratorrechte erforderlich waren. Ich konnte alles, was ich brauchte, ohne Probleme installieren, aber ich habe gehört, dass es immer noch Apps gibt, die Administratorrechte zum Installieren oder sogar zum Ausführen benötigen.
sleske

@sleske Meiner Erfahrung nach sollten Entwickler Administratorrechte auf ihrer Entwicklungsmaschine haben, virtuell oder nicht. Meiner Meinung nach muss ein Entwickler das Eigentum an den von ihm verwendeten Tools übernehmen, und die Entwicklungsmaschine ist nur ein weiteres Tool.
Manfred

@ John: Das hängt wirklich von den Tools ab, die du brauchst. Wenn keines Ihrer Tools Administratorzugriff benötigt, benötigen Sie keinen Administratorzugriff. Ich verstehe nicht, warum Sie immer Administratorzugriff benötigen sollten . Wenn Sie beispielsweise Gerätetreiber installieren oder auf Port 80 ausführen möchten, benötigen Sie natürlich Administratorzugriff.
sleske

2

TL; DR: Ich habe es bei mehreren Jobs gemacht und jetzt bevorzuge ich es.

Kosten sind der falsche Grund, sich darauf zu konzentrieren. Hier sind einige bessere.

Gründe dafür

  • Plattformkonsistenz in den verschiedenen Umgebungen (Entwicklung, Test und Produktion).
    • Warum: Ein Fehlervektor wird vollständig eliminiert, Fehler aufgrund von Plattformunterschieden in verschiedenen Umgebungen.
  • Ermöglicht, dass Systemänderungen, wie z. B. Upgrades, zuerst in Development VMs durchgeführt, verifiziert, zum Testen aufgerollt, verifiziert und in die Produktion übernommen werden. alles viel einfacher mit der entwicklung (und dem test) von vms.
    • Warum: Steuern. Ich kann Snapshots erstellen, Rollbacks ausführen, die Deltas identifizieren, die Änderungen auf einem Server vornehmen und einen Erfolg verbreiten, indem ich einfach die VM dupliziere usw.
  • Manchmal sind die Systeme, gegen die Sie entwickeln, nur in einem gesicherten Netzwerk verfügbar. Alternativ kann der Server, auf dem Ihre Software ausgeführt wird, nur über eingeschränkten Zugriff oder andere Netzwerkmerkmale verfügen.
    • Warum: Die Entwicklungs-VM kann sich in dem VLAN befinden, das Zugriff auf das gesperrte System oder den gesperrten Dienst hat. Wenn der Dev-Server denselben eingeschränkten Zugriff hat wie der Test- und der Produktionsserver, kann es auch nie vorkommen, dass versehentlich eine Anforderung für ein Netzwerkmerkmal oder einen Zugriff codiert wird, der nicht verfügbar ist.

Herausforderungen

Die größte Herausforderung ist die Remote-Entwicklung, insbesondere wenn Sie ein Gateway oder einen Jump-Server verwenden müssen. Dies macht es schwierig, insbesondere wenn die Entwickler nicht gut gerundet sind (sie haben einige Kenntnisse in Systemtechnik, Netzwerkkenntnisse usw.).

Es gibt viele Varianten der Remote-Entwicklung, die sich jedoch in der Regel auf zwei Hauptunterschiede beschränken.

  • Führen Sie Ihre Entwicklungstools in der Remote-Umgebung aus und verwenden Sie Protokolle wie RDP-Clients, Remote-X11-Clients usw.
  • Führen Sie Ihre Entwicklungstools lokal aus und verwenden Sie Protokolle, um den Remote-Server transparent zu synchronisieren oder auszuführen. Dabei wird häufig ssh als Transportschicht verwendet.

Werkzeuge

Es gibt Tools, die bei der Remote-Entwicklung helfen, und es gibt IDEs, die dies ermöglichen. Sie müssen untersuchen, inwieweit eine Remote-Entwicklung möglich ist. Viele müssen auf demselben Server ausgeführt werden, auf dem der Code entwickelt wird. Es gibt jedoch andere Tools.

  • Secure Shell: Die meisten erfolgreichen Remote-Entwicklungs-Setups verwenden in größerem Umfang ssh, wobei kennwortlose Anmeldungen (Schlüsselauthentifizierung), transparente Multihops (Behebung des Problems mit dem Jump-Server) und andere Konfigurationsoptionen verwendet werden, um die Antwortzeit zu verbessern. Hinweis: Ich hatte immer Probleme mit Nicht-OpenSSH-Implementierungen von SSH.
  • GNU Screen / TMUX: Terminal-Multiplexer. Screen ist der Urvater von ihnen und ist immer noch stark, aber ich denke, die meisten Leute haben angefangen, auf TMUX umzusteigen (oder sogar zu starten).
  • Vim / Emacs : Die alte Garde, aber beide funktionieren auf unterschiedliche Weise hervorragend für die Remote-Entwicklung. Vim ist alles, was es braucht, eine Shell, während Emacs lokal ausgeführt werden kann und TRAMP für die Remote-Entwicklung verwendet.

1

Etwas anders: Haben Sie Ihren Managern / Buchhaltern eine Tabelle mit den Kosten für die Verwendung dieser langsamen Maschinen vorgelegt? Weisen Sie sie darauf hin, dass eine VM-Lösung (sofern sie nicht richtig ausgeführt wird und dies nicht einfach ist) die Entwickler und damit das Unternehmen möglicherweise in ein und dasselbe Boot setzen kann.


1

Dies hängt davon ab, wie viel Verwaltungsleistung Sie während der VMware-Installation haben. Wenn Sie in einen Subpool mit niedriger Priorität versetzt werden, haben Sie langsame Computer, abhängig von der Aktivität anderer Subpools.


1

Hardware ist billig, Programmierer sind teuer.

Warum sollten Ihre Programmierer frustriert sein, wenn Sie ihnen langsame Entwicklungsmaschinen zur Verfügung stellen? Die Kosten für das Upgrade der Hardware verblassen im Vergleich zu den damit verbundenen Leistungsvorteilen.

Fragen Sie nach besseren Maschinen. Zumindest fragen Sie nach 4 GB RAM. Das Hinzufügen eines weiteren 2-GB-Tablets macht sich in weniger als einer Woche bezahlt.


problem ist das 32 bit windows welches auf den notebooks installiert ist
Toskan 14.07.11

1

Der Mangel an Dual-Screen-Unterstützung war schon immer der Deal Killer. Ich kann mir nicht vorstellen, signifikante Entwicklungsarbeit auf einem einzigen Bildschirm zu leisten.

Jetzt rocken sie zum Testen / Deployment / Fiddeln, also denke ich auch nicht, dass sie vom Stapel fallen sollten.


RDP unterstützt Multi-Monitor in der neuesten Version.
Andrew Lewis


Ich dachte, wir reden hier über VMs, nicht über RDP. . .
Wyatt Barnett

Entschuldigung, ich bezog mich auf Remote-VMs. Sie können mit VMWare Workstation 7+ mehrere Monitore verwalten
Andrew Lewis

Ich denke, es hängt von der Größe des Monitors ab.
Manfred

0

Wenn Sie einen Mainframe mit 50 SSD-Festplatten in RAID 10 haben und nur 3-4 Computer auf diesem Mainframe verwenden, funktioniert dies möglicherweise.

Ansonsten sind sie verzögert, wirklich verzögert (obwohl in einigen seltenen Fällen Schnappschüsse dies ausgleichen können).


0

Ich habe einen anständigen Desktop-Computer im Büro, mit dem ich über VPN eine Verbindung von meinem Laptop aus über die Bildschirmfreigabe herstellen kann.

Es funktioniert bei Support-Vorfällen außerhalb der Geschäftszeiten und gelegentlich bei erzwungener Remote-Arbeit. Dies ist sicherlich besser, als eine vollständig konfigurierte Umgebung auf einem zweiten Computer zu verwalten oder Dinge zu entwickeln, die eine geringe Latenzzeit zum Rechenzentrum über ein WAN erfordern.

Es ist jedoch frustrierend, so lange zu arbeiten. Ich bin gelegentlich für die zweite Hälfte des Tages zur Arbeit gefahren, nachdem alles, was mich zu Hause gehalten hat, aus dem Weg geräumt wurde.

Latenz und Screen Real Estate sind die beiden Killer für mich.


0

Ich glaube nicht, dass Sie mit einer Remote-VM-Lösung arbeiten möchten. Die Netzwerkverbindung ist der Engpass, und selbst bei einer schnellen Verbindung kann dies zu Frustrationen führen. Wir wenden uns von dieser Technik ab, um lokale Entwicklungsumgebungen zu verwenden.

Wir entwickeln auf iMacs, was wirklich nett ist, aber unsere Webanwendungen laufen in der Produktion auf einer Linux-Umgebung. Das Problem dabei ist, dass wir möglicherweise auf ein Problem stoßen, das nur unter Linux auftritt und möglicherweise schwer zu beheben ist. Hier kommt die Leistung virtueller Maschinen ins Spiel. Ich mag jedoch nicht einmal die Idee, eine VM 100% der Zeit zu verwenden.

Ich habe kürzlich Vagrant (http://vagrantup.com/docs/getting-started/why.html) und Chef kennengelernt, um die Arbeit mit VirtualBox zu vereinfachen. Vagrant bietet Ihnen die Möglichkeit, eine VM einfach zu starten, wenn Sie sie benötigen, und eine VM herunterzufahren, wenn Sie dies nicht tun. So konnte ich meine gesamte Entwicklung mit meinem Mac durchführen. Wenn ich dann bereit bin, meinen Code zu testen, kann ich eine VM zum Testen starten und sie nur so lange aufbewahren, wie ich sie benötige. Vagrant bietet Ihnen auch die Möglichkeit, auf einfache Weise VMs mit Ihren Mitarbeitern zu teilen, sodass Sie alle sicher sein können, dass Sie in derselben Umgebung arbeiten.

Ich würde empfehlen, Vagrant auszuprobieren, damit Sie zumindest über die verfügbaren Optionen für die Entwicklung von und die Arbeit mit VMs Bescheid wissen.


0

Ich habe an einem Legacy-Projekt mit 5 Maschinen gearbeitet, von denen jede eine Rolle in einer Berechnungs-Pipeline spielt (Maschine 1 sendet eine Anfrage an Maschine 2, die wiederum eine Anfrage an Maschine 3 usw. sendet). Die Bereitstellung der Einstellungen auf der virtuellen Maschine hat uns jedoch RIESIGE Zeit gespart: 1. Das System war nicht fehlerfrei, da Entwickler faul waren / keine Zeit hatten, Tests in das Design einzubeziehen. 2. Es wurden zu viele Setups bereitgestellt, und ich musste Zeit aufwenden, um sie in Gruppen anzuordnen.

Jetzt benutze ich es, weil ich zu viele Projekte gleichzeitig bearbeite. Das Hauptproblem, das ich jetzt habe, ist: 1. VMs verbrauchen viel zu viel Zeit für die Wartung. 2. VMs verbrauchen enorm viel Arbeitsspeicher

Dadurch werden VMs schwierig zu verwenden, wenn Sie versuchen, sie zu verwenden, um Ordnung zu haben. Behalten Sie eine Hauptmaschine mit Ihrer E-Mail und Ihrem Text, und entwickeln Sie sie auf dedizierten VMs. Hält Ihr Leben sauber und ordentlich.


0

Wie von anderen angegeben, hängt es wirklich davon ab, welches Problem Sie mit den VM-Desktops lösen möchten und welche Vorteile die Lösung dieses Problems mit den Nachteilen für die VM-Umgebung hat.

Wir bewegen uns in Richtung einer hybriden Umgebung, in der alle unsere Onshore-Entwickler über herkömmliche physische Maschinen verfügen, während Offshore-Entwickler (die derzeit mit einem kleinen Outsourcing-Unternehmen zusammenarbeiten) virtuelle Desktops verwenden. Die Probleme, die wir mit den Remote-Desktops lösen möchten, hängen mit der Sicherheit und der Leistung zusammen. Die virtuelle Umgebung wird uns offensichtlich mehr Kontrolle aus der Sicherheitsperspektive bieten, und um die Leistung zu verbessern, werden wir nur "geänderte Pixel" anstatt des vollständigen Quellcodes übertragen und Proxyserver und dergleichen implementieren müssen.

Ich bin mir immer noch nicht sicher, ob dies der richtige Weg ist, aber es ist, wohin wir gehen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.