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)
  • 補償トランザクションが複雑 → オーケストレーション

理論と実装の両面から学ぶなら関連書籍が参考になる。

関連用語