Wann lohnt sich der Umstieg von Monolith auf Microservices wirklich? — Kodschul Wissen
Microservices & Cloud Native7 Min. Lesezeit

Wann lohnt sich der Umstieg von Monolith auf Microservices wirklich?

Direkte Antwort

Microservices lohnen sich, wenn die Teamgröße so gewachsen ist, dass mehrere Teams unabhängig voneinander deployen müssen, oder wenn einzelne Systemteile fundamental unterschiedliche Skalierungsanforderungen haben. Reine Codegröße oder das Gefühl "der Monolith ist unübersichtlich geworden" sind dagegen keine ausreichenden Gründe, weil ein unübersichtlicher Monolith als verteiltes System meist nur unübersichtlicher wird.

"

Ein Monolith mit unklaren internen Grenzen wird durch die Aufteilung in Microservices nicht klarer — er wird nur schwerer zu debuggen.

Der Wunsch nach Microservices entsteht oft aus Frustration über einen gewachsenen Monolithen, obwohl das eigentliche Problem meist mangelnde interne Modularisierung ist, die sich auch ohne Verteilung lösen lässt.

Das eigentliche Signal ist organisatorisch, nicht technisch

Der robusteste Auslöser für Microservices ist nach Conway's Law organisatorisch — mehrere Teams, die unabhängig voneinander Release-Zyklen fahren wollen, ohne sich gegenseitig zu blockieren.

Ein einzelnes Team von fünf Entwickler:innen profitiert selten von Microservices, weil der zusätzliche Koordinationsaufwand (Netzwerkkommunikation, verteiltes Debugging, mehrere Deployment-Pipelines) den Nutzen unabhängiger Releases in dieser Größenordnung meist übersteigt.

Unterschiedliche Skalierungsanforderungen als zweites valides Kriterium

Wenn ein Teil des Systems (etwa Bildverarbeitung) massiv mehr Rechenleistung braucht als der Rest (etwa Benutzerverwaltung), erlaubt die Trennung in Services, genau diesen Teil unabhängig zu skalieren, statt die gesamte Anwendung unnötig zu vervielfachen.

Ohne einen solchen konkreten Skalierungsunterschied bringt die Aufteilung selbst keinen Effizienzgewinn, nur zusätzliche Infrastrukturkomplexität. Ein oft übersehener Preis dieser Trennung: Transaktionen, die vorher eine einzige ACID-Datenbanktransaktion waren (etwa "Bestand reduzieren und Zahlung anlegen"), werden über Service-Grenzen hinweg zu verteilten Transaktionen ohne native Atomarität — das erzwingt Saga-Patterns oder Kompensationslogik, die es im Monolithen schlicht nicht braucht.

Warum "der Code ist unübersichtlich" kein Grund ist

Unklare interne Modulgrenzen lassen sich durch bessere interne Architektur (klare Package-Grenzen, Domain-Driven-Design-Bounded-Contexts) innerhalb eines Monolithen lösen, ohne die zusätzliche Komplexität eines verteilten Systems in Kauf zu nehmen.

Ein schlecht modularisierter Monolith, der zu Microservices migriert wird, wird in der Praxis häufig zu einem "verteilten Monolithen" — mehrere Services, die weiterhin so eng gekoppelt sind wie vorher, aber jetzt zusätzlich über das Netzwerk kommunizieren müssen.

Wann passt es — wann nicht?

Passt gut

  • Mehrere Teams müssen unabhängig voneinander deployen können, ohne sich gegenseitig zu blockieren
  • Einzelne Systemteile haben nachweislich fundamental unterschiedliche Skalierungsanforderungen
  • Die Geschäftslogik lässt sich entlang von Bounded Contexts schneiden, ohne dass Transaktionen ständig mehrere Services gleichzeitig anfassen müssen

Passt nicht

  • Ein einzelnes kleines Team entwickelt die gesamte Anwendung
  • Das eigentliche Problem ist unklare interne Modularisierung
  • Kernprozesse erfordern starke transaktionale Konsistenz über mehrere Entitäten hinweg