Batch per Cron, Tasks und Backends mit Google App Engine realisieren

Mit der Google App Engine ist es sehr einfach möglich langlaufende Programme per Batch im Hintergrund asynchron zu starten. Kleine Tasks mit einer Laufzeit von bis zu 10 Minuten können über den Webserver ausgeführt werden. Für echte Batches, die mehreren Stunden dauern, können mehrere separate Backend Server genutzt werden.

Das Limit liegt derzeit bei 48 GHz für die CPU und 10 GB für den RAM. Die kleinste Serverinstanz mit 600 MHz und 128 MB kosten ab 0,08 US-Dollar pro Stunde. Insgesamt können bis zu fünf verschiedene Backends definiert werden.

Google Appengine Backends

GAE Admin Console Backends

Mehr von diesem Beitrag lesen

Advertisements

GV100 Parser für Python

Mit dem nachfolgenden Quellcode kann die Datenbank GV100 vom Statistischen Bundesamt mit Python eingelesen und z.B. in einer Google App Engine zur Gliederung von Adressen nach Gemeinde, Kreis, Bezirk und Bundesland genutzt werden. Das Gemeindeverzeichnis wird quartalsweise aktualisiert und steht jedem kostenlos als Download (Mrz, Jun, Sep, Dez) zur Verfügung.

Die Datei GV100.asc enthält alle 12.000 Orte aus Deutschland inklusive Postleitzahl und wird von zahlreichen Internetseiten als PLZ-Suche aufgearbeitet. Die Daten werden auch als SEO-Werkzeug zur Suchmaschinenoptimierung eingesetzt, um alle Ortsnamen mit beliebigen Keywords zu verknüpfen. Mit der Kombination von Suchbegriffen – „Autohaus Hintertupfingen“ oder „Hotel Hintertupfingen“ – können so sehr viele Internetseiten generiert werden.
Mehr von diesem Beitrag lesen

Google App Engine – Datastore Container – Performance Serialisierung mit pickle versus marshal

Da die Google App Engine pro Tag nur 50k Operationen auf den Datastore spendiert, kann man als Workaround einen Container mit mehreren Datensätzen im Datastore abspeichern. Ist z.B. ein Datensatz 500 Byte groß, dann können in einem Datastore-Container bis zu 2.000 Datensätze gespeichert werden.

Als Container eignet sich eine Hash-Liste, die als Key die ID oder den NAME des Datensatzes enthält. Die Liste wird dann serialisiert in einem BlobProperty gespeichert und der Spacebedarf kann zusätzlich mittels ZIP-Kompression reduziert werden.

Frage: Was ist schneller Marshal oder Pickle?
Antwort: Marshal ist 10 mal schneller als Pickle. 

Beim der Realisierung des Datastore-Container musste ich unbedingt die Vorgaben von Google beachten, dass ein Skript nicht langsamer als eine Sekunden sein darf. App Engines, bei denen Skripte länger als 1.000 ms laufen werden von Google in eine spezielle Sandbox ausgesondert.

Meine Implementierung vom Datastore-Container basiert auf Python. In dieser Sprache gibt es mehrere Möglichkeiten der Serialisierung und Deserialisierung eines Objektes, um dieses in einer Datei oder als Blob in der Datenbank zu speichern. Zunächst habe ich auf Pickle gesetzt, aber die Performance war in Python 2.5.4 sehr schlecht – 250 ms je Operation (Get, Put, Delete) bei einer Hash-Liste mit 300 Zeilen und 100 KB Space.

Mehr von diesem Beitrag lesen

Architektur des Google App Engine Cloud Service Framework macht Webseiten für Startups skalierbar

Die Architektur des Google App Engine Cloud Service (GAE) ist ein Framework bzw. Server Stack, der es ermöglicht eine Webseite skalierbar mit hoher Performance zu betreiben ohne als Startup bei der Unternehmensgründung selbst eine Infrastruktur aus Clustern aufbauen und betreiben zu müssen. Das Hosting einer Webapp ist in der Free Version sogar kostenlos, sodass eine Homepage gratis für Googles Plattform in Python, Java oder Go entwickelt werden kann. Steigt die Serverlast später an, kann der eigene Cluster mitwachsen ohne dafür die Software anpassen zu müssen.

