Saga
2方式ある
基本構造
Saga:一連の処理の流れ
失敗時にはこれを実行してデータの一貫性を保つ
gpt-5.icon
https://microservices.io/i/sagas/Create_Order_Saga_Orchestration.png
具体例(注文処理)
1. 注文作成(Order Service)
2. 在庫確保(Inventory Service)
3. 支払い処理(Payment Service)
失敗例
支払いが失敗
→ 在庫確保をキャンセル(補償)
→ 注文をキャンセル(補償)
Saga Patternを使う理由
2PC(Two-Phase Commit)が使えない/使いたくない
マイクロサービスでDBを共有していない
可用性・スケーラビリティを重視したい
注意点・落とし穴
完全なACIDは保証しない(最終的整合性)
補償トランザクションは「元に戻す」ではなく「打ち消す」
冪等性(同じ処理を複数回実行しても安全)が必須
途中状態を前提にしたUX設計が必要
どちらを選ぶべきか(目安)
小〜中規模、イベント駆動が中心 → Choreography
複雑な業務フロー、明確な制御が必要 → Orchestration
4章は、まるまるSagaの章だけど、Sagaの必要条件である、5章のルール3は絶対読んで欲しい。ref