Monolith vs Micro Services – “Back to the future with modular monoliths”

Luca-Max Baur

In der Softwareentwicklung stehen Software- und Systemarchitekten heutzutage oft vor der Entscheidung zwischen einem monolithischen Aufbau oder Microservices. In diesem Blogpost wird erläutert, was ein Monolith und Microservice sind und welche Vor- und Nachteilen diese mit sich bringen. Zudem wird ein Blick in die Wirtschaft gewagt, um den aktuellen Trend zu analysieren, sodass die Frage beantwortet werden kann, ob modulare Monolithen die Zukunft aus der Vergangenheit sind.

Monolithische Architektur

Ein Monolith in der Natur wird oft als großes, massives und unteilbares Gestein bezeichnet. Diese Eigenschaften besitzen auch monolithische Architekturen in der Softwareentwicklung.

Ein monolithisches System charakterisiert sich dadurch, dass sämtliche Komponenten und Funktionen innerhalb einer einzigen zusammenhängenden Codebasis implementiert sind. Komponenten wie Benutzeroberfläche, Anwendungslogik oder Datenbankzugriffe sind eng miteinander verknüpft und agieren als eine Einheit.[1]

Dies bietet einige Vor- und Nachteile. Bei weniger komplexen Anwendungen ist eine monolithische Architektur übersichtlich und bietet eine hohe Performance, da alle Aufrufe zwischen den Komponenten direkt erfolgen und keine Netzwerklatenz entsteht.[2] Zudem ist die Software „self-contained“[3], was die Sicherheitsmaßnahmen einschränkt und die Software besser testbar macht.[4] Bei steigender Komplexität, kann die Codebasis jedoch sehr schnell sehr groß werden. Die Weiterentwicklung der Anwendung wird bei steigender Komplexität exponentiell zeit- und somit auch kostenintensiv. Dieser Aspekt verleitete einige Unternehmen Anfang der 2010er Jahre zu Microservices zu wechseln. Netflix, Amazon oder Facebook sind die bekanntesten Beispiele.[5]

Microservices

Im Gegensatz zur monolithischen Architektur basieren Microservice-Architekturen auf mehreren kleinen, unabhängigen Diensten – daher auch der Name „Microservices“. Diese Dienste oder auch Services sind eigenständig und kommunizieren über leichtgewichtige Mechanismen wie API. Die einzelnen Dienste separieren spezifische Funktionen, wie zum Beispiel Benutzeroberflächen oder Datenbankzugriffe. [6]

Microservices bieten mehr Flexibilität und Skalierbarkeit als ein rein monolithischer Ansatz, da die einzelnen Dienste unabhängig voneinander weiterentwickelt werden können. So können bei großen Anwendungen das Prinzip des Continuous Integration angewendet werden, um schneller und effektiver Updates zu releasen, da nicht das gesamte System angepasst werden muss.[7] Zudem bieten Microservices mehr Toleranz für den Benutzer, da nur einzelne Funktionen bei einem Ausfall betroffen sind und nicht das ganze System zusammenbricht.[8]

Auf der anderen Seite bringen Microservices auch Herausforderungen mit sich. Eine verteilte Datenspeicherung erhöht die Komplexität der Anwendung, wodurch auch das Testen aufwendiger wird. Im Vergleich zu monolithischen Architekturen, benötigen Microservices einen hohen Ressourcen verbrauch hinsichtlich Netzwerk- und Rechenleistung. Dieser erhöhte Ressourcenverbrauch muss jedoch immer im Kontext der Anwendungsgröße betrachtet werden.[9]

Blick in die Wirtschaft

Wie bereits angedeutet vollbrachten viele große Unternehmen die Migration zu Microservices, jedoch nicht alle mit dem erwünschten Erfolg. Amazon Prime Video ist eines davon. Amazon arbeitete mit AWS-step-functions und Lambda Funktionen, welches eine schnelle Entwicklung ermöglichte. Häufige Statusübergänge der step-functions führten zu enormen Kosten. So entschied sich Amazon Prime Video zu einer Migration zurück zu einer monolithischen Architektur. Die direkte Datenverarbeitung im Speicher erwies sich als kosteneffizienter als eine externe Speicherlösung, sodass die Umstellung zu einer Kostenreduktion von 90% führte.[10]

