Saga パターン (オーケストレーション)
分散トランザクションを複数のローカルトランザクションに分割し、中央のオーケストレーターが制御するパターン
Saga オーケストレーションとは
Saga パターンのオーケストレーション方式は、中央のオーケストレーター (指揮者) が各サービスのローカルトランザクションを順番に呼び出し、失敗時には補償トランザクションを逆順に実行する方式である。AWS Step Functions が代表的なオーケストレーターだ。
処理の流れ
オーケストレーション方式では、Step Functions などの中央コーディネーターが各サービスの呼び出し順序を制御する。途中で失敗した場合は、完了済みのステップに対して補償トランザクション (逆操作) を実行してロールバックする。
1. 注文サービス: 注文作成 → 成功
2. 在庫サービス: 在庫引き当て → 成功
3. 決済サービス: 支払い処理 → 失敗!
4. 補償: 在庫サービス: 在庫を戻す
5. 補償: 注文サービス: 注文をキャンセル
コレオグラフィとの比較
コレオグラフィとの主な違いを以下に比較する。
| 観点 | オーケストレーション | コレオグラフィ |
|---|---|---|
| 制御 | 中央 (Step Functions) | 分散 (各サービスが自律) |
| 可視性 | 高い (フロー全体が可視化) | 低い (フローが見えにくい) |
| 結合度 | 中程度 (オーケストレーターに依存) | 低い (イベントのみ) |
| 複雑なフロー | 得意 (条件分岐、並列実行) | 苦手 |
| 適するケース | 5 ステップ以上の複雑なフロー | 3〜4 ステップの単純なフロー |
Step Functions の利点
- フロー全体が JSON/YAML で定義され、AWS コンソールで可視化される
- 各ステップのリトライ、タイムアウト、エラーハンドリングが宣言的に設定できる
- 実行履歴が自動的に記録され、デバッグが容易
- 並列実行 (
Parallelステート) や条件分岐 (Choiceステート) をサポート
補償トランザクションの設計
補償トランザクションはべき等に実装する。同じ補償が複数回実行されても安全であること。
// ❌ 非べき等: 2回実行すると在庫が2回戻る
async function releaseInventory(orderId: string) {
await db.inventory.increment(productId, quantity);
}
// ✅ べき等: 既に戻されていたら何もしない
async function releaseInventory(orderId: string) {
await db.inventory.update({
where: { orderId, status: 'reserved' },
data: { status: 'released' },
});
}
基礎から学ぶなら関連書籍が手がかりになる。
この記事は役に立ちましたか?
関連用語
Saga コレオグラフィ
各サービスがイベントを発行・購読し、中央のオーケストレーターなしで分散トランザクションを実現する方式
Step Functions
AWS のサーバーレスワークフローサービスで、Lambda 関数を視覚的に組み合わせてオーケストレーションする
イベント駆動アーキテクチャ
イベントの発行と購読を中心にシステムを構成し、サービス間の疎結合と非同期処理を実現するアーキテクチャスタイル
Aurora
AWS のクラウドネイティブ RDB で、MySQL/PostgreSQL 互換で高可用性・高パフォーマンスを実現する
X-Ray
AWS の分散トレーシングサービスで、リクエストの経路とレイテンシを可視化する
集約
ドメイン駆動設計において、一貫性を保つべきオブジェクト群をまとめ、単一のルートエンティティ経由でアクセスする設計パターン
関連する記事
技術書の読む順番戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで理解の深さと速度を飛躍的に高める方法を解説します。
機械学習・AI 本ガイド - エンジニアが読むべき技術書の選び方
機械学習の基礎から実践まで学べる技術書の選び方を紹介。「Python ではじめる機械学習」などのハンズオン本を軸に、数学が苦手な人向けの学習ルートと ML 本の賞味期限の見極め方を解説します。
インフラ・クラウド本ガイド - AWS や Docker を本で学ぶ
クラウドインフラ、コンテナ、IaC を学べる技術書の選び方と学習順序を紹介。インフラ本の賞味期限問題と公式ドキュメントとの使い分けも解説します。