Google App Engine

Aus Cloud Computing Workshop
Wechseln zu: Navigation, Suche

Die Google App Engine (GAE) ist eine Plattform zum Entwickeln und Hosten von Web-Anwendungen auf den Servern von Google, die im Internet als Cloud-Lösung angeboten wird. Die Google App Engine ist damit ein Bestandteil des Produkt- und Serviceangebots von Google und wurde im April 2008 veröffentlicht. Die GAE wird hauptsächlich von Entwicklern genutzt, denen sie eine schnelle Entwicklung und eine einfache Verwaltung ermöglicht. Das Konzept der Google App Engine im Rahmen des PaaS (Platform as a Service), die Einordnung in das Produkt- und Serviceangebot von Google sowie der technische Hintergrund sollen im Folgenden erörtert werden. Abschließend erfolgt eine Bewertung der Google App Engine - Funktionalität im Hinblick auf mögliche Einsatzgebiete im Unternehmen sowie der praktische Einsatz der GAE anhand eines selbstgewählten Beispielprojekts.

Hintergrund und Konzepte[Bearbeiten]

Google App Engine - Ein PaaS-Konzept[Bearbeiten]

Das primäre Ziel, welches Google mit der Entwicklung der App Engine verfolgt, ist die Verbreitung von Webapplikationen. Ohne eine abgestimmte Umgebung ist der administrative Aufwand für das Deployment einer Webapplikation sehr zeitaufwändig. Ein Webserver muss installiert und konfiguriert werden, Datenbanken erstellt, Traffic und Logginglösungen implementiert werden. Schließlich muss auch eine physikalische Maschine für den Upload bereitstehen, die gegen Ausfallzeiten, Hardwareschäden und Nutzungssteigerungen abgesichert sein muss. Die App Engine setzt genau an diesen Punkten an und entbindet den Entwickler von diesen administrativen Tätigkeiten, indem sie eine skalierbare Infrastruktur bereitstellt, die es ermöglicht serverseitige Anwendungen zu schreiben und auzuführen. Somit entfallen Herausfoderungen & Aufgaben wie Webserverkonfiguration & Schreiben von Startskripts, Einrichten von SQL-Datenbanken, Einrichten von Überwachung, Bereitstellung neuer Codeversionen sowie finanzielle Herausforderungen und Wartung-, Instandhaltungsaufwand.[1]


Die App Engine bietet dabei drei Schlüsselvorteile:

  • Zum einen stellt Google eine Infrastruktur für Web Applikationen zur Verfügung, die leicht zu bedienen, skalierbar ist und zuletzt den Deployment-Prozess vereinfacht. Diese Infrastruktur ermöglicht es nur die Ressourcen zu beanspruchen, die letzendlich benötigt/nachgefragt werden. Es ist daher keine eigene physische Maschine notwendig.
  • Die App Engine ist zudem darauf ausgelegt, die Applikation über den gesamten Lebenszyklus zu unterstützen. Angefangen bei SDK Umgebungen zur Codeerstellung, bis hin zu Datenbankintegration, Deployment, Monitoring und Verwaltung der Applikation. Gerade auch die Wartung der Anwendung wird durch die flexible Infrastruktur und Versionshistorie begünstigt.
  • Durch die direkte Nutzung der Google Infrastruktur können die Vorteile dieses etablierten Systems genutzt werden. Zunächst ist dadurch eine vollständig skalierbare Infrastruktur gegeben, die mit Techniken wie Bigtables, Google File System oder Google Account Integration ein solides Rahmenwerk für professionelle Webapplikationsentwicklung schafft.


Übersicht der Cloud Konzepte

Platform as a Service (PaaS)[Bearbeiten]

Die Google App Engine ist aus der genannten Erläuterung als eine Platform as a Service Lösung (PaaS) einzuordnen. Als PaaS bezeichnet man Services, die in der Cloud eine Platform für die Entwicklung von Webanwendungen zur Verfügung stellen. Voraussetzung hierfür ist, dass sowohl Laufzeitumgebung als auch Entwicklungsumgebung bereitgestellt werden und der Service den gesamten Software Lebenszyklus unterstützt, ohne das eine Anschaffung von Hardware oder Software zum Betrieb der Services notwendig ist. Oft werden PaaS Angebote noch durch weitere Features wie Teamkollaboration, Versionierung, Monitoring und Sicherheitsmechanismen erweitert. Obwohl PaaS Dienste meist auch die Nutzung der darunter liegenden Infrastrukturlösungen ermöglichen, sind diese IaaS Services dahingehend von PaaS abzugrenzen, dass der Nutzer in einer PaaS Umgebung in der Regel nicht in Kontakt mit dem Betriebsystem oder der Middleware kommt.

