2011 wurde von den Entwicklern beim PaaS-Betreiber Heroku ein Regelwerk entwickelt, an das sich Applikationen halten sollen, wenn sie für den Betrieb in der Cloud optimal vorbereitet sein wollen: Die Twelve-Factor App Methode. Es handelt sich um 12 Richtlinien, die gesammelte Best Practices und Wissen aus jahrelangem Betrieb ihrer eigenen Plattform zusammenfassen. Als Ziele wurde sich gesteckt, die Kommunikation mit dem Betriebssystem zu standardisieren und die Cloud als Plattform nutzbar zu machen. Dadurch kann gleichzeitig auch ein ganzes Stück Skalierbarkeit erreicht werden. Diese Regeln zur Twelve-Factor App veröffentlichten sie unter der Adresse https://12factor.net.
Regeln, die von einem Cloud-Anbieter für Applikationen entworfen wurden, damit diese besonders gut auf Cloud-Plattformen funktionieren? Als Entwickler klassischer On-Premise-Lösungen braucht einen das ja nicht zu interessieren, oder? Dem kann man ganz gezielt widersprechen: Bei diesen Regeln haben sich erfahrene Entwickler zusammengesetzt und ihre geteilte Erfahrung verschriftlicht. Wir haben es hier mit destilliertem Wissen zu tun, welches sich agnostisch gegenüber eingesetzten Technologien und Hostinglösungen positioniert. Es wurde vielmehr Wert auf eine größere Flughöhe und allgemeine Struktur der Applikationsarchitektur und Herangehensweise bei der Softwareentwicklung gelegt, sodass dieses Regelwerk auch noch in weiteren zehn Jahren nichts an seiner Gültigkeit verlieren wird.
Was haben denn Monolithen damit zu tun?
Gestehen wir uns ein: die klassische On-Premise-Applikation ist ein Monolith, besteht aus einem Artefakt und wird auf einem, manchmal auch mehreren Servern ausgerollt und mittels Load Balancer oder Reverse Proxy mit dem Netzwerk verbunden. Daran ist auch nichts falsch, funktioniert diese Vorgehensweise doch schon seit Jahrzehnten hervorragend.
Der Unterschied nur zur Cloud-Applikation ist, dass die Laufzeitumgebung eines Monolithen oft „handgestrickt“, also, oftmals manuell, genau so hergerichtet ist, dass die Applikation betrieben werden kann. Das kann dann von Serverkonfigurationen über extra eingerichtete Firewallkonfigurationen bis hin zu korrekt eingebunden Netzlaufwerken reichen. Diese exakte Konfiguration der Laufzeitumgebung wird von der Applikation eingefordert, sonst ist sie nicht lauffähig.
Cloudanwendungen hingegen müssen da deutlich abgekapselter sein, kann es doch sein, dass sie morgen in einem komplett anderen Rechenzentrum ausgeführt werden, oder mehrfach nebeneinander gestartet werden. Zusätzlich werden sie oftmals aus mehreren unterschiedlichen Artefakten konstruiert, die untereinander verbunden sind und unabhängig voneinander ausgerollt werden.
Doch konzentriert man sich auf das Wesentliche, werden Cloudanwendungen aus mehreren „Monolithen“ aufgebaut, sind grob gesehen also genau das Gleiche. Gelten somit die für Cloudanwendungen gedachten Faktoren auch uneingeschränkt für klassiche Applikationen? Schauen wir mal: