Microservices vs. Monolithen

Wenn wir über AWS Workloads lesen, dann stolpern wir schnell über Begriffe wie Serverless, Microservice Architekturen, Event-Driven Architecture, horizontale Skalierung etc.

Doch wann macht es eigentlich Sinn eine monolithische Architektur zu wählen und wann sollten wir uns für Microservices entscheiden?

Inhaltsverzeichnis

Monolithische Architekturen

Monolithische Architekturen zeichnen sich im Gegensatz zu Microservice Architekturen dadurch aus, dass die gesamte Benutzeroberfläche, der Datenzugriff und die Verarbeitung in einer einzigen Anwendung bereitgestellt werden. Bei Code-Änderungen wird die gesamte Anwendung neu deployt.

Vor allem zu Beginn eines Projektes sind monolithische Architekturen deutlich einfacher zu verwalten und zu deployen. Das Deployment beschränkt sich auf ein Deploymentartefakt.

Die Codebasis für einen Monolithen befindet sich häufig an einem Ort. Somit ist die Erstellung einer API übersichtlich und zugehörige Funktionalität kann schnell gefunden werden. Dies vereinfacht auch das Debugging.

Das Testing von monolithischen Architekturen ist einfacher, da wir ein zu testendes Artefakt haben. Netzwerkverbindungen und umfangreiche Authentifizierungsmechanismen fallen somit im Testing weg.

Bekannte monolithische Anwendungen wie GitLab oder WordPress werden seit Jahrzehnten erfolgreich (weiter)entwickelt.

Doch natürlich gibt es auch einige Nachteile bei der Verwendung einer monolithischen Architektur.

Je größer eine monolithische Anwendung wird, desto mehr technische Schulden entstehen. Die Wartbarkeit wird hierdurch enorm erschwert und die Anwendung wird fehleranfälliger.

Die Skalierung bei monolithischen Architekturen ist nicht sehr effizient. Einzelne Komponenten der Anwendung können nicht skaliert werden.

Hat eine einzelne Komponente oder ein Modul einen Fehler, kann dies zum Ausfall der gesamten Anwendung führen.

Je größer die Anwendung wird, desto aufwändiger wird es Neuheiten oder Versionsupdates von Technologiekomponenten oder Programmiersprachen umzusetzen. Weiterhin ist der gesamte Monolith häufig in einer einzelnen Programmiersprache entwickelt, was die Effizienz beeinträchtigen kann („Use the right tool for the right job„).

Nicht zuletzt führen schon kleine Anpassungen des Codes zu einem kompletten Redeployment, was sehr risikoreich sein kann.

Microservices sollen einige dieser Probleme adressieren.

Microservices

Microservices sind in sich geschlossene Komponenten, die eingeständig lauffähig sind und miteinander interagieren. Jeder Service erfüllt eine bestimmte Funktion und hat in der Regel eine eigene Datenhaltung und eine eigene Oberfläche.

Diese Eigenschaften bringen diverse Vorteile gegenüber einer monolithischen Architektur.

Die einzelnen Microservices können von unterschiedlichen Teams entwickelt werden, welche jeweils eigene Releasezyklen verfolgen können und unabhängig von einander ihren Microservice in Betrieb bringen können.

Hierdurch kann auch das Deployment von Kleinständerungen regelmäßiger durchgeführt werden. Netflix treibt dies mit einer Continous Deployment Pipeline auf die Spitze. Hier wird jede Änderung automatisiert bis in die Produktionsumgebung gebracht.

Jeder Microservice kann unabhängig von anderen Microservices skalieren. Dies ermöglicht eine höhere Effizienz bei der Ressourcennutzung und dadurch weniger Verschwendung und geringere Kosten.

Beim Testing kann jeder Microservice einzeln getestet werden. Die Wartbarkeit steigt, da die Komplexität innerhalb eines Microservices überschaubar ist. Außerdem ist es auch möglich einzelne Services komplett neu zu entwickeln.

