Was macht saga-orchestration?
Implementieren Sie Saga-Muster für verteilte Transaktionen und arbeitsübergreifende Workflows. Verwenden Sie diese Fähigkeit, wenn Sie verteilte Transaktionen über Microservices implementieren, bei denen 2PC nicht verfügbar ist, kompensierende Aktionen für fehlgeschlagene Bestell-Workflows über Bestands-, Zahlungs- und Versanddienste entwerfen, ereignisgesteuerte Saga-Koordinatoren für Reisebuchungssysteme erstellen, die Hotel-, Flug- und Mietwagenreservierungen atomar zurückrollen müssen, oder festgefahrene Saga-Zustände in der Produktion debuggen, bei denen Kompensationsschritte nie abgeschlossen werden.
Übersicht
Saga-Muster ermöglichen die Verwaltung verteilter Transaktionen in Microservices-Architekturen, indem sie diese in eine Reihe lokaler Transaktionen mit Kompensationsschritten zerlegen. Diese Fähigkeit bietet Anleitungen zur Implementierung sowohl orchestrierter als auch choreografierter Sagas.
Hauptfunktionen
- Orchestrierte Sagas: Verwendung eines zentralen Koordinators (Saga Execution Coordinator, SEC) zur Steuerung des Ablaufs.
- Choreografierte Sagas: Ereignisgesteuerte Abwicklung durch Nachrichtenbroker und Domain-Ereignisse.
- Kompensationslogik: Automatische Rückabwicklung von Vorgängen bei Fehlern.
- Statusmanagement: Überwachung und Debugging von Saga-Instanzen in Produktion.
Plattformunterstützung
Diese Fähigkeit kann mit jedem gängigen Microservices-Framework verwendet werden, einschließlich:
- Spring Boot: Mit
@Saga-Annotation undSagaOrchestrator-Bean. - Quarkus: Unter Verwendung von
quarkus-sagaund CDI-Ereignissen. - Node.js: Mit
saga-pattern-Modul und Event-Emitters.
Sie ist auch mit Cloud-Plattformen kompatibel:
- AWS: Verwendung von Step Functions für Saga-Koordination.
- Azure: Einsatz von Durable Functions.
- GCP: Nutzung von Cloud Workflows.
Implementierungsbeispiel (Spring Boot)
@Component
public class OrderSaga {
@Saga
public void executeOrderSaga(OrderCommand command) {
try {
// Schritt 1: Bestand reservieren
inventoryService.reserve(command.productId, command.quantity);
// Schritt 2: Zahlung verarbeiten
paymentService.processPayment(command.userId, command.amount);
// Schritt 3: Versand auslösen
shippingService.shipOrder(command.orderId);
} catch (Exception e) {
// Kompensationsschritte ausführen
compensationService.compensate(command.orderId);
}
}
}
Konfiguration
Erforderliche Umgebungsvariablen:
export SAGA_DATA_SOURCE_URL=jdbc:postgresql://localhost:5432/saga_db
export SAGA_DATA_SOURCE_USERNAME=saga_user
export SAGA_DATA_SOURCE_PASSWORD=secure_password
export SAGA_COMPENSATION_TIMEOUT=30000
Fehlerbehandlung und Debugging
Verwenden Sie die bereitgestellten Protokollierungs- und Überwachungswerkzeuge, um festgefahrene Saga-Zustände zu identifizieren und zu beheben:
- Saga-Statusabfrage: Über API-Endpunkte wie
/saga/{id}/status. - Kompensations-Wiederholungsversuche: Automatische Wiederholung fehlgeschlagener Kompensationsschritte mit exponentieller Backoff-Strategie.
- Dead-Letter-Queue: Fehlgeschlagene Kompensationen werden für manuelle Analyse in eine DLQ verschoben.
Siehe auch
Lizenz
MIT