Saga コレオグラフィ
各サービスがイベントを発行・購読し、中央のオーケストレーターなしで分散トランザクションを実現する方式
分散システムトランザクション
Saga コレオグラフィとは
Saga コレオグラフィは、分散トランザクションを実現する Saga パターンの実装方式の 1 つで、各サービスがイベントを発行・購読し、中央のオーケストレーターなしで処理を連鎖させる。各サービスが自律的に動作し、イベント駆動で協調する。
処理の流れ
注文サービス: 注文作成 → "OrderCreated" イベント発行
↓
在庫サービス: イベント受信 → 在庫引き当て → "InventoryReserved" イベント発行
↓
決済サービス: イベント受信 → 支払い処理 → "PaymentCompleted" イベント発行
↓
配送サービス: イベント受信 → 出荷手配 → "ShipmentScheduled" イベント発行
補償トランザクション (ロールバック)
決済が失敗した場合、逆方向にイベントを発行して前のステップを取り消す。
決済サービス: 支払い失敗 → "PaymentFailed" イベント発行
↓
在庫サービス: イベント受信 → 在庫を戻す → "InventoryReleased" イベント発行
↓
注文サービス: イベント受信 → 注文をキャンセル
AWS での実装
[注文 Lambda] → SNS "OrderCreated"
↓
[在庫 Lambda] ← SQS ← SNS → [決済 Lambda] ← SQS
↓ ↓
SNS "InventoryReserved" SNS "PaymentCompleted"
SNS + SQS のファンアウトパターンで、各サービスが独立してイベントを処理する。
オーケストレーションとの比較
| 観点 | コレオグラフィ | オーケストレーション |
|---|---|---|
| 制御 | 分散 (各サービスが自律) | 中央 (Step Functions) |
| 結合度 | 低い (イベントのみ) | 中程度 (オーケストレーターに依存) |
| 可視性 | 低い (フロー全体が見えにくい) | 高い (Step Functions で可視化) |
| 複雑さ | サービス数が増えると複雑 | オーケストレーターが複雑さを吸収 |
| 適するケース | 3〜4 ステップの単純なフロー | 5 ステップ以上の複雑なフロー |
コレオグラフィの課題
フロー全体の可視性
各サービスが独立してイベントを処理するため、「今どのステップまで進んでいるか」を把握しにくい。相関 ID (Correlation ID) を全イベントに含め、ログで追跡する。
サイクリック依存
サービス A → B → C → A のようにイベントが循環すると、無限ループが発生する。イベントの方向を一方向に保つ設計が必要だ。
判断基準
- 3〜4 ステップの単純なフロー → コレオグラフィ
- 5 ステップ以上、条件分岐あり → オーケストレーション (Step Functions)
- 補償トランザクションが複雑 → オーケストレーション
理論と実装の両面から学ぶなら関連書籍が参考になる。