Sent from Hauptstadt!

ein Blog für den geneigten Leser

Erste Erfahrungen mit Google App Engine

Tags: ,

Kategorie Web | 8 Kommentare »

Vor 14 Tagen kündigte Google an, seine Infrastruktur für externe Entwickler zu öffnen. Das war natürlich ein Paukenschlag, denn plötzlich steht eine Infrastruktur zur Verfügung, die in Bruchteilen einer Sekunde Suchanfragen mit dem ganzen Netz vergleichen kann. Der neue Google App Engine Dienst ist für kleine Anwendungen mit wenigen Nutzern kostenlos. Obwohl ich ja nun eigentlich lieber Paper schreiben soll, habe ich es mir trotzdem nicht nehmen lassen und mal ein paar kleine Testanwendungen geschrieben. Es folgt mein Erfahrungsbericht…

Man muss sich Google App Engine wie ein ziemlich ausgefeiltes Webseiten Hosting Paket vorstellen. Man kann nicht nur statische Webseiten dort ablegen, sondern man kann auch Anwendungen entwickeln und diese auf dem Hosting Paket laufen lassen. Das Besondere an Google App Engine ist, dass die Anwendung auf der Google Infrastruktur von tausenden Servern weltweit läuft. Die Verteilung über die Server und die Auswahl des richtigen Servers für den aktuellen Nutzer ist für den Programmierer nicht sichtbar. Dies übernimmt alles automatisch Google. Hinzu kommen noch einige Hilfestellungen, die dem Entwickler das Leben leichter machen sollten. So kann man zum Beispiel Google Konten, wie sie z.B. bei Gmail oder dem Google Reader verwendet werden, mit in seiner Anwendung nutzen. Dadurch spart man sich den Aufwand selbst eine Benutzerverwaltung zu implementieren. Es gibt auch eine Datenbankschnittstelle, die ähnlich wie SQL funktioniert.

Mit Google App Engine kommt man natürlich dem Cloud Computing wesentlich näher. Rechenresourcen werden allgemein verfügbar und braucht sich nicht mehr so stark um die eigentliche Infrastruktur zu kümmern, sondern man kann sich auf die Anwendung und den Inhalt konzentrieren. Die Ausführung der Anwendung überlässt man dann der Rechenwolke. Gerade für Startups, also kleine neu gegründete Unternehmen, kann die Nutzung solch einer Rechenwolke sehr interessant sein. Anstatt in den Aufbau und Betrieb einer eigenen Infrastruktur investieren zu müssen, mietet man einfach nur die notwendigen Rechenkapazitäten. Scheitert die Unternehmung, ist der Verlust überschaubarer und damit das Risiko geringer. Wird die Unternehmung ein Erfolg und steigen die Benutzerzahlen plötzlich enorm, dann wird dieser exponentielle Benutzeranstieg von der Rechenwolke abgefangen, die genau für solche Anwendungen ausgelegt wurde.

Soweit also die Theorie. Ich wollte mir natürlich einen praktischen Einblick verschaffen um zu sehen, was man mit dieser ersten Version von Google App Engine bereits alles machen kann. Leider habe ich bis jetzt noch keinen der sehr begehrten aber dummerweise limitierten Zugänge bekommen, sondern stehe irgendwo auf einer Warteliste. Das ist aber erst mal nicht so schlimm, da Google ein Entwicklungspaket zur Verfügung stellt, mit dem man die Google App Engine auf seinem lokalen Rechner simulieren kann. Dieses Paket ließ sich ohne Probleme bei mir unter Linux installieren und die erste kleine Anwendung lief nach ein paar Minuten. Im folgenden Video zeigt ein Google Ingenieur, wie er in wenigen Minuten ein Gästebuch auf Basis von Google App Engine implementiert.

Momentan unterstützt Google App Engine lediglich Python als Programmiersprache. Dies ist auch momentan für mich das größte Problem. Das liegt aber weniger an Python, sondern viel mehr an den miserablen Entwicklungsumgebungen. Ich habe eine Reihe von nicht-kommerziellen Entwicklungsumgebungen wie SPE ausprobiert. Im Endeffekt sind es bessere Editoren mit Syntaxhervorhebungen, mehr aber auch nicht. Wenn man mit anderen IDEs wie Eclipse, Microsoft Visual Studio und IDEA IntelliJ groß geworden ist, dann sind diese Python IDEs ein wirklicher Rückschritt. Dieses Problem sollte sich aber in absehbarer Zeit relativieren, da Google weitere Sprachen mit seiner App Engine unterstützen möchte.