Der Vorteil der Cloud ist, dass bei einer Plattform als Service nur variable Kosten anfallen. Um die Skalierbarkeit kümmern sich andere und man selbst hat keine Fixkosten von mehrere tausende Euro pro Monat für IT-Spezialisten. Dieser Artikel beschreibt Aufbau und Funktionsweise der App Engine, über die täglich Millionen von Besuchern möglich sind.

Startup / skalierbarer Webserver

Besonders für Startups eignet sich die App Engine, da die Infrastruktur mitwächst und zu Beginn kostenlos ist.

Die traditionelle IT-Architektur im Client-/Serverumfeld bzw. von Webservern ist meist statisch und zentralisiert. Das bedeutet die Anwendung besteht aus einem oder mehreren fest konfigurierten Servern in einem Rechenzentrum und nutzt ein relationales Datenbanksystem. Die Kapazität dieser Ressourcen und damit die maximal mögliche Serverlast ist begrenzt. Übersteigt die Besucherzahl dann zunehmend die Kapazitäten des eigenen Systems ist guter Rat teuer, denn nicht jeder IT’ler beherrscht Skalierung.

Die Infrastruktur der App Engine wird als Platform as a Service (PaaS) genutzt. Bei dieser Plattform sind die Webserver, der Cache, die Datenbank und die Dateiserver weltweit in einer public Cloud verteilte, sodass jeder Request von anderen Servern beantwortet werden kann. Die Anzahl der benötigten Server wird dynamisch an die aktuelle Last angepasst. Ideal für Startups und neue Projekte, in denen sich die IT auf die Umsetzung der Anwendung konzentriert und nicht zusätzlich mit der Infrastruktur sowie deren Betrieb belastet wird.

Komponenten / Server Stack

Mit der Google App Engine kann sofort mit der Umsetzung der Webseite begonnen werden, da sie alle nötigen Komponenten für Entwicklung, Test, Deployment und Betrieb enthält.

Die Komponenten der Google App Engine Cloud können auch für den Aufbau einer eigenen skalierbaren Infrastrukturen adaptiert werden. Für Teile existieren Open Source Lösungen oder Amazon Services, die im eigenen Stack integrierbar sind. Im Vergleich zu einer Apache MySQL PHP Installation unter Linux (LAMP) oder Windows (WAMP) ähnelt die App Engine von der Laufzeitumgebung eher einem Java EE Application Server (JBoss, Websphere, Tomcat), da Programme z.B. auch bei Python im Hauptspeicher gecached werden.

Bestandteile des App Engine Cloud Service sind:

  • Webspace (Application)
  • Webserver (Instanz)
  • Load-Balancer (Scheduler)
  • Laufzeitumgebung (Python, Java, Go)
  • Cache (Memcache)
  • hierarchische Datenbank (Datastore)
  • relationale Datenbank (SQL-DB)
  • Fileserver (Blobstore)
  • Scheduler (Cron)
  • Webhook (Task)
  • Batchserver (Backend)
  • HTTP-Push (Channel)
  • Emailserver (API)
  • Bibliotheken (API’s)
  • Entwicklungsumgebung (Eclipse)
  • Testumgebung (SDK)
  • Deploymentverfahren (SDK)
  • Versionsverwaltung (GAE)
  • Benutzerverwaltung (GAE)
  • Logging (GAE)
  • Monitoring (GAE)
  • Domainverwaltung (Apps)
  • Dokumentation (Web)

Jede Komponente der App Engine Architektur ist skalierbar! Um die Kapazität der Cloud insgesamt zu erweitern müssen nur weitere Server hinzugefügt werden. Zudem kann ein Server seine Aufgabe ändern indem er mit einem anderen Image ausgeführt wird. Das gesamte System ist weniger anfällig gegen Ausfälle einzelner Server. Um das Management der Cloud kümmert sich Google, zu jeder Uhrzeit und auch am Wochenende.

Mehr von diesem Beitrag lesen