Распределенные транзакции: Saga паттерн
Распределённые транзакции — сложная задача в микросервисной архитектуре. Saga — доминирующий паттерн решения.
Проблема
Пример deposit: wallet-service (add balance) + bonus-service (activate bonus) + audit-service (log). Все три должны succeed или fail атомарно. Двухфазный commit (2PC) не масштабируется — блокирует ресурсы, не подходит для микросервисов.
Saga pattern
Series of local transactions. Each service выполняет свою часть, публикует event. При failure — compensating transactions (обратные операции). Two variants: choreography (event-driven) и orchestration (central coordinator).
Choreography
Services react на events, publish own. No central controller. Loose coupling. Cons: сложно understand overall flow. Debugging tricky. Deadlocks возможны. Best для simple 2–3 service sagas.
Orchestration
Central Saga orchestrator (state machine). Direct calls к services, tracks state. Explicit flow. Easier to debug и modify. Tools: Camunda, Temporal, AWS Step Functions. Preferred для complex flows (5+ services, conditional branching).