Sehr elegant finde ich die Datenbank API. Hinter dieser API versteckt sich Googles eigenes Datenbanksystem namens Big Table. Interessanterweise handelt es sich hier nicht um eine relationale Datenbank, da solche Datenbanksysteme für Anwendungen mit großen Transaktionsvolumen ungeeignet sind. Diese Erkenntnis ist nicht neu, sondern man trifft sie immer häufiger an. So bietet Amazon mit seinem SimpleDB Service einen sehr ähnlichen Weg an. Bei Google Datastore legt man zunächst in seinem Quellcode eine Klasse mit gewünschten Attributen an. Dann muss man lediglich noch sagen, dass man Objekte dieser Klasse persistieren will. Wie die Daten genau in der Datenbank abgelegt werden, ist letztendlich für den Entwickler egal. Die Datenbank API unterstützt Transaktionen und auch SQL ähnliche Abfragen. Will man sein Datenbankschema erweitern, fügt man einfach der entsprechenden Klasse ein neues Attribut hinzu. Der Rest geschieht im Hintergrund.

Ebenfalls sehr elegant ist die Einbindung von Googles Nutzerkonten gelöst. Man überprüft in seiner Anwendung lediglich, ob der aktuelle Nutzer angemeldet ist. Wenn nicht, macht man einen Redirect auf Googles Loginseite und nach dem Login kehrt der Nutzer automatisch zur eigenen Seite zurück. Damit verkommt die Nutzerverwaltung zu einem 3-Zeiler Programmcode. Allerdings hat man keinen Zugriff auf die bei Google zu den Nutzerkonten abgelegten Daten. Dies ist verständlich, da man sonst über eine kleine Anwendung sehr schön alle Daten ausspionieren könnte. Das heisst allerdings auch, dass man für jeden Nutzer zusätzliche Daten selbst verwalten muss.

Für welche Art von Anwendungen ist nun Google App Engine geeignet? Mich hat speziell interessiert, ob man über Google App Engine betriebswirtschaftliche Anwendungen realisieren kann. Könnte man also etwa seine eigene Anwendung für Kundenverwaltung über Google App Engine entwickeln und so vertreiben? Die Antwort lautet momentan ganz klar: Nein! Google App Engine ist momentan nur für Anwendungen geeignet, die primär auf den einzelnen Nutzer abzielen. Am Beispiel der Software für die Kundenverwaltung lässt sich meine Kritik relativ gut verstehen. Möchte ein einzelner Nutzer lediglich seine Kontaktdaten online verwalten, so ist Google App Engine eine gute Infrastruktur, um solch ein Adressbuch zu entwickeln. Jedem Nutzerkonto gehören die eigenen Daten, ein Austausch der Daten zwischen verschiedenen Nutzerkonten findet nicht statt. Eine professionelle Kundenverwaltungssoftware, die gleichzeitig von mehreren Vertriebsleuten gefüttert wird, ist schon wesentlich schwieriger mit Google App Engine zu realisieren. Man müsste zunächst die unabhängigen Google Konten miteinander verknüpfen, um ein Mandantenkonzept nachzubilden. Auch müsste man ein Berechtigungskonzept innerhalb des Mandanten manuell implementieren, da sicher nicht jeder Vertriebler Zugriff auf alle gemeinsamen Daten haben soll. Scheinbar sieht die Datenbank API auch nicht verschiedene Instanzen vor. Alle Daten aller Nutzer liegen somit in ein und der selben Instanz. Würden also verschiedene Firmen meine imaginäre Kundenverwaltung einsetzen, dann würden alle Daten dieser verschiedenen (vielleicht sogar konkurrierenden) Firmen in der gleichen Datenbank liegen. Es wäre dann Aufgabe der Anwendung sicherzustellen, dass immer nur die richtigen Daten pro Mandant angezeigt werden. Das ist ganz schön heikel für den Programmierer und wahrscheinlich rechtlich nicht zulässig.

Mein Fazit: Google App Engine ist nicht für Geschäftsanwendungen geeignet, aber es ist eine hervorragende Möglichkeit um Webanwendungen für Massen von Endanwendern zu schreiben. Wer also ein soziales Netzwerk wie Facebook et al. aufbauen will oder wer solch ein nützliches Tool wie Doodle schnell und ohne große Risiken umsetzen will, der sollte sich unbedingt Google App Engine näher anschauen!

