Architektur

Veröffentlicht am 2023-08-22 • 9 Min. Lesezeit

Moderne Softwarearchitektur: Vom Monolith zu Microservices

Historisch gewachsene Enterprise-Architekturen bestehen oft aus monolithischen Kernsystemen. Diese Systeme laufen zwar stabil, schränken aber die Agilität ein, verlangsamen Releases und bergen hohe Risiken bei Anpassungen. Die Ablösung des Monolithen ist unvermeidbar, muss aber im laufenden Betrieb erfolgen.

Das Strangler-Fig-Pattern

Ein bewährter Migrationsansatz ist das Strangler-Fig-Pattern. Statt eines riskanten „Big-Bang“-Releases werden Funktionen schrittweise aus dem Monolithen herausgelöst. Neue Features entstehen als Microservices und werden über ein API-Gateway angebunden. Der Monolith schrumpft sukzessive, bis er komplett abgeschaltet werden kann.

Inbound Requests API Gateway Alte Pfade Legacy-Monolith (Strangled) Neue Pfade Moderne Microservices (Domain A, Domain B, Domain C)

Architektonische Eckpfeiler

Ein moderner Übergang erfordert:

  • Domain-Driven Design (DDD): Definition klarer Service-Grenzen anhand von Geschäftsprozessen, nicht nach technischen Kriterien.
  • Event-Driven Integration: Entkopplung der Services über asynchrone Message-Broker (z. B. Kafka) zur Steigerung der Ausfallsicherheit.
  • Zentrale Observability: Verteiltes Tracing und strukturiertes Logging zur schnellen Fehleranalyse in verteilten Systemen.

Das Prinzip „Datenbank pro Service“

Ein Hindernis bei der Migration ist die Datenbankkopplung. Monolithen teilen sich oft eine riesige relationale Datenbank. Im modernen Design gilt das Prinzip „Datenbank pro Service“. Jeder Dienst besitzt seine eigenen Daten und kommuniziert asynchron über einen Event-Bus.

Datenbank-pro-Service Pattern Bestell-Service Bestell-DB Rechnungs-Service Rechnungs-DB Kafka Event-Bus (Asynchron)

Entwicklungsgeschwindigkeit freisetzen

Durch die Entkopplung des Monolithen in eigenständige Services können Teams unabhängig voneinander entwickeln, testen und deployen. Dies senkt den Abstimmungsbedarf, erhöht die Release-Frequenz und isoliert Fehler im System.

← Zurück zum Blog