Das elfte Türchen unseres Adventskalenders!

Es ist sicher nicht übertrieben zu sagen, dass WordPress heutzutage die beliebteste Software ist, wenn man im Web veröffentlichen möchte. Ich vermeide den Ausdruck “Content Management System”, weil WordPress mehr als das ist. Es kommt einher mit einem eingebauten Modulbrowser, der es dem Nutzer erlaubt, sein eigenes Publishing-Tool in Sachen Funktion und Design sehr individuell zu gestalten. Es ist kein Geheimnis, dass diese Flexibilität ein Teil der Erfolgsformel von WordPress ist.

Ein einheitliches System warten

WordPress kann sogar seinen eigenen Quellcode updaten. Das ist aus Nutzerperspektive eine sehr gute Sache, weil du auf eine neuere Version upgraden kannst, indem du einfach einen Button auf der Verwaltungsoberfläche drückst. Standardmäßig updatet WordPress sich automatisch, wenn ein neues Bugfix Release verfügbar ist, das in Sachen Sicherheit noch besser ist, weil es keine Horde ungeschützter potentieller Botsysteme draußem im Web zurücklässt. (Angenommen der automatisierte Update Mechanismus ist an sich nicht ungeschützt, natürlich.)

Diese Updates (wie auch das Updaten aktivierte Plugins und Themes) beeinflussen den Zustand deiner Anwendung. Schließlich ändern sie direkt deinen Quellcode. Egal ob es ein automatisches Update oder ein durch Nutzer herbeigeführtes Update ist, es funktioniert gleich. Ein Update funktioniert so: Es holt eine Archivdatei von einem Remote Server ab und entpackt sie. Dann ersetzt es einfach die aktuellen Codedateien mit den Neuen mit Hilfe gewöhnlicher Dateisystemoperationen.

Während der Dateisystemoperation finden wir den Quellcode in einem inkonsistenten Zustand wieder. Das bedeutet, dass zu diesem Zeitpunkt bereits neue Dateien vorhanden sind, während andere noch ausgetauscht werden müssen. Es ist sehr wahrscheinlich, dass ein Besucher, der auf einer sich im Updateprozess befindenden Website ankommt, Fehler in der Anwendung auslöst und im schlimmsten Fall eine beschädigte Datenbank hinterlässt.

Um dieses Risiko zu umgehen, ermöglicht WordPress einen Wartungsmodus (während Core Updates), der jede Anfrage abblockt, indem es dem Besucher eine kurze Nachricht ausspielt und danach sofort den Anwendungsprozess stoppt. Plugins werden während des Update Prozesses deaktiviert.

Ein DevOps Albtraum

Mit der steigenden Beliebtheit von WordPress findest du es mehr und mehr in einem «enterprise» Kontext. (Was ein Synonym für: “große Unternehmen mit großen Entwicklungsabteilungen, die verrückte Sachen machen, die im Web sehr nachgefragt sind”.) Also selbst große Webshops werden mittlerweile auf Basis von WordPress ausgeführt.

Jetzt wäre es keine große Sache, wenn ein persönlicher Blog für ein paar Sekunden in den Wartungsmodus gesetzt wird. Aber es ist keine Option für eine große Seite mit einem Turnover von tausenden Euro jeden Tag. Oder stell dir vor, eine Service API, die vom WordPress REST Modul ausgeführt wird und auf die sich andere Services verlassen, antwortet für ein oder zwei Minuten wie folgt:

Wo Flexibilität der Zuverlässigkeit weichen muss: Drittanbieter Anwendungen von IT-Experten machen lassen für eine gute WordPress Software Qualität.

Jedes Monitoring Tool würde sofort Alarm schlagen und Leute in einigen DevOps Abteilungen da draußen würden ziemlich nervös werden.

Der Albtraum von Testern

In der professionellen Webentwicklung sind automatische Softwaretests dieser Tage weit verbreitet. Als Teil der Qualitätssicherung sollten sie einen festen Platz in jedem Release Kreislauf haben. Es ist sogar besser, wenn sie automatisiert nach jedem Commit laufen, wir nennen das Continous Integration (andauernde Integration). Wie auch immer, du machst dir das Leben als Entwickler deutlich leichter, wenn du der einfachen Regel folgst, dass du keinen Code in die Produktion schickst, der nicht getestet war.

Jetzt stelle dir eine hochfrequentierte Nachrichtenwebsite vor, bei der auf der anderen Seite dutzende Autoren am Content arbeiten. Wenn die Software ausfällt, würde das nicht nur bedeuten, dass hunderte Besucher wütend zurückgelassen werden. Sondern eben auch, dass die gesamte Autorenabteilung nicht weiterarbeiten könnte. Unnötig zu sagen, dass ein Typ aus der Verkaufsabteilung eine echte Bedrohung wird, wenn du ihn mit der Möglichkeit zurücklässt einfach noch ein anderes Sliderplugin über die Benutzeroberfläche zu installieren. (Nein, die Adminrolle zu entziehen ist in vielen Fällen keine Option.)

Also sind sowohl WordPress Features, automatische Updates als auch eine grafische Nutzeroberfläche zur Verwaltung von Komponenten so wie sie derzeit implementiert sind im Konflikt mit den grundlegenden Prinzipien von professioneller Softwareentwicklung. Bei Inpsyde schalten wir beide meistens komplett ab. Aber diese Probleme sind nicht neu. Genau genommen sind diese Features schon seit dem Tag problematisch, als man anfing die Anwendung unter Versionskontrolle zu stellen oder Composer als Package Manager zu nutzen.

Mach ein Update deines Konzepts

Wenn du ein professionelles Online Business planst und überlegst WordPress als Plattform zu verwenden,  solltest du entweder mit In-House Experten oder einem externen IT-Partner gehen. Die Möglichkeit Plugins aus einem Pool von zehntausenden “on the fly” zu installieren sollte definitv kein Grund für WordPress sein. Natürlich können Drittanbieter-Plugins ein Teil des Konzepts sein, aber nur, wenn sie durch einen angemessenen Test- und Deployment-Zyklus gehen. Lass das Bilden der Anwendungen in den Händen von Software-Experten.

Das heißt also, dass Drittanbieter-Plugins normalerweise nicht die Kosten reduzieren (“Der Code ist schon geschrieben, oder nicht?”), weil viele von ihnen scheitern, sobald du einen minimalen Qualitätsstandard wie Codequalität oder Performance-Erwartungen in größerem Umfang forderst. WordPress kann komplexe, hochfrequentierte Onlineportale, Shops und API-Services ausführen. Aber es ist auf keinen Fall günstig wenn dir Zuverlässigkeit und Performance wichtig sind.

Und Morgen gibt es einen weiteren tollen Beitrag in unserem Inpsyde Adventskalender 2017!

Antwort abgeben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.