Bezahlmodelle – Freie Nutzung vs. Premiumnutzer[Bearbeiten]

Für die Nutzung der Google App Engine wird ein Google Account benötigt, mit welchem bis zu 10 Applikationen erstellt werden können. Die sogenannte Free-Quota beschreibt die kostenlos verfügbare Rechenleistung. Diese wird alle 24 Stunden zurückgesetzt und kann genauestens über den Administrationsbereich verfolgt werden. Als Beispiel einer Ressourcenrestriktion ist hier das Limit des eingehenden und ausgehenden Datenflusses mit 1GB pro Tag zu nennen. Des Weiteren ist eine CPU-Leistungszeit von 6,5 Stunden pro Tag vereinbart, und der Mailverkehr auf 100 Mails pro Tag beschränkt. Seit erscheinen der App Engine im April 2008 hat Google bereits zweimal die "Free Quota" Limitierung nach unten korrigiert.[2] Auf der GAE Pricing and Feature Webseite können stets die aktuellen Bezahlmodelle abgerufen werden.


Derzeit gelten folgende Limits für die freie Nutzung:

Quota Limit (pro Tag)
Instanz-Stunden 28 Stunden
Emails 100 (5000 Admin E-mails)
eingehende Bandbreite Unlimited
ausgehende Bandbreite 1 GB
Datenspeicher 1 GB
Datenspeicher Operationen 50k
Blob Speicher 5 GB
XMPP API 10k stanzas
Channel API 100 channels opened
Conversion API 100 conversions
URLFetch API calls pro Tag 657,000

Einordnung der Google App Engine in das Google Produkt- und Serviceangebot[Bearbeiten]

Die verschiedenen Google Services

Google Inc. ist ein amerikanisches Unternehmen, welches 1998 die Suchmaschine Google ins Leben gerufen hat, welche heute eine weltweite Marktführerrolle eingenommen hat. Durch den Erfolg der Suchmaschine, bedingt durch kontextsensitive Werbung bietet Google neben seinem Kerngeschäft eine Vielzahl weiterer Onlineservices an. Dazu zählen vorallem Google Mail, Google Docs, Google+ uvm. Google versucht somit, den Besuchern einen Mehrwert für das tägliche Onlineleben zu schaffen und fokussiert sich dabei auf kollaborative und tägliche Aktivitäten.


Neben konsumerorientierten Services bietet Google aber vorallem auch Entwicklern die Möglichkeit, Google Technologien zu nutzen, um die Anwendungsentwicklung auf den verschiedensten Plattformen zu erleichtern. Google stellt dabei Schnittstellen zur Verfügung, die einfach in bestehende Applikationen implementiert werden können. Als Beispiel ist hier die Google Maps, Picasa Foto und Predictive Analytics Integration zu nennen.

Technischer Hintergrund und Architektur[Bearbeiten]

Anwendungsumgebung[Bearbeiten]

Die Anwendungsumgebung der Google App Engine erlaubt es Applikationen zu erstellen, die aufgrund der Google Infrastruktur zuverlässig, performancelastig und ebenso skalierbar sind. Die App Engine bietet daher folgende Vorteile:

  • Dynamische und einfache Bereistellung von Webanwendungen mit Unterstützung der neusten Webtechnologien
  • Lokale Entwicklungsumgebungen mit vollem Funktionsumfang für lokales Testen der Anwendung
  • Automatische Skalierung der Ressourcen und Lastenverteilung
  • Beständige Performance für Suchanfragen und Transaktionen
  • Zahlreiche APIs für die Nutzerauthentifizierung oder Integration von weiteren Web Services

Sandboxprinzip[Bearbeiten]

Im Allgemeinen bezeichnet der Begriff Sandbox einen isolierten Bereich, dessen Aktionen keinerlei Auswirkungen auf die äußere Umgebung hat. Es stellt daher einen Sicherheitsmechanismus dar, der das ausführende und laufende System trennt. Die Technik wird häufig in der Softwareentwicklung genutzt, um ungetesteten Code oder nicht vertrauenswürdige Programme zu testen.

Google App Engine Applikationen laufen daher auch in einer gesicherten Sandbox-Umgebung ab, die nur einen eingeschränkten Zugriff auf das zugrunde liegende Betriebssystem ermöglicht. Somit ist eine zuverlässige Umgebung gegeben, die unabhängig von Hardware, Betriebssystem oder physikalischem Standort eine sichere Ausführung über mehrere Server verteilt ermöglicht.

Folgende Restriktionen gelten im Umgang mit der Sandbox Umgebung:

  • Eine Anwendung kann nur über den URL Abruf und den E-Mail Dienst auf andere Computer zugreifen. Diese können wiederrum nur über HTTP- oder HTTPS Anfragen auf den Standard-Ports eine Verbindung zur Anwendung herstellen
  • Die Anwendung kann nicht in das Dateisystem schreiben, sondern nur Daten lesen, die mit dem Anwendungscode hochgeladen wurden. Alle Daten die zwischen Anfragen bestehen bleiben sollen, müssem im Datenspeicher oder Memcache hinterlegt werden
  • Die Antwortdaten einer Webanfrage müssen innerhalb von 30 Sekunden zurückgegeben werden

Programmiersprachen[Bearbeiten]

Die Google App Engine unterstützt sowohl Java als auch Python als Entwicklungsprache. Neu hinzugekommen ist die Open-Source Sprache „Go“, die das Ziel hat die Produktivität der Programmierarbeit durch ausdrucksstarke, präzise und saubere Mechanismen zu steigern.

Java[3]: Webanwendungen für die Google App Engine können mit gewöhnlichen Java Web Development Tools (z.B. Java Servlet Standards, JSP) und den Java API Standards entwickelt werden. Die Beschränkungen ergeben sich durch die Sandbox-Restriktionen, zum Beispiel durch das Öffnen eines Sockets oder das Schreiben in einer Datei. Die aktuelle Laufzeitumgebung (Stand: 01.06.2012) benutzt Java 6 Plattform und Bibliotheken. Das App Engine Java SDK unterstützt Entwicklungen in Java 5 oder 6. Die Datenhaltung erfolgt über die Interfaces der Java Data Objects (JDO) und der Java Persistance API (JPA).

Python[4]: Durch einen optimierten Python Interpreter ermöglicht die Google App Engine die Entwicklung von Webanwendungen mit Python. Neben Django benutzt die Google App Engine weitere Web Application Development Frameworks und APIs um Entwicklern die Entwicklung vollwertiger Webanwendungen zu ermöglichen. Zudem ist die Python Standard Bibliothek nativ verfügbar. Der aktuelle Stand (01.06.2012) ermöglicht es dem Entwickler zwischen den Laufzeitumgebungen 2.5.2 (default) und 2.7.2 zu wählen. Beschränkungen in der Entwicklung mit der Standard API sind wie bei der Java-Entwicklungsmöglichkeit durch die Sandbox-Restriktionen vorgegeben. Die Anwendung muss ausschließlich in Python geschrieben sein, da Erweiterungen in C nicht unterstützt werden.

Datenspeicher[Bearbeiten]

Einer der wichtigsten Bestandteile der Google App Engine ist der Datenspeicher. Er stellt die gesamte Datenhaltung für die App Engine Umgebung sicher und ist daher die elementare Schnittstelle im gesamten Entwicklungssystem. Eine Besonderheit des Google Datenspeichers ist die enorme Flexibilität und die Unterstützung von großen Datensätzen in Millionenhöhe, genannt Google Bigtable. Im Gegensatz zu einer herkömmlichen relationalen Datenbank können hier die Spalten für jede Zeile unterschiedlich groß sein. ¬Um den Datenspeicher anzusprechen wird die Abfragesprache GQL verwendet, welche im Kern eine SQL ähnliche Sprache zum Abrufen von Entitäten oder Schlüsseln aus dem Datenspeicher ermöglicht. Die Syntax ähnelt hierbei der weit verbreiteten SQL Sprache, bietet jedoch einige Besonderheiten und Funktionalitäten, die einer Eingewöhnungsphase bedürfen. [5]

