Disassembling the monolith

Geschrieben am 21.09.2021

* Microservices in der Cloud betreiben *

Seit etwa 5 Jahren transferiert sich die (so ziemlich) gesamte IT Welt in die Cloud. Und weil es nicht damit getan ist,  die bestehenden Monolithen in Cloud-VMs zu betreiben, geht ein Paradigmenwechsel der IT-Architektur damit einher.

  • Aber warum?
  • Was ist passiert?
  • Was ist jetzt besser als in den 2000'er Jahren?
  • Aber...

 

* Microservices in der Cloud betreiben *

Seit etwa 5 Jahren transferiert sich die (so ziemlich) gesamte IT Welt in die Cloud. Und weil es nicht damit getan ist,  die bestehenden Monolithen in Cloud-VMs zu betreiben, geht ein Paradigmenwechsel der IT-Architektur damit einher.

Aber warum?

Wer schon in den 2000'er Jahren in der Softwareentwicklung beschäftigt war, erinnert sich dass die Java-Monolithen eine gefeierte Errungenschaft waren. Endlich war die Komplexität aus der Systemverteilung verschwunden und alles an einem Ort gebündelt. Der modulare Aufbau von Java, dessen einfacher Syntax und dynamische Linkfähigkeiten, auch "Write once run everywhere" ermöglichten es damals Systeme zu beherrschen die weit komplexer waren als bisherige C/C++ Systeme.

Was ist passiert?

Naja, die Softwaresysteme wurden immer umfangreicher, Wiederverwendung wurde aufgrund der schieren Masse vom Segen zum Fluch, häufigere Deployments wurden nötig weil sich die Anforderungen immer schneller veränderten. Und technisch wurden die Workspaces teilweise so groß, dass sie mit gängiger PC-Technik nicht mehr entwickelbar waren. Außerdem entwickelten Giganten wie Google, Facebook und Amazon Systeme, die unfassbar umfangreich, trotzdem wartbar, responsiv und betreibbar sein mussten, so dass die monolithische Architektur gesprengt wurde (und von Seiten dieser Konzerne erheblich Grundlagenforschung betrieben und veröffentlicht wurde).

Was ist jetzt besser als in den 2000'er Jahren?

Nun schaffen wir die Monolithen also ab und bauen wieder verteilte System, wie früher. Warum ist das jetzt besser? Wie so oft in der Technik, hat die Standardisierung hier Wunder bewirkt. Während die Systemverteilung früher durch extrem heterogene Technologien bestritten wurde, haben sich hier inzwischen Standards etabliert. Früher gab es bis auf die physikalische Ebene Differenzen (Ethernet vs. Token Ring etc.) ganz zu schweigen von Betriebssystemen, Protokollen und Syntax. Heute hat man sich hier weitgehend auf Standards verständigt. Alle (so ziemlich) machen Unix, Ethernet, TCP/IP, HTTP, REST, JSON, OAuth2. Vorbei sind die Zeiten von fiesen Techniken wie Remote Java Beans, SOAP, Rendezvous, DCOM etc. Außerdem bieten Sprachen/Frameworks wie Spring Boot, Node, GoLang etc. inzwischen fertige "Templates" um diesen Stack im Handumdrehen umzusetzen. Mit Spring Boot und IntelliJ dauert es keine 15 Minuten mehr einen REST-Backend-Service in eine Cloud zu deployen und produktiv zu betreiben.

Auch im Betrieb hat sich ein Standard durchgesetzt, nämlich Docker auf Linux. Dank dieser Standardisierung kann ich Microservices "sofort" und ohne Betriebsabteilung in Produktion nehmen, aka "DevOps". Die Kosten für den IT-Betrieb haben sich dadurch gebruchteilt. Da alle diese Technologien (bzw. deren Implementierungen) OpenSource sind herrscht hier auch kein Wettbewerb mehr.

Zuletzt überzeugt der günstige und schnelle Service von Anbietern wie AWS, Azure, GKE etc. den Umstieg vom Monolithen zum de-komponierten System in der Cloud endlich anzugehen.

Aber...

Denken Sie nicht, die Komplexität Ihres Systems würde sich reduzieren. Ein System mit X Funktionspunkten hat auch zerlegt noch dieselbe Komplexität. Es wird sich aber in besserem / leichteren / günstigerer Betrieb, Wartung, Recruitment, Deployment, Stabilität, Sicherheit und Weiterentwicklung auszahlen.