Googles Maschinenraum

Mit App Engine bietet Google einen integrierten Werkzeugkasten zur Erstellung skalierender Webapplikationen auf ihrer verteilten Infrastruktur.

Artikel erschienen in Swiss IT Magazine 2008/15

     

Nach Salesforce.com und Amazon stieg mit Google ein weiterer Riese des Online-Business ins Cloud Computing ein. Während der Online-Händler Amazon elementare Infrastruktur-Services wie Storage und virtuelle Rechnerinstanzen anbietet, die man selber zu einem hochverfügbaren und skalierenden Rechnerverbund zusammenstecken muss, geht Google mit App Engine in Richtung von Salesforce.com: Wie der Online-CRM-Pionier mit seiner Plattform Force.com bietet App Engine eine integrierte Programmierumgebung, bei der man sich nur auf seine Anwendung konzentrieren muss. Der Rest, sprich Administration und Skalierung, übernimmt Google für einen.




Python-Umgebung

Während man für Force.com mit Apex eine eigene Programmiersprache lernen muss, basiert App Engine auf der freien Scriptsprache Python in der Version 2.5. Zwar mag Python nicht ganz so populär sein wie vielleicht PHP, doch ist der Einstieg nicht allzu schwer. Die Sprache selber ist sehr elegant und mächtig. Für erfahrene Python-Entwickler dürfte es ohnehin recht einfach sein, sich in der neuen Umgebung zurechtzufinden. Allerdings gibt es ein paar Einschränkungen zu vergegenwärtigen, die der verteilten Infrastruktur geschuldet sind und Entwicklern, die bereits in diesem Bereich tätig waren, bekannt vorkommen dürften:



- Die Python-Installation erhält zwar die komplette Standard Library. Allerdings wurden einige Module deaktiviert, beispielsweise cPickle, marshal oder tempfile.




- Festplattenzugriff ist nur lesend möglich. Zur Ablage von persistenten Daten muss der App Engine Datastore genutzt werden.



- Zugriffe auf Remote Hosts sind nicht möglich. Entsprechende Module wie socket können zwar importiert werden, sie sind aber leer.



- Die Erzeugung weiterer Threads oder Prozesse ist nicht möglich. Ebenso können keine periodischen Kommandos ausgeführt oder Signale gesendet werden.



- Die Nutzung weiterer Module ist nur möglich, wenn sie auf reinem Python-Code basieren. Die Python Imaging Library kann so beispielsweise nicht genutzt werden, dafür eine Reihe von populären Frameworks und Werkzeugen wie Pylons oder Cheetah. Google selber stellt Django in der Version 0.96, WebOb 0.9 und PyYAML 3.05 zur Verfügung.



Der Grund für dieses Manko ist einfach: In verteilten Umgebungen sind die Funktionen nicht ohne weiteres problemlos nutzbar oder können beispielsweise zu Sicherheitsproblemen führen.


Zusätzliche APIs

Um einen Teil dieser Funktionen zu ersetzen, stellt Google eine Reihe von eigenen Funk­tionen samt passenden APIs bereit.



- Datastore: Ermöglicht die persistente Speicherung von Daten (mehr dazu weiter unten).



- Image: Dient zur Manipulation von Bildern. Sie können unter anderem vergrössert und verkleinert, rotiert oder zugeschnitten werden.



- Mail: Mit Mail können E-Mails samt Attachments an den Mailservice von App Engine übergeben werden.



- Memcache: Wie der Name verrät, stellt Memcache Zugriff auf einen In-Memory-Cache bereit, in dem Key-Value-Paare gespeichert werden können. Memcache basiert auf memcached von Danga Interactive und dient vor allem dazu, Datastore von häufigen Lese-Anfragen zu befreien.



- URL Fetch: Ermöglicht das Absetzen und Empfangen von HTTP-Anfragen (optional mit TLS-Verschlüsselung) an beliebige Adressen.



- Users: Über das Users-API ermöglicht App Engine die Integration in Google Accounts, wie sie für Gmail oder Google Reader verwendet werden. Das Users-API stellt Login- sowie Session-Funktionalität zur Verfügung.


Strukturierte statt relationale Daten

Wie man sieht, fehlt ein RDBMS wie MySQL oder PostgreSQL zur Datenspeicherung – dies mit gutem Grund, sind diese bei Verwendung in verteilten Umgebungen nicht ganz einfach zu handhaben. Statt dessen kommt der erwähnte Datastore zum Einsatz.


Datastore basiert auf Bigtable, Googles proprietärem System zur verteilten Speicherung von strukturierten Daten. Es ähnelt CouchDB respektive Amazons SimpleDB und wird über in Python-Objekte abgebildete Modelle verwendet. Als Vorbild für diese dienen die Modelle aus dem Webframework Django, mit dem Unterschied, dass letztere über einen Object Relational Mapper (ORM) mit einem beliebigen RDBMS gekoppelt sind. Für die Ablage der Daten stehen eine Reihe von Datentypen bereit, die nebst den üblichen Datentypen wie String, Integer, Blob oder Date auch spezialisierte Typen wie Telefonnummern, Längen- und Breitengrade oder E-Mail-Adressen aufnehmen. Sogar komplexe Typen wie Listen lassen sich direkt speichern.



Die Abfrage der Daten erinnert ebenfalls an den ORM aus Django. So erhält man beispielsweise alle gespeicherten Adressen (bei der Modell-Klasse «Adresse») mittels Adresse.all(). Methoden wie filter() oder order() ermöglichen die Filterung respektive Sortierung der Daten.


