am 20. Oktober 2009
Auf der PHP Unconference in Hamburg hatte ich ein sehr nettes Gespräch mit Lars Jankowskfy über den Oxid Shop und die Kritiken, die “derzeit” (ist schon ein paar Wochen her) eintreffen. Im Kern unseres Gespräches ging es darum, ob man eine gute Architektur aufbrechen darf, um Performance zu gewinnen. Und genau diese Frage möchte ich heute für mich beantworten.
Als Lars mich darauf angesprochen hat, war ich der festen Überzeugung, da schon eine Meinung zu haben, denn an der Uni wurde mir diese Meinung auch eingeprägt. Aber vielleicht lasse ich erstmal meine ersten Gedanken auf euch los und dann schaue ich mal wie man das anpassen kann.
Wenn ich ein großes Projekt starte, sagen wir mal ich möchte die Webseite von www.heise.de neu machen, dann würde ich mit einer sauberen Architektur anfangen und niemand dürfe gegen die Richtlinien verstoßen. Wenn wir an ein großes Bottleneck stoßen und absolut keine saubere Lösung finden, dann würden wir einen zusätzlichen Server hinstellen, um die Lastspitzen zu kompensieren. Ich habe nicht wirklich etwas gegen das Aufbrechen von Richtlinien, aber die Wartung des gesamten Systems wird immer schwieriger. Irgendwo kann man auch nachlesen, dass 80% der Kosten eines Projektes in der Wartung stecken. Und rechnet man mal hoch, dann ist ein Entwickler um einiges teurer, als ein Server, den man irgendwo hinstellt. Server werden auch in kürzeren Zeiträumen schneller, als das Entwickler effizienter werden. Das muss natürlich alles überschaubar bleiben. Das System mit Servern zuschütten, kann nicht die Lösung sein, aber das muss es auch nicht, wenn die Architektur gut durchdacht ist.
In diesem Fall würde ich mich also genau gegen die Vorgehensweise von Oxid stellen. Da ich aber viel von Lars halte, wollte ich mir da doch ein paar merh Gedaken drüber machen. Kann man die ich oben über “mein” Projekt habe, auf Oxid mappen? Nein.
Nehmen wir mal an, wir haben ein Shopsystem, dieses System muss die Datenbank bei großen Datenmengen denormalisieren, damit es noch läuft. Wäre es mein System, dann würde ich es auf zweit Datenbanken verteilen. Wer kauft aber ein Shopsystem, bei dem man bereits weiß, dass es zwei Server “verschwendet”? Niemand. Besonders, wenn andere Anbieter es mit einem können. Mir ist es auch egal, ob die Wartung teuer ist, ich werde mich ja nur in den Templates aufhalten. Mir als “Endkunde” geht es also nicht um die tolle Architektur und genau aus diesem Grund, werde ich dafür auch nicht zahlen. Will ich also im Rennen mit meinem Produkt bleiben, dann kann ich mein System architektonisch so aufblähen, dass mir die Kunden wegrennen. Diese Optimierung durch Aufbrechen der Struktur muss in diesen Fällen natürlich sehr gut dokumentiert sein und darf einem Entwickler nicht immer wieder zufällig über den Weg laufen.
Wir müssen also entscheiden, was für ein Projekt wir starten. Ist es ein lokales Projekt und bin ich somit der einzige Anwender, dann würde ich alles dafür tun, möglichst wenig Wartung und Erweiterbarkeit zu schaffen. Muss ich Produkt auf dem Markt positionieren, dann ist das Ziel möglichst viele Einheiten zu verkaufen. Hier sollte ich drauf achten, dass das System auf handelsüblichen Maschinen läuft.
Ach ja, was ich noch dazu sagen wollte. Ich habe keine Ahnung, ob der Oxid Shop an mehr als einer Stelle die Architektur aufgebrochen hat. Ich habe ihn nur als ein Beispiel genommen, da ich weiß, dass er vor kurzem im Gespräch war.