Jeder Microservice kann die Technologien nutzen, die für das jeweilige Nutzungsszenario optimal sind. Das einzige Limit ist hierbei das Know-How des Teams.

Dadurch, dass Microservices nur eine bestimmte Funktion (z.B. Warenkorb) erfüllen, hat ein Ausfall eines Services nur einen Ausfall einer einzelnen Komponente zur Folge. Die restliche Anwendung bleibt weiterhin erreichbar.

Doch leider sind auch Microservice Architekturen nicht perfekt.

Durch die Eigenständigkeit und Unabhängigkeit der Teams kann die Technologiefreiheit zu einem Wildwuchs an Technologien führen.

Es kann außerdem dazu führen, dass das „Große Ganze“ durch die Fokussierung auf wenige Services aus dem Blick gerät.

Bei der Verwendung von Microservices müssen auf organisatorischer Ebene neue Austauschformate entwickelt werden, um gemeinsam Standards, Zuständigkeiten und Schnittstellen zu definieren.

Wenn die Services komplett eigenständig betrieben werden fallen höhere Kosten für die Grundinfrastruktur an, wenn diese nicht mehr geteilt werden.

Microservices haben Abhängigkeiten untereinander. Es können Fehler bei der Netzwerkverbindung zwischen den Services auftreten. Einzelne Transaktionen verteilen sich über mehrere Microservices.

All dies führt dazu, dass Microservices schwer zu betreiben sind. Vor allem die Überwachung und Fehleranalyse kann eine Herausforderung werden.

Fazit

Abhängig von der Erfahrung des Betriebs- und Entwicklungsteams macht es durchaus Sinn bei einer Neuentwicklung erst mit einer monolithischen Architektur zu beginnen. Dies beschleunigt den Entwicklungsprozess und vereinfacht den Betrieb.

Der Monolith sollte jedoch so konzipiert sein, dass es im Nachhinein einfach ist einzelne Teile herauszulösen. Dies ermöglicht die schrittweise Überführung in eine Cloud-optimierte Architektur.

Hierdurch können die Vorteile aus beiden Architekturmustern genutzt werden. Erfahrene Teams können durchaus schon mit einer reinen Microservice Architektur beginnen. Dies eignet sich vor allem bei größeren und erfahreneren Teams. Wichtig ist hierbei, dass die Services korrekt anhand der fachlichen Anforderungen zugeschnitten sind (Service Boundaries).

Egal wie ausgereift deine Cloud-Infrastruktur und dein Wissen ist, so können wir dich unterstützen:

Du bist gerade noch am Anfang deiner Cloud-Reise und möchtest dich erst einmal informieren? Dann schau unbedingt in unserem Wissenszentrum vorbei!

Du möchtest wissen, wie wir dich konkret weiterbringen können? Dann empfehlen ich dir einen Blick auf unsere Dienstleistungen!

Du möchtest mit uns Kontakt aufnehmen und unsere Einschätzung zu deiner Cloud-Infrastruktur haben? Verlier keine Zeit und buche jetzt deinen Termin für ein Erstgespräch – kostenlos und ohne Kleingedrucktes.

Picture of Hendric Jabs
Hendric Jabs
Ich bin Wirtschaftsinformatiker (M. Sc.) und AWS Cloud Solutions Architect. Seit 2014 beschäftige ich mich leidenschaftlich mit Amazon Web Services und habe bereits seit 2015 einer Vielzahl von Kunden zu einer erfolgreichen Cloud Nutzung verholfen. Im Jahr 2021 habe ich für das Digital Career Institute den ersten AWS re/Start Kurs in Deutschland als leitender Dozent durchgeführt.

Verwandte Beiträge

Was ist die 7R-Klassifizierung?

Wenn man sich mit dem Thema Cloud-Migration beschäftigt, stößt man unweigerlich auf die sogenannten „7R’s“. Dieser Beitrag lüftet das Geheimnis hinter dieser hilfreichen Klassifizierung.

Weiterlesen