Smart Commerce
eCommerce01.06.2024

Monolithen vs. Microservices - Whitepaper

Laden Sie jetzt unseren informativen Content herunter und lassen Sie sich inspirieren – es könnte der erste Schritt zu Ihrem nächsten Erfolg sein!

Patrick Lorenz
Patrick LorenzHead of Frontend Development

Im eCommerce dominieren monolithische Middleware-Lösungen den Markt. Doch bei monolithischen Anwendungen nimmt der Entwicklungsumfang mit der Zeit zu. Infolgedessen wächst nicht nur die Codebasis, sondern auch die Komplexität. Eine agile Entwicklung und schnelle Bereitstellung werden so zu echten Herausforderungen. Um diese zu lösen, wandeln einige Unternehmen ihre monolithische Middleware in individuelle Microservices um. In diesem Whitepaper erhalten Sie einen umfassenden Leitfaden zu Architekturvorteilen, Migrationsstrategien, Tools und Technologien.

1. State of the Art eCommerce Architekturen

Im eCommerce dominieren monolithische Middleware-Lösungen den Markt. So hilft bspw. die SAP Commerce Cloud Unternehmen, Kosten zu senken, Zeit zu sparen und Komplexität zu reduzieren, um ein hervorragendes Kundenerlebnis zu generieren. Doch bei monolithischen Anwendungen nimmt der Entwicklungsumfang mit der Zeit zu. Infolgedessen wächst nicht nur die Codebasis, sondern auch die Komplexität, wodurch sich Prozesse mühsamer gestalten.

Um diese zu lösen, wandeln einige Unternehmen ihre monolithische Middleware in individuelle Microservices um. Die Microservice-Architektur lässt sich einfach testen, warten und ist eine lose gekoppelte Lösung, bei der jeder Service autonom bereitgestellt werden kann. Sie besitzt zudem den Vorteil, dass sie sich an den Business Capabilities eines Unternehmens orientiert.

1.1 Monolithische Struktur

Die monolithische Architektur galt jahrelang als das traditionelle Softwaredesign. Denn auch wenn beide Ansätze etwa gleichalt sind, überwogen beim Microservices-Ansatz für lange Zeit die Nachteile die Vorteile. Von potenziellen Veränderungen unabhängig wird ein Monolith häufig exhaustiv bereitgestellt. In Monolithen wird alles in einer Codebasis konstituiert. In den meisten Fällen setzen sie sich aus drei Bestandteilen zusammen:

  • Präsentationsschicht
  • Geschäftslogik-Schicht
  • Datenbank

1.2 Microservices

Microservices ermöglichen als Architekturmuster den Aufbau einer Gruppe von lose gekoppelten Services. Diese sind logisch und physisch getrennt und jeder einzelne Service hält das Single-Responsibility-Prinzip ein. Das wiederum ermöglicht parallele Entwicklung, Testing und unabhängige sowie kontinuierliche Bereitstellung. Jeder einzelne Microservice lässt sich individuell skalieren. Während monolithische Anwendungen eine einzige logische Datenbank für persistente Daten verwenden, verfügen Microservice-Architekturen über ein dezentrales Datenmanagement. Die Grenzen einzelner Microservices werden von individuellen Bounded Contexts definiert.

2. Migrationsstrategie

Welche Migrationsstrategien eignen sich, um Monolithen in Microservices zu segmentieren? Diese Frage bezieht nicht nur die Codebasis ein, sondern betrifft auch die Aufteilung der Datenhaltung. Denn die dezentrale Datenhaltung ist eines der Hauptmerkmale der Microservice-Architektur und jeder einzelne Service sollte über eine eigene Datenhaltung verfügen.

2.1 Aufspalten der Monolithen

Für den Erfolg des Prozesses ist entscheidend, dass die neue extrahierte Funktion genauso funktioniert wie jene im Monolithen. Es ist deshalb wichtig, die Entwicklung im Monolithen so weit wie möglich einzuschränken, bevor neue Services extrahiert werden können. Durch die Extraktion von Business Capabilities entsteht eine stabile Microservice-Architektur, in der die Services lose miteinander gekoppelt sind.

  • Die Entwicklungsteams sollten funktionsübergreifend agieren
  • Sie sollten ein tiefes Verständnis für das gesamte Geschäft haben
  • Sich auf die Bereitstellung von Business Value statt auf technische Funktionen konzentrieren

