Wann man dazu greift
- Systeme lose gekoppelt sein müssen.
- Ereignisse aus mehreren Quellen eintreffen.
- Erweiterbarkeit sehr wichtig ist.
/pattern/event-choreography/
Jede Komponente reagiert auf abonnierte Ereignisse und emittiert eigene, ohne zentralen Dirigenten — der Gesamtablauf ist eine emergente Folge lokaler Ereignis-und-Reaktions-Regeln statt eines expliziten Plans.
In der PraxisDie Fulfillment-, Benachrichtigungs- und Analyse-Dienste einer E-Commerce-Plattform abonnieren jeweils ein `order.placed`-Ereignis und aktualisieren ihren eigenen Zustand unabhängig voneinander, anstatt von einem zentralen Controller aufgerufen zu werden.
Wann man dazu greift
Wann es nach hinten losgeht
Die Abwägung
Hohe Entkopplung wird auf Kosten schwierigerer globaler Steuerung gewonnen.
Dienste reagieren auf Ereignisse ohne zentrale Steuerung.
Das Verhalten ist die Vereinigung aller Abonnements über alle Dienste hinweg. Neue Komponenten ändern den globalen Ablauf lautlos; Debugging erfordert die Rekonstruktion eines Graphen, der nie aufgeschrieben wurde.
Lösung · Den Choreographie-Graphen aus registrierten Abonnements zum Deploy-Zeitpunkt generieren. Das Graph-Artefakt als vollwertige Review-Grundlage behandeln.
Ohne zentralen Dirigenten gibt es keine einzelne Stelle, die weiß, dass die End-to-End-Transaktion abgeschlossen wurde. Eine ausgefallene Reaktion lässt den Ablauf halbfertig, und nichts bemerkt es, bis ein nachgelagerter Zustand fehlt.
Lösung · Eine Korrelations-ID durch jedes Ereignis fädeln und einen Prozess-Monitor (oder eine Saga) betreiben, der jeden Ablauf bis zu seinem Terminal-Ereignis verfolgt und bei ausbleibenden alarmiert.
Weitermachen
Patterns, Frameworks und Seiten durchsuchen.