8 Kommentare to “Erste Erfahrungen mit Google App Engine”

  1. Vangelis sagt:

    Ein guter Artikel, viele Dank dafür.
    Ich kann allerdings deine letzten beiden Absätze nicht so recht nachvollziehen.

    Ich kenne die speziellen Anforderungen in Betriebswirtschaftlichen Anwendunge nicht, sehe aber nicht, warum es nicht möglich sein sollte über die Datenbank-API von GAE eine Kundenverwaltung abzubilden.

    Die Daten werden in GAE pro Anwendung abgelegt. Also eine Anwendung hat Zugriff auf alle Daten, die von ihren Skripten im Datastorage abgelegt worden sind. Wie du oben schreibst, muss der Anwendungsentwickler die Daten selbst zu Nutzeraccounts zuordnen.
    Die Daten „gehören“ also nicht dem Nutzerkonto, sondern der Anwendung (oder dem owner der Anwendung).
    Ich kann mir also nicht vorstellen was jemandem technisch im Wege stehen sollte, eine Kundeverwaltung in GAE zu schreiben.

    Ich kann mich natürlich irren. Oder vielleicht meintest du etwas ganz anderes. Das war nur der erste Gedanke, der mir beim Lesen gekommen ist.

    viele Grüße
    vangelis

  2. Sebastian sagt:

    Hallo Vangelis,

    wahrscheinlich habe ich es etwas falsch ausgedrückt. Man kann natürlich eine betriebswirtschaftliche Anwendung mit GAE schreiben, aber GAE bringt für diese Domäne keine Hilfsmittel mit, die mir dies erleichtern würden. Hinzu kommt, dass es ein paar prinzipielle Probleme gibt, die es momentan nicht ermöglichen. Wie du selber schreibst, liegen alle Daten der Anwendung in einer DB-Instanz und man muss diese Daten manuell den Konten zuordnen. Dies ist für ein Unternehmen ein No-Go Kriterium. Niemand will, dass seine Daten mit denen der Konkurrenz in ein und der gleichen DB gehostet werden. Dies ist jetzt allerdings kein prinzipielles Problem allein von GAE, sondern man trifft auf das Problem generell im Cloud Computing.

    Ein weiteres Problem ist, dass ich nicht steuern kann, wo die Daten abgelegt werden. Entwickel ich z.B. eine Anwendung für den deutschen Sprachraum, dann ist es rechtlich bedenklich, wenn die Nutzerdaten vielleicht auf einem Server in den USA liegen, da die Datenschutzbestimmungen in den USA nicht so streng sind wie in Deutschland. Ich könnte mit meiner Anwendung also nicht garantieren, dass ich die deutschen Datenschutzbestimmungen mit meiner Anwendung einhalte, da ich nicht kontrollieren kann, wer Zugriff auf die Daten erhält. Man könnte dies evt. dadurch lösen, dass man die Daten verschlüsselt in der DB ablegt, aber ob dies gangbar ist, weis ich nicht.

  3. Vangelis sagt:

    Stimmt. Wenn eine Anforderung an die Anwendung ist, das man kontrollieren kann wo die Daten physikalisch landen, fällt App Engine durchs Raster.

    Mit Amazons Services hat man weit mehr Kontrolle (und natürlich auch mehr Aufwand) aber ob das diesen Anforderungen gerecht wird, weiss ich auch nicht.

    Dann ist vielleicht doch wieder eigene Hardware oder dedicated hosting nötig.

  4. Micha sagt:

    Zumindest ist es sehr mutig von Google, so etwas anzubieten. Das ist ein echter Test für jede Sandbox. Die Möglichkeiten einer umfangreichen Programmiersprache schaffen doch einiges an Angriffsfläche.

    Deswegen sehe ich die größten Probleme eigentlich nicht in der Sicherheit der entwickelten Google Apps selbst, sondern in den Gefahren durch bösartige Google Apps.

    Die Hürde zwischen den Daten verschiedener Google Apps ist dabei wahrscheinlich am niedrigsten. Insofern würde ich dort sowieso nichts wichtiges ablegen.

    Inwieweit Verschlüsselung in der DB hilft, hängt auch davon ab, ob es im Falle eines Python-Exploits möglich wäre, in den Speicher anderer Apps zu gucken. (Sprich ob die Apps alle als getrennte VMs oder wenigstens als getrennte Nutzer in der Speicherverwaltung laufen.)

  5. Sebastian sagt:

    @Micha: Ich habe mich auch schon gefragt, wie die die Daten verschiedener Apps trennen. Das werden wir wahrscheinlich nie erfahren, wenn es nicht einen entsprechenden Hack gibt. Ich hoffe aber mal ganz blauäugig, dass die Daten in unterschiedlichen Instanzen vorgehalten werden.

  6. Rocco sagt:

    Sehr interessanter Artikel!

    Ich habe ebenfalls am Wochende mit der Googles Apps Engine gespielt und findes sehr beeindruckent, dass die durch Google bereitgestellte SDK, lediglich 2,5MB groß ist!

  7. R.J.Rim sagt:

    Hey,

    wer nutzt denn eigentlich schon GAE?Habe es mir heute im Büro angeschaut und bin schon irgendwie beeindruckt. Google selber steht ja total auf Python.
    Naja, ist ja nicht viel anders als eine andere Programmiersprache.

    Ich würde gern etwas grösseres mit GAE machen. Selber komme ich aus den Java Welt und habe schon den Eindruck, dass ich mit Java strukturierter programmieren kann, als mit Python. Meine paar Python Tests gingen genaus so schnell wie PHP Tests. Ist also schon einfach.

    Wie seht ihr das? WIrd GAE etwas oder nicht?

    /r.

  8. R.J.Rim sagt:

    Ach so..noch eins….der Artikel ist klasse!!

Schreiben sie ein Kommentar