Sagas manage distributed transactions across services using local transactions and compensating rollback actions.
# Order saga steps
# 1. order-service creates order (PENDING)
# 2. inventory-service reserves stock
# 3. payment-service charges card
# 4. order-service marks CONFIRMED
# If step 3 fails -- compensate:
# inventory-service releases reserved stock
# order-service cancels order
# Choreography (event-driven)
order-svc --OrderCreated--> Kafka
inventory --listens--> reserves --StockReserved--> Kafka
payment --listens--> charges --PaymentDone--> Kafka
order-svc --listens--> confirms
# Orchestration (central coordinator)
saga-coordinator:
1. reserve() -- fail: stop
2. charge() -- fail: release()
3. confirm() -- done