Effiziente Entwicklung mit Virtualisierung (Teil 1)
Insbesondere bei größeren Projekten haben wir schon öfters in der Praxis erlebt, dass einiges an Zeit für die Einrichtung und das Warten der Entwicklungsinfrastruktur benötigt wird. Woran liegt das?
Die Entwicklungsumgebungen bieten heutzutage eine große Unterstützung und sind in der Regel einfach zu installieren. Allerdings sind in vielen Fällen zusätzliche Konfigurationen und Installationen notwendig z.B. für das Anbinden von Drittsystemen. Dies kann sehr zeitintensiv sein, wenn jeder Projektmitarbeiter dies an seinem Entwicklungsrechner selbst durchführt.
Kosten und auch Nerven kann der Einsatz von Virtualisierung in der Entwicklung sparen.
Virtualisierung mit ESXi
exensio setzt hierfür ESXi [1] ein. ESXi kommt von der Firma VMWare und ist ein sogenannter Bare-Metal-Hypervisor, der direkt auf der Server-Hardware installiert wird. Es handelt sich dabei um ein abgespecktes Linux-System, das im Vergleich zu anderen Virtualisierungslösungen einen sehr niedrigen Overhead hat. Des Weiteren ist ESXi kostenfrei verfügbar.
Für die Entwicklung greifen Entwickler auf ein VMWare-Image zu, das auf dem zentralen ESXi-Server läuft. Der Zugriff erfolgt bei Windows über den Remote Desktop und bei Linux über den NXClient. Auf dem VMWare-Image ist alle notwendig Software installiert und konfiguriert, so dass direkt mit der Arbeit losgelegt werden kann.
Die Hardwareausstattung des ESXi-Servers sollte angepasst sein an die Anzahl der parallel arbeitenden Entwickler. Bei komplexeren JEE-Projekten sollte man pro Virtuelle Maschine mit 3,5 GB RAM kalkulieren.
In einem der nächsten Blogeinträge wird detaillierter auf die Konfiguration, Individualisierung und Verteilung der VMWare-Images eingegangen.
Vorteile der Virtualisierung
Welche Vorteile können sich also durch die Nutzung von Virtualisierung für die Entwicklung ergeben?
Zeitersparnis, da die Basisumgebung nur einmal eingerichtet wird und anschließend für alle Entwickler dupliziert wird. Bei größeren Projekten ist diese Arbeit nicht zu unterschätzen:
- Anlegen oder Konfiguration einer Server-Domaine (z.B. JDBC-Einstellungen)
- Installation der Entwicklungsumgebung
- Ggfs. Konfiguration der Versionsverwaltung
- Basisstruktur für das Projekt wird einmal zentral aufgesetzt
- Installationen und Konfiguration für den Zugriff auf Backendsysteme (z.B. DLL für SAP-Zugriff)
Es kann einfach auf eine funktionierende Entwicklungsinfrastruktur zurückgegriffen werden, falls etwas "zerstört" wurde (z.B. defekte Serverdomäne), sei es durch den Entwickler selbst oder das System.
Wird eine Applikation kompiliert oder deployed, dann fällt in der Regel eine hohe Belastung für die CPUs an. Durch die Virtualisierung steht über den ESXi-Server wesentlich mehr Leistungspotential (CPU, Festplattendurchsatz, ...) zur Verfügung, das von den jeweiligen VMs zeitweise abgerufen werden kann.
Was sollte man beachten?
Für einen reibungslosen Ablauf und Verbesserungen ist die Mitarbeit aller Entwickler erforderlich. Änderungen die zukünftig für alle verfügbar sein sollten müssen in das Masterimage zurückgespielt werden. Dies können beispielsweise Helper-Skript sein oder Plugins für die Entwicklungsumgebung.
Des Weiteren sollte für die Verwaltung der zentralen Entwicklungsserver eine dedizierte Personengruppe zuständig sein, da sonst sehr schnell der Überblick verloren geht.