Der Datenspeicher profitiert weiterhin von Googles Infrastruktursystemen und Techniken wie dem Google Distributed Filesystem (GFS). Das folgende Beispiel zeigt eine Sort-Abfrage in GQL:

      SELECT * FROM Story   
      WHERE title = 'App Engine Launch'     
      AND author = :current_user           
      AND rating >= 10          
      ORDER BY rating, created DESC

Das bedeutet, es handelt sich um ein fehlertolerantes, verteiltes System, welches auf zehntausendenden Maschinen läuft und dabei die Daten automatisch analysiert und restrukturiert. Auf die Anwendungsentwicklung bezogen bedeutet dies, dass der Datenspeicher die Effizienz und Verwaltung der Datensätze übernimmt und dieser automatisch mit dem wachsen der Applikation skaliert wird.

Arbeitsablauf bei der Entwicklung[Bearbeiten]

Deploymentprozess der Google App Engine

Mithilfe der App Engine Development Kits für Java und Python kann jede Webserver Anwendung zunächst auf dem lokalen Computer mit voller Funktionalität simuliert werden. Bei diesem Vorgang wird auch überprüft, ob alle Restriktionen der Sandbox-Umgebung eingehalten werden oder ob z.B. versucht wird, auf Systemressourcen zuzugreifen. Im nächsten Schritt kann die Applikation über das SDK per Mausklick in die App Engine Cloud hochgeladen werden und ist somit online verfügbar. Über die bereitgestellte Webadresse ist die Anwendung nun für Nutzer weltweit, online ausführbar. Soll eine bereits existierende Anwendung überarbeitet werden, wird der neue Programmcode als neue Version hochgeladen. Die alte Version bleibt für die Anwender solange verfügbar, bis die neue Version aktiviert wird. Die Verwaltungskonsole im Administrationsbereich stellt eine webbasierte Schnittstelle zum Verwalten und Konfigurieren der App Engine Anwendungen dar. Zudem können dort Zugriffs- und Fehlerprotokolle eingesehen und ausgewertet werden.

Eine App Engine Anwendung enthält vom Aufbau her mindestens eine Skript- und eine Konfigurationsdatei (app.yaml), die festlegt, welches Skript beim Aufruf einer bestimmten URL ausgeführt werden soll. Ein Beispiel für eine solche Konfigurationsdatei kann folgendermaßen aussehen:

     application: FindMyFlat
     version: 1 
     runtime: java 
     api_version: 1 
     handlers:
     url: http://findmyflat.com 
     script: findmyflat.java

App Engine Dienste[Bearbeiten]

Um die App Engine noch effizienter zu nutzen, stehen einige Dienste bereit, die es ermöglichen, häufige Operationen einfach und schnell zu implementieren. Dafür stehen die folgenden APIs bereit:


URL Abruf: Mithilfe dieses Dienstes können Anwendungen auf Internetressourcen zugreifen und Datenpunkte für die Anwendung beschaffen. Der Zugriff erfolgt dabei äußerst performant über die Google Infrastruktur

Memcache: Der Memcache Dienst stellt einer Anwendung einen Cache für Schlüssel-Werte zur Verfügung. Der Cache ist im Speicher integriert und ist daher von mehreren Instanzen einer Anwendung abrufbar. Der Memcache ist aus diesem Grund besonders für temporäre Dateien sinnvoll, die nicht beständig im Datenspeicher gehalten werden müssen.

Bildbearbeitung: Dank des Image-Dienstes können Bilder in der Anwendung bearbeitet werden. Die API erlaubt es JPEG oder PNG Bilder zuzuschneiden, zu drehen, zu spiegeln oder die Größe zu ändern.

E-Mail: Der E-Mail Dienst macht herkömmliche E-Mail Konfiguration überflüssig. Er ermöglicht ein direktes versenden von E-Mails über die Anwendung und verwendet dazu Google Infrastruktur.

Bewertung[Bearbeiten]

