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

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

Memcache Quota Limit – 212 MB, 48 Stunden – Google Appengine

Der Google Appengine Memcache hat aktuell folgende Limits: maximal 212 MB Space, maximal 48 Stunden und 1 MB je Datensatz sowie maximal 10 K Datensätze. Langfristig können 500 KB zwischengespeichert werden.

Von Google selbst wird keine Quota für den Memcache veröffentlicht, sodass man die Werte nur durch eigene Tests ermitteln kann. Über die google.appengine.api kann mit memcache.get_stats()[‚bytes‘] die aktuelle Größe und mit memcache.get_stats()[‚oldest_item_age‘] der älteste Datensatz ermittelt werden.

Im Memcache können kurzfristig maximal 222.003.552 Byte und langfristig nur 500.269 Byte gespeichert werden, die maximale Dauer beträgt 172.800 Sekunden und maximale Größe 1.000.000 Byte für einen Datensatz. Bei mehr als 10.000 Datensätzen wirft die Appengine eine Exception und steigt mit einem 500 Server Error aus.

Mehr von diesem Beitrag lesen

1-zu-N Beziehung für Google AppEngine

Relation Land (1:N) Bundesland mit Google AppEngine abbilden.

Beispiel:

print "db.Model"

from google.appengine.ext import db

class tbl_land(db.Model):
id_land = db.StringProperty(required=True)
land = db.StringProperty()

class tbl_bundesland(db.Model):
ref_land = db.ReferenceProperty(tbl_land,collection_name=’ref_bundesland‘)
id_bundesland = db.StringProperty(required=True)
bundesland = db.StringProperty()

Mehr von diesem Beitrag lesen

SimpleHomePage für Google AppEngine released

SimpleHomePage für Google AppEngine erlaubt es eine Webseite direkt im Browser ohne SDK zu ändern. Neben statische Dateien (Bilder & Co) können auch dynamische Skripte mit Python online hochgeladen werden.

Download SimpleHomePage – Release 20110921

Im folgenden beschreiben ich, was man tun muss, um SHP4GAE nutzen zu können. Nachdem SimpleHomePage heruntergeladen und bei Google als AppEngine installiert wurde, ist man schon fast fertig.

Schritt 1 – Setup


Setup – Adminpasswort festlegen

Nach der Installation muss zunächst das Passwort für den Administrator definiert werden. Das Passwort wird verschlüsselt in der Datenbank der AppEngine abgespeichert.

Domain Check mit GAE urlfetch

Kleiner Workaround für die Google App Engine, um die Existenz einer Domain zu überprüfen. Statt der Library socket wird urlfetch aus der google.appengine.api verwendet.

Mehr von diesem Beitrag lesen