Andere Unternehmen wie Istio[11], Segment[12] oder InVision[13] hatten ähnliche Probleme, welche mit einer Migration zurück zu Monolithen behoben werden konnten.[14] Als Reaktion durch die Probleme von Microservices und herkömmlicher Monolithen entstanden modulare Monolithen als Hybridlösung. Sie kombinieren die Vorteile beider Architekturen, indem sie eine einheitliche Codebasis wie bei konventionellen Monolithen benutzen. Innerhalb des Monoliths wird jedoch mit klar abgegrenzten Modulen gearbeitet, die wie bei Microservices über APIs kommunizieren. Die Physischen grenzen der jeweiligen Deployments von Microservice werden somit in logische Grenzen zwischen den Modulen umgewandelt.[15]

In den letzten Jahren ist die Präsenz von modularen Monolithen in der Wirtschaft immer deutlicher geworden. Besonders durch das Open-Source-Framework „Service Weaver“ von Google trägt dazu bei, da das Framework die Implementierung von modulare Monolithen ermöglicht.[16]
Heutzutage setzen Unternehmen wie Shopify[17], Appsmith, Gusto und PlayTech erfolgreich auf modulare Monolithe.[18] Jedoch ist eine Migration zu modularen Monolithen sehr spezifisch und nicht für alle Use Cases und Unternehmen sinnvoll. Daher stellt sich die Frage, ob der Trend weiter in Richtung modulare Monolithen geht oder ob dieser Lösungsansatz wieder zurück zu Microservices geht. Letzten Endes sehen modulare Monolithen nach dem aktuellen wissenschaftlichen Stand zuversichtlich aus, dennoch wird die Zukunft sagen, welche Architektur sich auf Dauer durchsetzen wird.  


[1]  Vgl. https://builtbright.io/de/lexikon/monolith/ (Zugriff am 12.02.2025)

[2] Vgl. https://www.studysmarter.de/ausbildung/ausbildung-in-it/fachinformatiker-anwendungsentwicklung/monolithische-architektur/ (Zugriff am 12.02.2025)

[3] Anwendung, bei der alle notwendigen Komponenten in sich vereint. Sie benötigt keine externen Systeme oder Abhängigkeiten, um lauffähig zu sein (Zugriff am 12.02.2025)

[4] https://www.agile-academy.com/en/agile-dictionary/monolithic-architecture/ (Zugriff am 13.02.2025)

[5] https://www.f5.com/company/blog/nginx/microservices-at-netflix-architectural-best-practices (Zugriff am 13.02.2025)

[6] Vgl. https://www.thoughtworks.com/insights/blog/microservices-nutshell (Zugriff am 19.02.2025)

[7] Vgl. https://martinfowler.com/articles/continuousIntegration.html (Zugriff am 19.02.2025)

[8] Vgl. “Architectural Patterns for Microservices: A Systematic Mapping Study“  https://www.scitepress.org/papers/2018/67983/67983.pdf S.221 (Zugriff am 20.02.2025)

[9] Vgl. „The Pains and Gains of Microservices: A Systematic Grey Literature Review“, https://www.researchgate.net/publication/327923070_The_Pains_and_Gains_of_Microservices_A_Systematic_Grey_Literature_Review (Zugriff am 20.02.2025)

[10] https://web.archive.org/web/20240223075245/https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90 (Zugriff am 24.02.2025)

[11] https://blog.christianposta.com/microservices/istio-as-an-example-of-when-not-to-do-microservices/ (Zugriff am 24.02.2025)

[12] https://segment.com/blog/goodbye-microservices/ (Zugriff am 24.02.2025)

[13] https://www.bennadel.com/blog/3944-why-ive-been-merging-microservices-back-into-the-monolith-at-invision.htm (Zugriff am 24.02.2025)

[14]  Vgl. „Back to the Future: From Microservice to Monolith“ https://arxiv.org/abs/2308.15281 (Zugriff am 25.02.2025)

[15] Vgl. https://www.milanjovanovic.tech/blog/what-is-a-modular-monolith (Zugriff am 25.02.2025)

[16] https://opensource.googleblog.com/2023/03/introducing-service-weaver-framework-for-writing-distributed-applications.html (Zugriff am 25.02.2025)

[17] https://shopify.engineering/deconstructing-monolith-designing-software-maximizes-developer-productivity# (Zugriff am 26.02.2025)

[18] „Modular Monolith: Is This the Trend in Software Architecture?“ https://dl.acm.org/doi/pdf/10.1145/3643657.3643911(Zugriff am 26.02.2025)

Comments

Leave a Reply