Java-Softwareplattformen aus der Cloud
PaaS-Dienste von Amazon, Google, VMware und Co. im Vergleich
In einer IaaS-Cloud (Infrastructure as a Service) wie Amazon EC2 stehen nur "nackte" Rechner und Storage zur Verfügung. Soll eine selbst geschriebene Anwendung darauf zum Laufen gebracht werden, muss eine Infrastruktur wie zum Beispiel ein Application Server installiert werden.
Die Alternative dazu ist die Nutzung einer PaaS (Platform as a Service) im Rahmen des Cloud Computing. Bei einer solchen Plattform ist die Installation zusätzlicher Infrastruktur nicht notwendig. Man kann Anwendungen direkt in der Cloud installieren. Außerdem bietet sie Lösungen für den Betrieb und das Monitoring der Anwendung. Das Skalieren der Anwendung bei Lastspitzen erfolgt automatisch.
- Softwareplattformen aus der Cloud
Platform as a Service (PaaS) erlaubt es, Anwendungen direkt in der Cloud zu betreiben. Was bieten die Dienste von Amazon, Google und Co. in der Praxis? - Google App Engine
- Google App Engine - Nachteile:
o Wesentliche Einschränkungen gegenüber dem üblichen Java-Programmiermodell <br> o Zur Zeit keine relationale Datenbank verfügbar <br> o Durch die Einschränkungen ergeben sich Abhängigkeiten in der Anwendung (Lock In)<br> o Keine Eingriffsmöglichkeiten oder Tuningmöglichkeiten auf Ebene des Web Servers oder Betriebssystems - Google App Engine - Vorteile:
o Automatische Skalierung der Anwendung <br> o Lange am Markt, bewährt - Amazon Beanstalk
- Amazon Beanstalk - Nachteile:
o Zur Zeit noch in Beta und nur in US-East verfügbar <br> o Grobgranulare Skalierung durch zusätzliche Rechner - Amazon Beanstalk - Vorteile:
o Bewährte Cloud-Infrastruktur als Basis<br> o Übliches Enterprise-Java-Programmiermodell (Tomcat Web Server/ relationale Datenbank)<br> o Daher geringe Lock-In-Gefahr auf Code-Ebene<br> o Zahlreiche weitere Services (RDS, SimpleDB, Payment ...) - Cloud Bees
- Cloud Bees - Nachteile
o RUN@Cloud zur Zeit noch in Beta-Phase<br> o Kein echtes Skalierungskonzept<br> o Keine SLAs<br> o Datenbank-Lösung eher rudimentär<br> o Tomcat-Installation kaum anpassbar - Cloud Bees - Vorteile:
o Attraktiv für Entwickler wegen Continuous Integration und Repository Server<br> o RUN@Cloud kostenlos<br> o EC2-Infrastruktur, daher leicht mit Amazon-Angeboten kombinierbar - VMware Cloud Foundry
- VMware Cloud Foundry - Nachteile:
o Zurzeit noch in Beta-Phase<br> o Benötigt Framework-Integration<br> o Public-Cloud-Infrastruktur im Moment nur in den USA - VMware Cloud Foundry - Vorteile:
o Offene Plattform<br> o Open-Source-Lizenz<br> o Services-Konzept<br> o Flexibilität: Nutzung auf Amazon EC2 und lokal möglich, Private Cloud denkbar
PaaS bieten oft proprietäre Services mit fertigen Funktionalitäten an, die bei der Entwicklung von Anwendungen hilfreich sind. Beispielsweise enthält die Amazon-Cloud-Plattform einen Service, über den per Kreditkarte mit einem Kunden abgerechnet werden kann. Durch die Nutzung solcher Services ist man allerdings sehr von der PaaS abhängig, da Anwendungen nicht so einfach auf andere Plattformen migriert werden können, die solche Services nicht anbieten.
Bei der Entwicklung von Enterprise-Anwendungen stellt die Java-Plattform die wichtigste Ablaufumgebung dar. Bisher war das Angebot an PaaS-Plattformen für Java begrenzt, aber in den letzten Monaten sind viele neue Angebote aufgetaucht. Daher lohnt sich ein Blick auf den Markt in diesem Bereich.
Aufmacherbild: rubysoho, Fotolia.de
Google App Engine
Google hat bereits 2008 damit begonnen, eine PaaS anzubieten und war damit ein Pionier im Java-PaaS-Markt. Neben Java unterstützt die Google App Engine (GAE) auch Python-Anwendungen. Es gibt ein GAE-Angebot für den Betrieb von Anwendungen, die im Internet jedem zur Verfügung stehen sollen. Die Kosten hängen davon ab, wie viel Bandbreite, Storage, CPU-Zeit usw. genutzt wird. Zum Testen gibt es ein freies Kontingent. Es ist auch möglich, ein Budget für eine Anwendung festzulegen, um so die Kontrolle über die Kosten zu haben. Für Anwendungen, die nur innerhalb einer Firma verwendet werden sollen, gibt es Google App Engine for Business. Dabei erfolgt die Abrechnung pro Anwendung und Benutzer und es gibt andere SLAs.
Google App Engine treibt den PaaS-Ansatz recht weit: Benutzer haben keinen Zugriff auf das zugrundeliegende Betriebssystem. Anwendungen können auf einem oder vielen Servern laufen, ohne dass der Entwickler es bemerkt. Lastverteilung und Skalierung der Anwendung sind transparent. Um dies zu ermöglichen, hat GAE ein sehr eingeschränktes Programmiermodell. Die auf GAE nutzbaren Java-Klassen sind in einer White List beschrieben. So ist es beispielsweise nicht möglich, neue Threads zu starten; der Zugriff auf das File-System ist nicht erlaubt und ein Request darf nicht mehr als 30 Sekunden Bearbeitungszeit erfordern. Durch diese Einschränkungen ist die Nutzung einiger Java-Frameworks gar nicht möglich oder nur sehr aufwändig zu realisieren. Google bietet eine Liste von Frameworks an, die unter GAE laufen.
Als Datenbank steht eine NoSQL-Datenbank zur Verfügung. Eine relationale Datenbank ist angekündigt, soll dann aber nur im Rahmen von Google App Engine for Business zur Verfügung stehen. Daher muss die Persistenz-Architektur einer Anwendung, die auf GAE laufen soll, entsprechend angepasst werden. Eine Portierung auf eine andere Infrastruktur wird dadurch natürlich erschwert.
GAE bietet zahlreiche zusätzliche Services wie einen Cache, XMPP-basiertes Instant Messaging, Bildverarbeitung oder die Speicherung von Blobs. Außerdem kann von GAE aus natürlich auf andere Google Services zugegriffen werden, die über Web Services-APIs angesprochen werden können. Es gibt auch eine Integration in die Google-User-Verwaltung. Für Entwickler stehen darüber hinaus Plugins für Eclipse zur Verfügung, so dass ein Deployment von dieser Entwicklungsumgebung direkt auf GAE möglich ist. Mit Hilfe des GAE SDKs (Software Development Kit) können Anwendungen auch testweise lokal installiert werden und GAE kann mit dem SDK auch von der Kommandozeile aus gesteuert werden. Ein einfaches Monitoring ist ebenfalls für Anwendungen verfügbar.
Google App Engine auf einen Blick
Vorteile:
-
Automatische Skalierung der Anwendung
-
Lange am Markt, bewährt
Nachteile:
-
Wesentliche Einschränkungen gegenüber dem üblichen Java-Programmiermodell
-
Zur Zeit keine relationale Datenbank verfügbar
-
Durch die Einschränkungen ergeben sich Abhängigkeiten in der Anwendung (Lock In)
-
Keine Eingriffsmöglichkeiten oder Tuningmöglichkeiten auf Ebene des Web Servers oder Betriebssystems