Die Google App Engine zeigt, dass es nicht notwendig ist Verträge mit Webhostern abzuschließen, um eine Webapplikation zu veröffentlichen. Google bietet mit ihrem Dienst kostenlose CPU Rechenzeit, Speicher, Bandbreite und bis zu 5 Millionen Seitenaufrufe pro Monat. Sollten diese Kapazitäten nicht ausreichen, können bedarfsgenau weitere Ressourcen hinzugebucht werden. Besonders lobenswert ist hierbei das 24h Budget Limit, welches eine übermäßige Ausschöpfung des bereitgestellten Budgets unterbindet. Ein weiterer Vorteil ist die Möglichkeit, die App Engine mitsamt Google Infrastruktur komplett kostenlos zu testen. Der Cloud Service bedient sich dabei aus einem riesigen Pool von Servern und unterscheidet sich somit von klassischen Hosting Anbietern, die einen festen, dedizierten Server anbieten. Dem Kunden wird somit der administrative Aufwand abgenommen, was den Fokus auf die eigentlichen Programmiertätigkeiten begünstigt.


Abschließend die Vor- und Nachteile im Überblick:

Vorteile

  • Kostenlose Nutzung der Google Infrastruktur
  • Keine Wartung, keine Hardwarekosten
  • Keine feste Vertragslaufzeit, Pay-as-You-Use Prinzip[6]
  • Performanceabhängige, automatische Skalierung
  • komplette Unterstützung des Software Lebenszyklus
  • Umfassende Unterstützung durch Google Web Toolkit und zahlreiche APIs
  • Eigene SDK Unterstützung für Java und Python

Nachteile

  • Anwendung ist abhängig von App Engine, falls der Service gestoppt wird, muss eine neue Hostingumgebung eingerichtet werden. Dies kann zeitaufwendig sein
  • Abhängigkeit von Googles Bezahlungsmodell
  • Anwendung kann nicht auf das Dateisystem schreiben, sondern muss immer Datenspeicher nutzen
  • Maximale Antwortzeit ist mit 30 Sekunden oft nicht ausreichend, danach folgt eine Fehlermeldung für den Nutzer
  • Anwendung kann nur Code ausführen, der von HTTP requests gesendet wird

Praktischer Einsatz der Google App Engine[Bearbeiten]

Im Rahmen des Cloud Computing Workshops 2012 wurde die Praxistauglichkeit der Google App Engine durch ein selbstgewähltes Projekt unter Beweis gestellt. Im Folgenden wird zunächst die Zielsetzung des Projekts und anschließend die Umsetzung mit der Google App Engine erläutert.

Das Projekt "FindMyFlat"[Bearbeiten]

Heatmap für Mannheim

Bei FindMyFlat handelt es sich um einen Webservice, welcher den herkömmlichen Prozess der Wohnungssuche vereinfacht und eine Social Media Integration bereitstellt. Dieser Service adressiert mehrere typische Probleme der Wohnungssuche:

  • bei einem Umzug in eine bisher noch unbekannte Stadt (zum Beispiel zu Beginn eines Studiums) ist typischerweise keine Ortskenntnis vorhanden. Informationen darüber, in welchen Stadtteilen es besonders viele Wohngemeinschaften gibt und wie sich unterschiedliche Stadtgebiete im Mietniveau unterscheiden, sind meist nur nach langer Recherche auffindbar
  • Wohnungsangebote finden sich auf unzähligen Plattformen (zum Beispiel wg-gesucht.de, immonet.de, immobilienscout.de, usw.), dadurch wird die Suche schnell unübersichtlich und wenig zielführend


FindMyFlat bietet für diese Probleme eine Lösung, indem der Service dem Nutzer eine zentrale Anlaufstelle für die Wohnungssuche bietet. FindMyFlat dient hierbei jedoch nicht als Portal mit eigenständigen Wohnungsannoncen, sondern stellt ein Mashup der bestehenden Plattformen zusammen - individuell für jeden Nutzer. Die gesammelten Wohnungsangebote werden von FindMyFlat auf einer Karte als "Heatmap" dargestellt. Hieraus lassen sich die Stadtgebiete mit besonders vielen Angeboten leicht identifizieren. Die Anzeige der Wohnungen erfolgt dabei stets nach dem individuellen Suchprofil des Nutzers. Zum Beispiel "Wohnungen größer als 25qm aber günstiger als 400€ monatlich". Die Liste der möglichen Suchparameter ist dabei nahezu unbegrenzt: Art und Größe der Wohnung, Art und Anzahl der Mitbewohner, Einrichtung der Wohnung, mögliche Mietzeiträume usw.