Kompliziertere Abfragen müssen in einer eigenen Abfragesprache namens GQL formuliert werden, die stark an SQL angelehnt ist, aber nur SELECTs unterstützt. Diese können mit Bedingungen nach SQL-Vorbild, Sortierungs- und Beschränkungsanweisungen verknüpft werden. Die Verknüpfung von Datensätzen mittels JOINs ist ebenso nicht möglich wie die Ausführung von mathematischen oder Ag­gregatsfunktionen. Dafür werden Transak­tio­nen und Indizes unterstützt.


Keine Magie

Wie man sieht, unterscheidet sich App Engine teils erheblich von einer klassischen Python-Umgebung. Insbesondere der Ersatz des RDBMS durch Datastore sorgt dafür, dass viel der Magie von Frameworks wie Django, die zu grossen Teilen auf dem ORM und dem RDBMS basiert, verloren geht. Das Admin-Interface steht ebenso nicht mehr zur Verfügung wie die Möglichkeit, Formulare aus Modellen zu generieren oder Views automatisch dem Caching zu übergeben.

Gefragt ist statt dessen vermehrt Handarbeit. Auch müssen bei bestehenden Applikationen alle Modelle und Abfragen neu erstellt werden. Für Django-Anwender bleibt damit nicht mehr viel von ihrem Framework als die Template Engine übrig. Besser abschneiden dürften Anwender von lose gekoppelten Frameworks wie Pylons, die weniger Magie bieten, dafür mehr generische Funk­tionen, beispielsweise zur Formularverarbeitung. Grundsätzlich nutzen lässt sich aber alles, sofern ein WSGI-Adapter (Web Server Gateway Interface) vorhanden ist.


Entwicklung leicht gemacht

Für die Entwicklung von App-Engine-Anwendungen hält Google ein SDK bereit, das Linux, Mac OS X und Windows unterstützt. Es setzt Python 2.5 voraus, bringt aber sonst alles mit, was man benötigt: Alle App-Engine-APIs, einen lokalen Webserver sowie ein Werkzeug zum Deployment auf App Engine. Beide können entweder über die Kommandozeile oder spezielle App Engine Launcher gesteuert werden. Sie helfen auch beim Erstellen neuer Projekte, zu dem zwingend eine YAML-Datei (YAML Ain›t Markup Language) namens app.yaml zur Grundkonfiguration gehört.



Sie definiert Handler für Requests (also das Einstiegsscript für die Anwendung), Pfade zu statischen Daten und einige Metadaten zur Applikation selber, die unter anderem zur Versionierung der Anwendung benutzt werden können. Denn über das Online-Administrationspanel von App Engine lässt sich jederzeit zwischen den verschiedenen Versionen einer Applikation umschalten, sollte es beispielsweise nach einem Update zu Problemen kommen.




Der lokale Webserver bringt ausserdem eine Entwicklungskonsole mit, über die man Zugriff auf eine interaktive Konsole sowie den Datastore Viewer erhält. Mit diesem lassen sich im Datastore abgelegte Objekte anzeigen und inspizieren. Dies ist auch beim Online-Administrationspanel möglich, das zudem auf einem Dashboard über den aktuellen Ressourcenverbrauch informiert, Einblick in Logs gewährt oder das Vornehmen von Feineinstellungen bezüglich der Benutzerauthentifizierung ermöglicht. Garniert wird all dies von einer ausführlichen Dokumentation samt Tutorial und Code-Beispielen.



Wie erwähnt, befindet sich App Engine in einer Preview-Phase, die aber noch im Laufe dieses Jahres durch den Regelbetrieb abgelöst werden soll. Jeder Interessierte kann App Engine bis dahin kostenlos ausprobieren, erhält vorerst aber nur maximal drei Applikationen, 500 MB Speicher für statische Daten, 10 GB Datentransfer pro Tag und CPU-Zyklen für etwa 5 Millionen Seitenabrufe pro Monat. Wer mehr Ressourcen benötigt, wird sie erst im Regelbetrieb erhalten – und bezahlen (siehe Tabelle).



Der Funktionsumfang von App Engine dürfte auch darüber hinaus ein «Moving Target» bleiben. Seit dem Start im Frühjahr 2008 hat Google App Engine bereits um neue Funk­tionen erweitert (Image und Memcache API). Weitere Funktionen dürften folgen – und vielleicht auch Unterstützung einer weiteren Programmiersprache.



Preisvergleich: Google und Amazon


Mehr als ein Spielzeug

Im Moment ist App Engine aufgrund der Beschränkungen und des spärlichen Ökosystems als interessantes Spielzeug zu werten, mit dem sich aber bereits ernsthafte Applikationen entwickeln lassen. Da App Engine erst am Anfang steht, dürfte das Potential, das in Googles automatisch mitwachsender Applikationsumgebung steckt, kaum abzusehen sein. Insbesondere, da man – entsprechende APIs vorausgesetzt – eine Plattform enthält, die sich nahtlos mit den bestehenden Google-Online-Applikationen wie Docs oder Calendar integrieren liesse. Bei Amazon ist man zwar flexibler, muss seine mitwachsende Umgebung allerdings selber erstellen und administrieren.




Artikel kommentieren
Kommentare werden vor der Freischaltung durch die Redaktion geprüft.

Anti-Spam-Frage: Aus welcher Stadt stammten die Bremer Stadtmusikanten?
GOLD SPONSOREN
SPONSOREN & PARTNER