A Saga is a sequence of local transactions across services; if a later step fails, earlier steps are undone via compensating transactions (e.g. cancel reservation, refund payment). There is no single ACID transaction across services — consistency is eventual and achieved by compensation.
| Style | How | Trade-off |
|---|---|---|
| Choreography | Services react to events; no central coordinator | Harder to reason; no single place for flow |
| Orchestration | Central saga runner calls services and runs compensations | Clear flow; orchestrator is a single point |
Sagas guarantee “all steps complete or compensating actions run” but not atomicity: between steps, state can be partially updated. Design compensations to be idempotent and handle already-compensated or failed steps.