Die jeweiligen Sucheinstellungen werden im Profil des Nutzers hinterlegt. Die Authentifizierung erfolgt über die gängigen "Login with …"-Funktionen von beispielsweise Facebook oder Google. Die sozialen Netzwerke können jedoch auch über die Authentifizierung hinweg in die Wohnungssuche eingebunden werden. So können die Nutzer zum Beispiel einzelne Stadtteile bewerten und Kommentare abgeben und dadurch die Wohnungssuche wesentlich intuitiver gestalten.


Orientiert an der NIST-Definition von Cloud-Computing ist die Nutzung der Google App Engine im Allgemeinen sinnvoll aufgrund von[7]:

  • Automatischer Diensterbringung auf Anforderung: Die Ressourcen der Google App Engine (Speicher, Anfragen/Antworten, CPU-Leistung, etc.) werden nur On-Demand, das heißt nur wenn eine Anwendung Ressourcen tatsächlich benötigt, zur Verfügung gestellt. Die Bereitstellung erfolgt über eine Self-Service Schnittstelle über die ein Google App Engine Entwickler eigenständig Ressourcen skalieren kann.
  • Netzwerkbasiertem Real-Time-Zugriff: Der Zugriff erfolgt über das Internet und ist somit global, Geräte- und Zeit-unabhängig möglich.
  • Resource-Pooling: Die Ressourcen die allen Google App Engine Entwicklern zur Verfügung stehen sind Teil eines Ressourcen-Pools. Die so zur Verfügung stehenden Ressourcen werden für die Webanwendung eines Entwicklers bereitgestellt, wenn diese Ressourcen benötigt. Benötigt die Webanwendung die Ressourcen nicht länger, werden sie anschließend wieder dem Ressourcen-Pool und somit anderen Anwendungen zur Verfügung gestellt.
  • Elastizität: Die Skalierung von Google App Engine Ressourcen geschieht zeitnah (On-Demand), kann jederzeit vorgenommen werden und passiert, je nach Wahl des gewählten Servicemodells, abhängig von der Auslastung, automatisch.
  • Messbarer Dienstqualität und -quantität: Die Google App Engine ermöglicht es den Umfang der gentutzen Ressourcen vollständig zu kontrollieren.


Das FindMyFlat Projekt wurde deshalb mit Hilfe eines Cloudservices umgesetzt, da die Vorteile der Skalierbarkeit für dieses, heute noch schwer abschätzbare, Projekt genutzt werden sollen. So hängen die benötigten Ressourcen stark von der Anzahl der nachgefragten Städte ab. Für die Demonstration des Dienstes reichen demnach die kostenlos zur Verfügung stehenden Google App Engine Ressourcen. Steigt die Anzahl der Nutzer oder die Anzahl der betrachteten Städte um wenige Einheiten an, so werden bereits entsprechend viele Ressourcen, die den kostenlosen Ressourcen-Umfang überschreiten, benötigt. Desweiteren ist der Dienst online über die Google Infrastruktur erreichbar und damit global und zeitunabhängig hochverfügbar. Für ein Projekt in dieser Größe ist das Kosten-Nutzen-Verhältnis gegenüber einer eigenen IT-Infrastruktur sehr überschaubar, wodurch die Projektrisiken zudem ausschließlich darauf reduziert werden können, dass der Dienst nicht nachgefragt wird und die Entwicklungszeit anderweitig genutzt hätte werden können. Ein großes finanzielles Risiko besteht bei diesem Projekt nicht.

Umsetzung mittels Google App Engine[Bearbeiten]

FindMyFlat Systementwurf

