

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Saga パターン
<a name="saga-pattern"></a>

この saga パターンは、分散アプリケーションの一貫性を確立し、複数のマイクロサービス間のトランザクションを調整してデータの一貫性を維持するのに役立つ障害管理パターンです。マイクロサービスはトランザクションごとにイベントを公開し、イベントの結果に基づいて次のトランザクションが開始されます。トランザクションの成功または失敗に応じて、2 つの異なるパスをたどることができます。

次の図は、saga パターンが AWS Step Functionsを使用して注文処理システムを実装する方法を示しています。各ステップ (「processPayment」など) には、プロセスの成功 (「UpdateカスタマーAccount」など) または失敗 (「SetOrderFailure」など) を処理する個別のステップもあります。

![\[Saga パターン\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/modernization-data-persistence/images/enabling-diagram6.png)


このパターンの使用を検討すべきなのは、次のような場合です。
+ アプリケーションは、緊密に結合することなく、複数のマイクロサービス間でデータの一貫性を維持する必要があります。
+ トランザクションには長期間有効なものがあり、1 つのマイクロサービスが長時間実行されても他のマイクロサービスがブロックされるのは避けたいものです。
+ シーケンス内で操作が失敗した場合にロールバックできる必要があります。

**重要**  
この saga パターンはデバッグが難しく、マイクロサービスの数が増えると複雑さも増します。このパターンには、ロールバックや変更の取り消しを補償するトランザクションを開発および設計する複雑なプログラミングモデルが必要です。

マイクロサービスアーキテクチャへの saga パターンの実装について詳しくは、 AWS 規範ガイダンスウェブサイトの[AWS Step Functions使用によるサーバーレス saga パターンの実装](https://docs.aws.amazon.com//prescriptive-guidance/latest/patterns/implement-the-serverless-saga-pattern-by-using-aws-step-functions.html)を参照してください。