Saga コレオグラフィ
各サービスがイベントを発行・購読し、中央のオーケストレーターなしで分散トランザクションを実現する方式
Saga コレオグラフィとは
Saga コレオグラフィは、分散トランザクションを実現する Saga パターンの実装方式の 1 つで、各サービスがイベントを発行・購読し、中央のオーケストレーターなしで処理を連鎖させる。各サービスが自律的に動作し、イベント駆動で協調する。
処理の流れ
コレオグラフィ方式では、各サービスがイベントを発行し、次のサービスがそのイベントを購読して処理を進める。中央のオーケストレーターは存在せず、サービス間がイベントで疎結合に連携する。
↓
在庫サービス: イベント受信 → 在庫引き当て → "InventoryReserved" イベント発行
↓
決済サービス: イベント受信 → 支払い処理 → "PaymentCompleted" イベント発行
↓
配送サービス: イベント受信 → 出荷手配 → "ShipmentScheduled" イベント発行
補償トランザクション (ロールバック)
決済が失敗した場合、逆方向にイベントを発行して前のステップを取り消す。
決済サービス: 支払い失敗 → "PaymentFailed" イベント発行
↓
在庫サービス: イベント受信 → 在庫を戻す → "InventoryReleased" イベント発行
↓
注文サービス: イベント受信 → 注文をキャンセル
AWS での実装
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)
- 補償トランザクションが複雑 → オーケストレーション
理論と実装の両面から学ぶなら関連書籍が参考になる。
この記事は役に立ちましたか?
関連用語
Saga パターン (オーケストレーション)
分散トランザクションを複数のローカルトランザクションに分割し、中央のオーケストレーターが制御するパターン
イベント駆動アーキテクチャ
イベントの発行と購読を中心にシステムを構成し、サービス間の疎結合と非同期処理を実現するアーキテクチャスタイル
トランザクショナルアウトボックス
データベースへの書き込みとイベント発行を原子的に行うための分散システムパターン
イベントソーシング
状態の変更をイベントとして記録し、イベントの再生で現在の状態を復元する設計パターン
EventBridge
AWS のサーバーレスイベントバスで、イベント駆動アーキテクチャの中核を担う
イベントストーミング
ドメインエキスパートと開発者が協働でビジネスプロセスを可視化するワークショップ手法