Java - von Rias A. Sherzad am Montag, August 17, 2009 2:10 - 1 Kommentar
Cloud Computing mit Google App Engine und Java
Am 04. April 2009 hat Google angekündigt, daß seine Cloud Computing Plattform „App Engine“ fortan auch Java unterstützt. Neben Python ist das die erst zweite Sprache mit der sich Anwendungen entwickeln und auf Google Servern hosten lassen.
Sehr lobenswert ist dabei auch Google’s Engagement in Dingen Eclipse-Plugin. Vom Projektwizard über Templates hin zur Konfiguration und Deployment lassen sich die wichtigsten Schritte direkt aus der IDE heraus ausführen. Ein erster Test mit dem Google Plugin in der MyEclipseIDE 7.5 verlief problemlos.
Nach der erfolgreichen Entwicklung einer kleinen Java 6-Anwendung mit einem statischen File, einem Servlet und Anbindung an die Persistenzschicht durfte ich erfreut feststellen, daß das Ganze einwandfrei funktioniert. Die meiste Zeit habe ich dabei damit verbracht, eine fremdgehostete Domain in seinen DNS und Forwarding-Einstellungen so anzupassen, daß die Domain direkt angesprungen werden kann, und auch in der Browserzeile gesehen wird, anstatt der etwas verräterischen URL http://<application-id>.appspot.com. Hier ist anzumerken, daß die App Engine in Kombination mit GoogleApps tatkräftig Unterstützung leistet. Leider werden allerdings „Naked-Domains“ nicht mehr unterstützt, d.h. die URL http://meinedomain.de kann nicht von der App Engine bedient werden, http://www.meinedomain.de hingegen schon. Hier bietet sich ein 302-Redirect auf die www-Variante als Kompromißlösung an.
Wie bereits erwähnt unterstützt die App Engine zwei Programmiersprachen, Python und Java. Das sagt auch etwas darüber aus, welcher Typ von Cloud hier vorliegt. Es wird zwischen folgenden Typen unterschieden:
- Infrastruktur: das bekannteste Modell wird von Amazon betrieben und nennt sich Elastic Computing (EC2). Hier werden virtuelle Server bereitgestellt über die der Entwickler vollen Zugriff hat
- Plattform: hier wird eine Anwendung entwickelt und in die Cloud hochgeladen. Die Verteilung auf die physischen Server übernimmt der Betreiber der Cloud. Dieses Modell wird von der App Engine angeboten und stellt einen Kompromiß zwischen Komplexität und Flexibilität dar, da schnell Anwendungen implementiert und ohne viel Konfiguration in die Cloud geladen werden können. Als Nachteil ist die Einschränkung auf die unterstützten Programmiersprachen zu akzeptieren, sowie innerhalb dieser ggf. weitere Einschränkungen im Programmiermodell, Zugriffsmöglichkeiten auf Resourcen, Simplifizierung der Persistenzschicht etc.. Die App Engine unterstützt beispielsweise nicht das Öffnen von Sockets oder das Schreiben in Dateien auf dem Dateisystem.
- Anwendung: das ist beispielsweise das Google Docs Modell, welches eine mandantenfähige Anwendung bereitstellt, die verteilt und skalierbar in der Cloud gehostet wird.
Zur Google App Engine ist noch zu sagen, daß die kostenfreie Variante „bis zu 5 Millionen Seitenabrufe“ gestattet. Leider sagt die Zahl nichts aus, denn die Größen von Seiten unterscheiden sich, je nach Typ, massiv. Sollte Google von seinen eigenen minimalistischen Seitendesigns ausgegangen sein so ist Vorsicht geboten.
Interessant sind hingegen die weiteren Resourcen die kostenfrei bzw. gegen Entgelt genutzt werden können:
- Datastore: die Datenbank der App Engine. Sie kennt Indexe und Abfragen, ist allerdings nicht mit einer typischen relationalen Datenbank vergleichbar, da ihr einige Fähigkeiten fehlen. Sie ist transaktionsfähig und unterstützt 1:1, 1:n und n:m Beziehungen und stellt einen objektorientierten Zugriff per JDO bereit. Als Abfragesprache kann nur JDOQL verwendet werden, welches das objektorientierte Abfragemodell gut unterstützt, allerdings damit auch weniger mächtig als herkömmliches SQL ist.
- Mail: E-Mails können bis zu einem gewissen Limit kostenfrei versandt werden. Hier wird die Google Infrastruktur verwendet, falls keine eigenen Mailserver über die MX-Einträge konfiguriert wurden. Kostenfrei können 8 E-Mails pro Minute versandt werden und 2.000 pro Tag. Sobald das Billing aktiviert wurde erhöht sich das auf 5.100 pro Minute und 7.4 Millionen pro Tag. Interessant sind hier die Kosten: 10.000 verschickte E-Mails werden mit 1 US-Dollar in Rechnung gestellt. Zu prüfen wäre allerdings noch, ob bei Nutzung der Google Mailinfrastruktur Themen wie SPF-Records, DomainKeys/DKIM etc. implementiert sind, die dafür sorgen, daß die E-Mails auch beim Empfänger ankommen. Der Freemailer GoogleMail ist eher als Spammerfreundlich bekannt, wie sich das bei den von der App Engine angesprochenen Mailservices verhält ist noch zu testen.
- Memcache: ein Memory-Cache für Anwendungsfälle, in denen keine Datenbank benötigt wird, wie z.B. In-Memory-Operationen.
- Image Manipulation: hier stellt Google einen Service bereit, über den sich JPG- und PNG-Bilder bearbeiten, skalieren, rotieren etc. lassen.
- URL Fetch: ein Dienst, der Resourcen von anderen Servern lädt. Ließe sich beispielsweise für die Implementierung eines Crawlers verwenden und benutzt die gleiche Infrastruktur wie Google sie in seinen eigenen Produkten verwendet.
- CRON Jobs und Task Queues: eine sehr lobenswerte Initiative, allerdings werden die Task Queues letzteres momentan nur in Python voll unterstützt. Task Queues sind von der Anwendung zur Laufzeit hinzugefügte Aufgaben.
- Google Accounts: hierüber können Anwendungen, sofern sie nicht eine eigene Authentifizierung implementiert haben, den Benutzer gegen seinen Google Account authentifizieren und authorisieren.
Dafür, daß Java erst seit 4 Monaten von der Google App Engine unterstützt wird wirkt sowohl die Dokumentation als auch das Programmiermodell ausgereift. Komforteinschränkungen in der Entwicklung müssen beim Datastore hingenommen werden, was aufgrund der verteilten Architektur und den Performancegewinnen aber akzeptabel ist. Um sich nicht auf ewig auf das Hosting in der App Engine festlegen zu müssen werden die meisten Architekten wahrscheinlich eine weitere Abstraktionsschicht für die Datenhaltung implementieren müssen.
Zusammenfassung
Als Fazit ist zu sagen, daß die App Engine als schneller Einstieg und Test in das Cloud Computing sehr zu empfehlen ist. Vom ersten Öffnen der Dokumentation bis zu einer kleinen Anwendung mit Datastore-Anbindung dauert es keine 30 Minuten. Hier hat Google auch in der Dokumentation saubere Arbeit geleistet, die schnell und zielgerichtet alle wichigen Fragen beantwortet und den Entwickler schnell zu seiner ersten lauffähigen Cloud-Anwendung führt.
Literaturempfehlungen
… gibt es zu diesem Thema leider kaum, bzw. nichts, was ich selbst gelesen habe und empfehlen könnte. Es sind einige Neuerscheinungen für dieses Jahr geplant, inwiefern sie Java behandeln ist noch nicht bekannt. Ein Blick auf die Amazon-Suchergebnisse für „Google App Engine“ lohnt sich aber trotzdem. Hier findet sich auch Literatur, die sich mit Cloud Computing als Konzept befasst und dabei auch auf die Google App Engine eingeht.
Linkempfehlung
Über einen Trackback bin ich auf serverwolken.de aufmerksam geworden, wo ein interessanter Artikel zum Thema „10 Dinge die man über Google App Engine wissen sollte“ verlinkt wird. Lesenswert!
Einen Dienstleister rund um Cloud Computing Themen findet man z.B. auf Cloud hypermarket.
1 Kommentar
Kurztest Google App Engine plus Java | Server in den Wolken
Kommentieren
Weitere Empfehlungen:
Java - Jul 19, 2011 20:30 - 0 Kommentare
Eine (wirklich gute) Einführung in Maven
Mehr Artikel der Kategorie Softwarearchitekturen
- Decorator Pattern in Java
- Cloud Computing mit Google App Engine und Java
- JMS mit Oracle Advanced Queueing
- Buchempfehlung: Service-orientierte Architekturen mit Web Services. Konzepte – Standards – Praxis
- Einführung in SOA – Serviceorientierte Architekturen
Datenbanken, Internet Technologien - Nov 19, 2009 9:24 - 0 Kommentare
Oracle WebServices im praktischen Einsatz
More In Datenbanken
- JMS mit Oracle Advanced Queueing
- Eine kurze Einführung in db4o
- Native Kompilierung von PL/SQL-Routinen in Oracle 10g
[…] Cloud Computing mit Google App Engine und Java […]