Letztens wurde das auf dem Usertreffen gestreift, und ich überlege mal darüber etwas zu erzählen, daher fasse ich hier mal meine Gedanken dazu zusammen:
Inzwischen kennt fast jeder die Google App Engine (GAE). Nun interessiert mich persönlich ein Hosting meiner Applikationen dort herzlich wenig, aber die Technik dahinter ist vergleichsweise interessant. Einer der Kritikpunkte daran war, dass es durch die GAE einen Vendor Lock-In geben wird. Jedoch so stark ist dieser Lock-In gar nicht gegeben, wenn man mal AppDrop anschaut kann man durchaus etwas halbwegs kompatibles schaffen. Das größte Problem was ich bei AppDrop sehe ist die Skalierbarkeit. Es läuft zwar in Amazons EC2, aber nutzt eine Flat-File-"Datenbank" und ist generell eher als Proof-of-Concept zu sehen.
Was mich da ein wenig wundert ist, warum sie nicht gleich die SimpleDB verwendet haben, die ja bei Amazon sowieso verfügbar ist.
Nachdem man ja AppDrop entweder forken kann oder sich so etwas selbst baut, kommt dann noch die Frage der Datenbank, die nicht teil des SDKs ist. CouchDB könnte da eine Möglichkeit sein, wobei man mit Hypertable wohl näher an BigTable dran ist. Leider wollte Hypertable bei mir pertout nicht kompilieren, da CMake die BerkeleyDB nicht mochte. Auch sieht das mit Python-Bindings zumindest Momentan eher schwach aus. Jedoch kann Hypertable analog zu BigTable und dem Google File System auch auf ein verteiltes Dateisystem zugreifen, namentlich Kosmos und das HDFS, Hadoop Distributed File System. Und damit wären wir bei Hadoop.
Hadoop scheint einen etwas größeren Rahmen als Hypertable aufzuspannen, so enthält es neben HDFS auch noch noch eine MapReduce-Implementation und mit HBase eine Alternative zu BigTable. Somit ist es direkte Konkurrenz zu Google und es ist nicht sonderlich verwunderlich dass der weltgrößte Hadoop-Cluster bei Yahoo steht. Sehr nett ist, dass man HBase gleich nach dem entpacken fast sofort starten kann (ist noch etwas hakelig, aber bei Version 0.2 sieht man über sowas schon mal hinweg).
Auf HBase kann man auf mehrere Arten zugreifen, für Python-Programmierer sind REST (also via HTTP-Requests und mit XML-Antwort, also ähnlich wie CouchDB) oder Thrift interessant. Thrift ist bisher recht unbekannt, ist aber eine Library die RPC zwischen verschiedenen Sprachen ermöglicht. Im Prinzip ist es ähnlich zu den Protocol Buffers, deren FOSS-Version zumindest momentan kein RPC unterstützt. Diese Ähnlichkeit ist nicht verwunderlich, da Thrift ursprünglich von Facebook von ehemaligen Google-Leuten geschrieben wurde. Gut versteckt findet man dann auch Python-Bindings, die man zusammen mit den Thrift-Dateien die HBase mitbringt zu Python-Code generiert (ja, Code-Generation ist hässlich, aber so funktioniert Thift momentan für alle unterstützten Sprachen) den man dann importieren kann und mit dem man dann auf HBase schneller als mittels REST zugreifen kann.
Insgesamt hat mich momentan HBase von der Performance nicht überzeugen können, aber ich gabe zu dass ich erstens noch wenig damit gemacht habe und zweitens Hadoop für etwas größere Dienste ausgelegt ist, wo man Datenbanken clustert und wo relationale Datenbanken an ihre Grenzen stoßen. Nichtsdestotrotz ist es recht interessant und wert, im Auge bahalten zu werden.
Hmm, ich denke dass es schon auch irgendwie nett wäre, ein Cluster aufzusetzen und die GAE mit den vorhandenen Werkzeugen zu kopieren.
