Archive for Mai 2011


Der LAMP Stack ist nicht tot, aber riecht… anderst

Mai 25th, 2011 — 4:48pm

Was den aktuellen Stand des LAMP Stacks angeht habe ich mir schon länger Gedanken gemacht. Dieser Tage hatte ich dann eine entsprechende Unterhaltung über genau das Thema mit meinem Kollegen, dem Karsten.

Gehen wir doch die Bestandteile mal durch:

L für Linux

Ich glaube, darüber brauchen wir uns nicht lange unterhalten. Die ein oder andere Linux Distribution wird die Grundlage für fast alle erfolgreichen Web Projekte sein.

Allerdings gibt es auch Bespiele für High Traffic Webseiten, welche auf dem Microsoft Stack basieren, wie etwa Stackoverflow. Allerdings kommt man auch bei Stackoverflow nicht ganz ohne das L aus – sei es zum Beispiel ein Caching Server auf dem Redis läuft. Auch wenn es natürlich schwer fällt, etwas gegen die sehr erfolgreiche Website zu sagen, habe ich meine Bedenken, was so eine Mischform angeht. Und sei es nur, weil man Developer und DBA braucht, die in beiden doch sehr unterschiedlichen Welten, Microsft und Unix, zu Hause sind. Als Hipster-Startup hat man da natürlich nochmal andere Möglichkeiten. Auch ist mein Eindruck, dass das horizontale Scaling mit dem klassischen LAMP Stack einfacher fällt. Stackoverflow scheint tendenziell eher vertikal skalieren zu wollen (größere/teurere statt “mehr” Hardware), zumindest wenn man sich die Entwicklung momentan ansieht.

Für mich allerdings, obwohl oder gerade weil ich auch Projekte mit IIS/C# gemacht habe, scheint ein ein UNIX basierendes System aber die bessere Wahl zu sein. Das L ist also nicht wegzudenken aus LAMP.

A für Apache

Die Wahl des Webservers war eingentlich lange Zeit keine. Apache oder… Apache. Ganz so sieht es mittlerweile nicht mehr aus.

Nginx – ein leichtgewichtiger, high-Performance http Server, welcher in den Features, die man so braucht für seine Anwendung dem Apache in wenig nachsteht. Das Modell, wie Requests im Nginx abgearbeitet werden, nämlich über eine Event Loop, unterscheidet sich dabei erheblich von dem des Apache (soviel Threads aufmachen wie nötig). Mittlerweile ist Nginx auch in der Version 1.0 stable verfügbar, wird aber schon seit längerem von diversen high Traffic Websites eingesetzt.

node.js – serverseitiges Javascript, basierend auf Goolges V8 Engine. Auch wenn das Projekt noch recht jung ist, hat node.js bereits viel Aufmerksamkeit bekommen in letzter Zeit. Zusammen mit den Pub/Sub Funktionalitäten eines Redis beispielsweise lassen sich sehr interessante Problemlösungen mit node.js finden für spezifische technische Probleme. Ich glaube nicht, dass ich meine Domain-Logik in node implementieren möchte, aber aufgrund des hohen Durchsatzes bieten sich zum Beispiel File-Upload und File-Auslieferung an, oder wie vorher erwähnt mit Redis Pub/Sub lässt sich Realtime Updating einer Website realisieren. Oder auch sehr Javascript lastige Anwendungen könnten von node als Backend profitieren.

Das A hat also Gesellschaft (node.js) oder Ersatz (Nginx) bekommen.

M für mySQL

Im Bereich der Storage Engine hat sich wohl am meisten getan in den letzten Jahren/Monaten. Eine klassische relationale Datenbank wie mySQL war lange Zeit alternativlos, obwohl sich gewisse Daten schlecht im Paradigma von RDBMS speichern lassen bzw. gewisse Funktionen wie komplexere Suchabfragen zumindest in mySQL schwer von der Hand gehen.

Für mich ist mySQL als Haupt-Storage Engine weitestgehend alternativlos, immer noch. Da es mit Doctrine 2 endlich einen brauchbaren ORM für PHP gibt, können auch komplexere Objekt-Graphen in einem RDBMS abgelegt und abgefragt werden.

Trotzdem bieten sich eben eine Vielzahl an Projekten an, um etwa gewisse Schwachstellen von RDBMS auszubügeln:

Redis – ein high-performance Datastructure Server. Man kann es sich vorstellen wie memcache on steroids. Daten können nicht nur als key-value pairs abgelegt werden, in Redis ist es auch möglich sortierte Sets, Listen mit push/pop Funktion z. B. für Queues und Hashes mit Zugriff auf die einzelnen Felder abzulegen. Sehr interessant sind auch die Pub/Sub Funktionen von Redis, die beispielsweise mit node.js in Kombination mit Websockets sehr interessante Möglichkeiten für realtime Updates in einer Website bieten. Als Bonus oben drauf gibt es seit neuestem die Möglichkeit Lua Scripte in Redis ausführen zu lassen. Da Redis auch als persistenter Daten Storage konfiguriert werden kann, ist das Projekt nicht nur als Caching Server interessant.

Solr – Apache Solr ist ein in Java geschriebener Such-Server basierend auf Lucene. Die mySQL Fulltext Search ist ja ab einer gewissen Anzahl an rows nicht mehr zu gebrauchen. Als Alternative bietet sich hier z. B. Solr an. Millionen von Dokumenten können mit hervorragender Performance durchsucht werden. Komplexe Suchabfragen werden mit der Lucene Query Language formuliert. Solr wird bequemerweise über eine REST Schnittstelle angefragt. Durch einen automatisch laufenden Daten-Import aus mySQL mit Solrs dataimport-Handler lassen sich die Dokumente im Suchindex recht einfach auf dem aktuellen Stand halten.

Riak – Riak ist eine noch recht junge noSQL Datenbank, welche auf Amazons Dynamo Paper basiert. Daten werden unter einem key in Buckets gespeichert. Abgefragt werden die Daten genau wie bei Solr über eine REST API. Die interessante Idee an Riak bzw. an der in dem Amazon Dynamo Paper beschrieben Technik: es gibt keinen Master Server. In einem Riak Cluster, das aus mindestens 3 Nodes bestehen sollte, hat jede Node alle Daten bzw. weiß genau bei welcher Node die angefragen Daten liegen. Zur Laufzeit können problemlos Nodes aus dem Cluster entfernt werden oder bei Traffic Peaks zum Cluster hinzugefügt werden. Darüber hinaus kann man über die REST API Map/Reduce Jobs über die gespeicherten Daten laufen lassen. Die Performance der Map/Reduce Jobs konnte mich zwar noch nicht überzeugen, weswegen ich Riak weniger als Daten-Store sehe, auf den Realtime Abfragen gemacht werden. Allerdings kann ich mir Riak sehr gut als eine Art verteiltes Dateisystem vorstellen, in dem Daten auf mehreren Nodes abgelegt werden und z. B. über node.js dann wieder ausgeliefert.

Vor allem auch den noSQL Trend hat sich viel getan im Bereich Datenbanken. mySQL hat denke ich immer noch seinen festen Platz in den allermeisten Projekten, und das auch zu Recht. Aber man darf die oben genannten Projekte nicht vergessen, die meistens eine sinnvolle Ergänzung darstellen können und in manchen Bereichen mySQL tatsächlich ersetzen können.

P für PHP

Im Bereich der tatsächlichen Programming Language in der Webapplikationen geschrieben werden haben sich aus meiner Sicht die wenigsten Änderungen ergeben. PHP ist für mich nach wie vor die Sprache der Wahl, wenn es um dynamische Web Anwendungen geht. PHP bietet nicht die beste Performance, nicht die stringenteste API und nicht die allerbesten Bibliotheken – aber es funktioniert einfach und es gibt genügend Leute, die damit auch sehr gut programmieren können. Das kann man ja nicht von allen Sprachen behaupten. Eine mögliche Alternative könnte vielleicht ein anderes P darstellen – Python. Die Zeit wird zeigen ob Python einen ähnlichen Verbreitungsgrad wie PHP finden kann, auch gibt es gewisse Ansätze in Python, über die sich diskutieren lässt. Ducktyping ist nur eins davon.

Zusammenfassung

Diese kleine Übersicht zeigt, dass Webdevelopment mittlerweile weit über den bis vor gar nicht allzu langer Zeit klar definierten LAMP Stack hinausgeht. Viele Technologien bieten sich als Ergänzung zu Bewährtem an (Redis als Caching Server, mySQL immer noch als Haupt-Storage Engine) oder auch als Ersatz (nginx statt Apache).

Es ist auf jeden Fall eine aufregende Zeit für Developer und viele Applikationen, die bisher nicht denkbar waren im Webumfeld sind mit den erwähnten oder ähnlichen Technologien machbar – wenn man die Alternativen kennt und sich genau überlegt, wie man seinen LAMP Stack sinnvoll ergänzen kann.

Comment » | Allgemein, Development

Back to top