saga는 여러 서비스에 걸친 비즈니스 트랜잭션을 로컬 트랜잭션의 시퀀스로 관리합니다. 한 단계가 실패하면 saga는 **보상 트랜잭션(compensating transaction)**을 실행해 이전 단계를 되돌립니다. 분산 롤백은 없습니다.
왜 분산 트랜잭션이 아닌가?
서비스 간 2단계 커밋(2PC)은 느리고, 리소스를 잠그며, 가용성을 결합시킵니다. saga는 분산 잠금 없이 eventual consistency를 제공합니다.
Choreography(이벤트 주도)
서비스가 서로의 이벤트에 반응합니다. 중앙 코디네이터가 없습니다.
text
Order ─OrderCreated→ Payment ─PaymentDone→ Inventory ─Reserved→ Shipping
◀───────── (실패 시 각자 보상 이벤트를 방출) ─────────
Orchestration(중앙 코디네이터)
orchestrator가 각 서비스에 무엇을 할지 지시하고 결과에 반응합니다.
text
┌───────────── Saga Orchestrator ─────────────┐
▼ ▼ ▼ ▼
reservePayment reserveStock createShipment (실패 시: 전부 보상)