FindMyFlat wurde im Rahmen des Cloud Computing Workshops mithilfe der Google App Engine prototypisch umgesetzt. Der Entwurf der Anwendung besteht dabei aus zwei wesentlichen Kernelementen. Zum einen dem Datensammler, welcher die notwendigen Daten in regelmäßigen Abständen aus diversen Datenquellen abruft und im Datenspeicher der App Engine hinterlegt. Zum anderen dem Frontend, welches dem eigentlichen Webservice für den Endnutzer entspricht.

Datenkollektoren (Backend)[Bearbeiten]

Bei den Datenkollektoren handelt es sich um Servlets und dadurch um reinen Java-Code. Diese Servlets werden durch die cron-Funktionalität der Google App Engine in regelmäßigen, konfigurierbaren Abständen abgerufen (standardmäßig alle 30 Minuten). Da es sich bei den Datenquellen um Webseiten handelt, wird der Zugriff per HTTP GET und der nativen Java-Klasse URLConnection realisiert. Hierzu wurde folgende Funktion geschrieben:


    public static String fetchURL(String s_url){
        String ret="";

        try {
        	URL url = new URL(s_url);
        	URLConnection yc = url.openConnection();
        	yc.setRequestProperty("User-Agent", "Mozilla 5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.11) ");
        	
            BufferedReader reader = new BufferedReader(new InputStreamReader(yc.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line;

            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            reader.close();
            ret = sb.toString();

         } catch (Exception e) {
             // ...
         }
                  
         return ret;
     }


Das Ergebnis dieser Zugriffe (der HTML-Code) wird anschließend durch entsprechende reguläre Ausdrücke (RegEx) ausgewertet. Um die relevanten Daten im Datenspeicher der Google App Engine ablegen zu können, müssen die Servlets Zugriff auf diesen Datenspeicher bekommen. Zwar können hierfür Beispiel-Quelltexte von Google verwendet werden, diese bedürfen jedoch noch weiterer starker Anpassung auf die konkrete Anwendung. Die objektorientierten Ansätze von Java einserseits und des Datenspeichers andererseits sind nur mangelhaft integriert. So können Datenobjekte aus Java nicht generisch im Datenspeicher hinterlegt werden, sondern die korrekte Speicherung bedarf der manuellen Zuweisung jedes einzelnen Attributs. Der gesamte Datenzugriff (sowohl lesend als auch schreibend) gestaltet sich dadurch als komplex und nicht flexibel.


    public void writeToDatastore(ArrayList<Offer> offers){
	DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    	ArrayList<Entity> entities = new ArrayList<Entity>();
    	
    	for(Offer o:offers)
    		if(o != null)
    			entities.add(createEntity(o));
    	
    	if(!entities.isEmpty())
    		datastore.put(entities);
    }
    
    private Entity createEntity(Offer o){
    	Entity e = new Entity("Offer",o.id);
    	
    	e.setProperty("city", o.city);
    	e.setProperty("cat", o.cat.toString());
    	e.setProperty("size", o.size);
    	e.setProperty("rent", o.rent);
    	e.setProperty("extra_costs", o.extra_costs);
    	e.setProperty("deposit", o.deposit);
    	e.setProperty("temporary", o.temporary);
    	e.setProperty("coords.lat", o.coords.lat);
    	e.setProperty("coords.lng", o.coords.lng);
    	e.setProperty("date", o.date);

    	return e;
    }


Die prototypische Umsetzung um Rahmen des Workshops umfasst den Datensammler für das größte deutsche Wohnungsportal: wg-gesucht.de. Das entsprechende Servlet überprüft je nach Konfiguration die ersten drei Übersichtsseiten der aktuellen Wohnungs-Annoncen für jede beliebige Stadt. Dadurch werden bei jeder Überprüfung die neusten 60 (3x20) Inserate jeder Stadt ermittelt und mit dem Datenspeicher der Google App Engine abgeglichen. Für jedes noch unbekannte Inserat wird über eine zweite HTTP GET-Anfrage die detaillierte Ansicht abgerufen und entsprechend der festgelegten regulären Ausdrücke ausgewertet. Hierbei werden zu jedem Angebot die monatlichen Mietkosten und eventuelle Nebenkosten, die Wohnungsgröße und die Kaution erfasst. Weiterhin wird im Datenspeicher hinterlegt, ob es sich um ein Angebot zur Zwischenmiete handelt und für