Eine alternative Möglichkeit besteht darin, Services gemäss den Subdomänen des Domain-Driven Designs zu extrahieren. Dabei wird das Domänenmodell in einzelne Subdomänen aufgeteilt. Nach dieser Strategie empfiehlt sich eine Hierarchisierung nach Änderungsnotwendigkeit. Zunächst sollten die einfachen Edge-Services entkoppelt werden. Anschliessend werden andere Services, die tiefer im Monolithen verankert sind, extrahiert.

2.1.2 Das Strangler Fig Application Pattern

Gegenüber der vollständigen Substitution eines Systems findet durch die Strangler-Fig-Anwendung eine inkrementelle Migration bei gleichzeitiger Nutzung des bestehenden Monolithen zur Risikominderung und schnelleren Auslieferung von Funktionalitäten statt. Die Umsetzung des Musters erfolgt in drei Schritten:

  1. 1Zunächst müssen die Funktionalitäten, die migriert werden sollen, im bestehenden Monolithen identifiziert werden.
  2. 2Anschliessend müssen diese Funktionalitäten im neuen Microservice implementiert werden.
  3. 3Sobald die neue Funktionalität einsatzbereit ist, sollten Aufrufe vom Monolithen auf den neuen Microservice umgeleitet werden.

2.1.3 Parallel Run Pattern

Zusätzlich wird ein parallellaufendes Muster angewandt, um Leistungsvergleiche zwischen der neuen und der monolithischen Funktionalität ziehen zu können. Ausserdem ermöglicht dies die Reaktionszeit sowie Fehlerquoten zu ermitteln. Das parallele Muster erkennt nur eine Quelle als Wahrheit an, auch wenn es beide Funktionalitäten aufruft und die Ergebnisse gegenüberstellt. Bis die neue Implementierung ihre Zuverlässigkeit beweist, wird dies die monolithische sein.

2.2 Datenbankmigration

Während Unternehmen oft eine einzelne Datenbank für eine Reihe von Anwendungen bevorzugen, präferieren monolithische Anwendungen eine einzige logische Datenbank für persistente Daten. Microservices stellen einen Gegensatz dazu dar, weil hier idealerweise jeder Dienst seine eigene Datenhaltung verwaltet. Es gibt verschiedene Muster und Methoden:

  • Shared Database Pattern: Mehrere Microservices können bei gemeinsam genutzten Datenbankmustern dieselbe Datenbank als Quelle der Wahrheit nutzen. Eine gemeinsam genutzte Datenbank zeigt starke Konsistenz und ist schnell bei der Datenmigration.
  • Database View: Eine Datenbank-View kann als Resultat für eine gespeicherte Abfrage interpretiert werden. Dadurch kann kontrolliert werden, welche Informationen geteilt und welche versteckt werden sollen.
  • Database Wrapping Service: Die Database wird hinter einem Service versteckt, der als Ummantelung fungiert und Datenbankabhängigkeiten in Serviceabhängigkeiten umwandelt.
  • Split Table: Die Split Table Methode ordnet die vertikale Anordnung in Tabellenspalten in eine oder mehrere Tabellen um.

3. Tools und Technologien

Für den Aufbau von Microservices können verschiedene Technologien und Betriebsumgebungen eingesetzt werden:

  • Spring Boot: Der de facto Standard für Java-Microservices. Das eingebettete Servermodell bietet den Vorteil, dass kein Server in der Bereitstellungsumgebung vorinstalliert werden muss.
  • Docker: Eine offene Plattform für die Entwicklung, Bereitstellung und Ausführung von Anwendungen. Docker vermag, Microservices zu containerisieren und deren Bereitstellung zu vereinfachen.
  • REST API: Web-APIs, die dem Architekturstil Representational State Transfer entsprechen. APIs müssen über eine klar definierte Semantik und Versionsschemata verfügen.
  • Keycloak: Eine Open Source Identity und Access Management Solution für moderne Anwendungen mit Single-Sign-On und Single-Sign-Out.
  • Scientist: Ein Open-source Framework von Github zum Testen von Produktionsdaten und Verhalten.
  • Cronjob Service: Für die kontinuierliche und wiederholte Ausführung von Aufgaben zu bestimmten Zeitpunkten.

4. Vor- und Nachteile der Architekturen

4.1 Vorteile von Microservices

