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
| Kriterium | Synchron | Asynchron |
|---|---|---|
| Antwortzeit | sehr gut | mittel |
| Laufzeitkopplung | hoch | niedrig |
| Fehlertoleranz | niedriger | höher |
| Konsistenz | direkt | oft eventual |
| Debugging | einfacher | komplexer |
| Observability-Bedarf | mittel | hoch |
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.