Zum Hauptinhalt springen

Kommunikation – Synchron vs. Asynchron

In Microservices ist Kommunikation keine Implementierungsfrage,
sondern eine Architekturentscheidung.

Jede Form der Kommunikation erzeugt Kopplung.
Die Frage ist:

Wo entsteht die Kopplung – in der Laufzeit oder im Datenfluss?


1️⃣ Synchron (REST / gRPC)

Eigenschaften

  • Request–Response
  • Direkte Antwort notwendig
  • Aufrufkette blockiert bis Antwort

Vorteile

  • Klare Kontrollflüsse
  • Einfache Denke
  • Direkte Konsistenz
  • Gut für User-getriebene Interaktionen

Risiken

  • Laufzeitkopplung
  • Cascading Failures
  • Latenzakkumulation
  • Hohe Abhängigkeit von Verfügbarkeit

Kernaussage: Wenn C ausfällt, fallen B und A potentiell mit.


2️⃣ Asynchron (Events / Messaging)

Eigenschaften

  • Producer sendet Event
  • Consumer reagiert später
  • Keine direkte Antwort notwendig

Vorteile

  • Zeitliche Entkopplung
  • Höhere Resilienz
  • Bessere Skalierbarkeit
  • Geringere Fehlerpropagation

Risiken

  • Eventual Consistency
  • Komplexere Fehlersuche
  • Idempotenz erforderlich
  • Höherer Observability-Bedarf

Kernaussage: A funktioniert auch, wenn C temporär ausfällt.


Vergleich

KriteriumSynchronAsynchron
Antwortzeitsehr gutmittel
Laufzeitkopplunghochniedrig
Fehlertoleranzniedrigerhöher
Konsistenzdirektoft eventual
Debuggingeinfacherkomplexer
Observability-Bedarfmittelhoch

Hybrides Referenzmuster (empfohlen)

Die meisten produktiven Systeme kombinieren beide Ansätze:

  • Synchron für User-getriebene, direkte Interaktionen
  • Asynchron für Nebenwirkungen, Prozesse, Entkopplung

Interpretation:

  • User bekommt schnelle Rückmeldung
  • Nebenwirkungen laufen entkoppelt
  • System bleibt resilient

Architekturelle Leitfragen

Vor jeder Service-Interaktion sollte gefragt werden:

  • Muss der Aufrufer sofort eine Antwort haben?
  • Darf der Prozess verzögert fortgesetzt werden?
  • Wie kritisch ist sofortige Konsistenz?
  • Wie hoch ist die Fehlertoleranzanforderung?
  • Wie viel Observability ist vorhanden?

Anti-Pattern

  • Alles synchron (Call-Chain-Monster)
  • Alles asynchron (Event-Spaghetti)
  • Synchrone Calls ohne Timeouts
  • Events ohne Idempotenz
  • Keine Trace-IDs bei Events

Fazit

Synchron = einfache Denke, höhere Laufzeitkopplung Asynchron = höhere Entkopplung, höhere Komplexität

Reife Microservice-Systeme wählen bewusst pro Use Case – nicht dogmatisch pro Architektur.