Basierend auf Tests und eigenen Projekten zeigen Microservices folgende Vorteile: 1. Bereitstellung - Microservices versetzen uns in die Lage, schnell neue Werte zu liefern. Die vollständige Extraktion der am meisten genutzten Services trägt dazu bei, den Monolithen zu entlasten. 2. Skalierung - Entwickler-Teams durchdringen die Domäne substantiell und erwerben bessere Fähigkeiten im Migrationsprozess.

4.2 Herausforderungen bei der Zerlegung

Die Handhabung und Durchdringung von Monolithen angesichts ihrer grossen Komplexität und die zentrale Entscheidung darüber, welche Services extrahiert werden sollen, stellen grosse Herausforderungen dar. Eng gekoppelte Domänenmodelle können zu einem hybriden Konstrukt führen, das die Nachteile beider Architekturen besitzt. Daher empfehlen wir, den Migrationsprozess nur schrittweise mit kleinen Teilen des Monolithen durchzuführen und jeden neuen Service nach dem bewährten DDD-Prinzip zu entwickeln.

4.3 Hat der Einsatz von Microservices Nachteile?

Die kurze Antwort ist: Ja. Teams müssen sich mit Problemen wie Datenkonsistenz und der Synchronisierung zwischen dem Monolithen und den neu extrahierten Services beschäftigen. Je mehr Services extrahiert werden, desto komplexer wird die Kommunikation, sodass eine Latenzzeit emergiert. Tritt ein Fehler auf, ist durch den Prozessfluss bereits der Schritt herauszufinden, wo der Fehler liegt, problematisch.

4.4 Vorteile monolithischer Architekturen

Monolithen bieten klare Vorteile: 1. Einfachheit in Bereitstellung und Verwaltung - unkompliziert zu implementieren, da alle Komponenten Teil einer einzigen Plattform sind. 2. Integrierte und einheitliche Umgebung - alle Komponenten arbeiten nahtlos zusammen. 3. Kosteneffizienz (kurzfristig) - niedrigere Entwicklungs- und Bereitstellungskosten.

4.5 Nachteile der monolithischen Architektur

  • Skalierbarkeitsherausforderungen: Das Skalieren bedeutet oft, das gesamte System zu skalieren, auch wenn nur bestimmte Komponenten eine erhöhte Last bewältigen müssen.
  • Schwierigkeiten bei Updates: Da alle Komponenten eng verbunden sind, können Änderungen unbeabsichtigte Konsequenzen in anderen Bereichen haben.
  • Potenzial für systemweite Ausfälle: Ein Fehler in einer Komponente kann das gesamte System beeinträchtigen.

5. Unsere Empfehlungen für Ihr Projekt

5.1 Kostenabwägung

Vor der Entscheidung auf eine Microservice-Architektur zu migrieren, sollten Kosten und Vorteile abgewogen werden. Die Migration kann teür werden, wenn sie nicht angemessen durchgeführt wird oder unvorhergesehene Schwierigkeiten auftreten.

5.2 Fehlerresponse

Anwendungen müssen so konzipiert sein, dass sie den Ausfall einzelner Services tolerieren können. Monitoring gewährleistet ein Frühwarnsystem, wenn etwas schiefläuft.

5.3 Komplexität

Unter dem Gesichtspunkt der Komplexität steht die Kosten-Nutzenrechnung im Zentrum. Soll ein Shop nur Produkte verkaufen, ist es einfacher, mit einem Monolithen zu starten. Die Komplexität liegt am Ende bei den Monolithen im Code, bei Microservices in der Netzwerkebene.

5.4 Teamzusammenstellung

Die erfolgreiche Migration kann nur mit einem gut ausgebildeten Team durchgeführt werden. Die vertikale Aufteilung in funktionsübergreifende Teams analog zur Microservice-Struktur ermöglicht die Skalierung der Entwicklungskapazitäten. Die Entkopplung von Teams ist ebenso wichtig wie die Entkopplung von Softwaremodulen.

5.5 Fazit

Microservices bieten eine Vielzahl an Vorteilen für Unternehmen, die auf der Suche nach Flexibilität und Effizienz sind. Letztendlich kann auch ein hybrider Ansatz, der die Stärken beider Architekturen vereint, die ideale Lösung sein. Die Wahl des richtigen Ansatzes beginnt immer mit einer gründlichen Evaluation Ihrer geschäftlichen Anforderungen und technischen Kapazitäten und sollte niemals ohne die notwendige Erfahrung getroffen werden.

WhitepaperMonolithen vs. Microservices — Architekturentscheidung im eCommerce
Jetzt herunterladen