/pattern/event-choreography/

04 · ProductionRuntime ArchitectureEvent ChoreographyEvent-driven AgentsChoreographed Workflow

Event-driven Choreography.
Kein Dirigent. Jede Komponente lauscht auf die Ereignisse, die sie betreffen.

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

  • Systeme lose gekoppelt sein müssen.
  • Ereignisse aus mehreren Quellen eintreffen.
  • Erweiterbarkeit sehr wichtig ist.

Wann es nach hinten losgeht

  • Der globale Ablauf streng nachverfolgbar sein muss.
  • Eventual Consistency nicht akzeptabel ist.
  • Debugging ohne verteiltes Tracing zu schwierig wäre.

Die Abwägung

Hohe Entkopplung wird auf Kosten schwierigerer globaler Steuerung gewonnen.

Die Wirkung

Was es tatsächlich tut.

Dienste reagieren auf Ereignisse ohne zentrale Steuerung.

eventserviceserviceservice
Fallstricke

Zwei Wege, wie dieses Pattern Probleme verursachen kann.

Der implizite Graph, den niemand sehen kann

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.

Niemand kann beantworten 'ist der ganze Ablauf fertig?'

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.

Framework-Unterstützung

Wo Event-driven Choreography nativ ist.

AWS StrandsEvent-RuntimeNativ
Microsoft Agent FrameworkEvent-driven AgentsNativ
LangGraphüber Event-RuntimeAnpassbar

Suche

Patterns, Frameworks und Seiten durchsuchen.