Von Java EE über Google App Engine bis hin zu GigaSpaces - die Idee, gegen eine Middleware- oder "Infrastruktur"-API zu entwickeln, ist in der Java-Welt fest etabliert. Aber das sind feste Umgebungen. Mit dem (Wieder-)Aufkommen der Virtualisierung wird es nun möglich, eine eigene, auf die Bedürfnisse Ihrer Anwendung zugeschnittene Umgebung zu packen und schnell bereitzustellen. Die großen Middleware-Anbieter haben erkannt, dass es nicht nur möglich, sondern sogar notwendig ist, solche virtuellen Appliances zu erstellen: Die Einrichtung einer Produktionsanwendung umfasst zwangsläufig mehr als nur ein paar EARs. Hier werden wir uns den aktuellen Stand der Cloud- und Middleware-Bereitstellungswerkzeuge ansehen, mögliche zukünftige Entwicklungen untersuchen und Parallelen zwischen der Bereitstellung und verwandten Prozessen ziehen.
Wolke: Das Ende vom Anfang
Die erste Welle von IaaS-Cloud-Anbietern führte zu einem Haufen von Infrastrukturdiensten mit täuschend ähnlichen Spezifikationen, aber frustrierend unterschiedlichen, proprietären APIs, Parametern, Konzepten und Formaten. Die erste Welle von Cloud-Tools hat versucht, diesen Portabilitätsalptraum durch die Einführung gemeinsamer APIs und Terminologien zu bewältigen. Gleichzeitig gibt es Vorschläge für offene Formate für virtuelle Bilder und Hypervisor-APIs, aber es gibt noch keine Anzeichen für eine kurzfristige breite Akzeptanz. Eine Schwierigkeit bei den derzeitigen "Meta-API"-Ansätzen1 ist die Tatsache, dass eine generische Unterstützung, d.h. die Bereitstellung von Funktionen, die von allen Anbietern unterstützt werden, zu einem kleinsten gemeinsamen Nenner führt, der zu klein ist, um von großem praktischen Nutzen zu sein. Der TemplateBuilder von jclouds ist ein interessanter Versuch, dieses Problem anzugehen, aber letztendlich wird nur die Einführung eines IaaS-Standards dieses Problem beseitigen können. Aus der Sicht eines Entwicklers besteht ein grundlegenderes Problem darin, dass ein "roher" Rechner, wie er durch ein virtuelles Image-Profil dargestellt wird, einfach zu unbedeutend ist, um nützlich zu sein. IaaS-Anbieter kommen dann aus der Welt der Bereitstellung, die sich mit Servern, Racks und Kernen beschäftigt. Aber Entwickler sind es gewohnt, gegen "Umgebungsdienste"2 zu entwickeln, sei es ein Java EE-Cluster, ein LAMP-Stack oder eine Hadoop-Installation3.
Middleware: Java EE und einige mehr
Nach dem großen anfänglichen Aufwand für die Zusammenstellung von "Unternehmens"-Java EE-Implementierungen gingen die großen Unternehmensanbieter schnell dazu über, den Funktionsumfang der für Anwendungen verfügbaren Ressourcen zu erweitern, wie z.B. persistente Warteschlangen oder geclusterte Datenquellen.
Als die Entwickler diese Funktionen entdeckten und nutzten, wurden die Anwendungen immer stärker an bestimmte, oft proprietäre Middleware-Plattformen gebunden. Infolgedessen umfasste die "Entwicklungsleistung" nicht nur die von Java EE vorgesehenen EARs, sondern auch eine Vielzahl von Konfigurationsoptionen und Ressourcendefinitionen für den Middleware-Container.
Auf dem Weg zu konfigurierbaren virtuellen Appliances
Aktuelle virtuelle Bildformate sind im Wesentlichen eine lange Liste von Bits und Bytes des Arbeitsspeichers und des Festplattenspeichers. Über die API kann ich vielleicht einige einfache Infrastrukturdetails wie IP-Adressen oder die Anzahl der Kerne abrufen, aber darüber hinaus ist die beste Informationsquelle über den tatsächlichen Inhalt dieses Images ein Freitext-"Beschreibungs"-Feld, das hauptsächlich der menschlichen Lesbarkeit dient. Selbst wenn ich also eine Websphere ND 7.1-Installation mit einer Datenbank und einem Cluster gemäß den Unternehmensrichtlinien konfiguriert habe, gehen die meisten Details der Installation verloren. Natürlich ist es sehr schwierig, Abhängigkeiten programmatisch zu überprüfen, Richtlinien durchzusetzen oder sogar ein Image zu finden, das bestimmte Softwareanforderungen erfüllt (Java installiert, Version >1.5, neueste Betriebssystem-Patches usw.). Eine interessante Möglichkeit ist es, ein Image als Basisbetriebssystem zusammen mit einer Liste von yum-, rpm- oder Conary-Paketen5 zu definieren. Dadurch erhalten Sie einen besseren Überblick über den Inhalt des Images und müssen das Rad der Paketierung und Installation nicht neu erfinden. Leider sind diese Paketmanager jedoch alle betriebssystemspezifisch und lassen nicht viel Spielraum für die individuelle Anpassung der Paketinstallation und -konfiguration.
Schablonen, nicht Klone
Bit-für-Bit-Beschreibungen von virtuellen Appliances machen es einfach, viele Klone einer Maschine zu instanziieren. In den meisten Fällen müssen wir jedoch eine Appliance instanziieren, die sich nur geringfügig vom Original unterscheidet - denken Sie an die Anmeldeinformationen für die Datenquelle, die Namenskonventionen oder die Portnummern. Tatsächlich ist unser "Image" in den meisten Fällen eher eine Vorlage, die instanziiert werden muss, als ein Master, der nur geklont werden muss. Leider6 unterstützen die aktuellen Formate für virtuelle Maschinen dies nicht. Cloudlets sind ein interessanter Ansatz in dieser Richtung. Sie ermöglichen es Ihnen, den Dateisystembaum des Images festzulegen und dabei gegebenenfalls Vorlagendateien zu verwenden. Damit kommen Sie in Unix-Umgebungen schon sehr weit, lösen aber immer noch nicht alle Probleme: Die Parametrisierung einer WebLogic-Domäne durch Änderung der XML-Konfigurationsdateien ist schwierig und wird übrigens nicht unterstützt. Oder denken Sie an binäre Konfigurationen, Tablespaces in einer Datenbankinstallation oder die Windows Registry. Außerdem ist aus der Sicht eines Entwicklers in der Regel der von der virtuellen Appliance gelieferte Dienst interessant; ob Ihr GigaSpaces XAP-Grid ein oder 100 Images benötigt, um zu laufen, spielt eigentlich keine Rolle. jclouds' NodeSet, das die transparente Verwaltung und Skalierung mehrerer Images ermöglicht, scheint hier ein wichtiger konzeptioneller Fortschritt zu sein.
Virtuelle Appliances: eine Wunschliste der Funktionen
Mit der aktuellen Generation von Tools können wir einen Katalog von möglicherweise verwandten Images zusammenstellen, die portabel genug sind, um nicht an einen Anbieter gebunden zu sein. Mit ein paar Tricks und ein bisschen Blut, Schweiß und Tränen können wir sogar eine Art dynamische Konfiguration erstellen, auch wenn diese in der Regel spezifisch für den Inhalt des Images ist.
Waren wir hier nicht schon einmal?
Strukturierte Metadaten, Abhängigkeiten zwischen Images, Verwaltung von Composites, parametrisierbare Konfiguration... all diese Themen kommen den meisten Entwicklern furchtbar bekannt vor. Tatsächlich sind dies genau die Probleme, für die Tools wie Maven während des Build-Prozesses entwickelt wurden. Sicherlich ist das Spektrum möglicher Abhängigkeiten, Funktionen und Konfigurationsoptionen bei der Instanziierung und Erweiterung einer Multi-Image-Plattform weitaus größer als bei einem Software-Build, aber es gibt hier viele Räder, die hoffentlich nicht neu erfunden werden müssen. Vielleicht ist die Erkenntnis, dass das Festhalten an bestimmten Konventionen und der Verzicht auf die Möglichkeit, alle möglichen willkürlichen Änderungen vorzunehmen (oder sich zumindest nicht darum zu kümmern, es einfach zu machen), eine wichtige Lektion, die es zu lernen gilt.
- Diese sind in der Tat auch proprietär in dem Sinne, dass alle "gemeinsamen" APIs größtenteils nicht miteinander kompatibel sind.
- Ich hätte "Middleware" verwendet, aber dieser Begriff ist schon vergeben ;-)
- Ich bin gespannt, was sich die Spring/VMware-Kombination in diesem Bereich einfallen lassen wird.
- Basierend auf meinem Wissen über diese Produkte - Korrekturen willkommen!
- Optional verkabelt mit Puppet, Chef, cfengine, SmartFrog oder einem ähnlichen System.
- Ich sage "leider", aber ich sollte dankbar sein: Die Automatisierung dieser umgebungsspezifischen Einstellungen und die Sicherstellung, dass Sie dasselbe Anwendungspaket in all Ihren Umgebungen bereitstellen können, ist das, worum es bei Deployit, unserem Produkt zur Automatisierung der Bereitstellung, geht.
- Jetzt "Makara".
- Nun, man kann clevere Dinge tun, indem man Schnappschüsse aufnimmt und zusammenführt, aber das ist im Grunde ein unheimlicher Hack.
- Wir könnten noch QA, UAT und ein paar andere dazuzählen, wenn Sie wollen.
Verfasst von
Andrew Phillips
Contact



