Saga パターン - AWS 規範ガイダンス

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

Saga パターン

Saga は一連のローカルトランザクションで構成されます。Saga 内の各ローカルトランザクションはデータベースを更新し、次のローカルトランザクションをトリガーします。トランザクションが失敗した場合、Saga は補償トランザクションを実行して、以前のトランザクションによって行われたデータベースの変更を元に戻します。

この一連のローカルトランザクションは、継続と補償の原則を採用することでビジネスワークフローを実現するのに役立ちます。ワークフローのフォワードリカバリは継続原則によって決定され、バックワードリカバリは補償原則によって決定されます。トランザクションのどの段階でも更新が失敗した場合、Saga は継続 (トランザクションを再試行する) か補償 (前のデータ状態に戻す) かのいずれかのイベントを発行します。これにより、データの完全性が維持され、データストア全体の整合性が保たれます。

例えば、ユーザーがオンライン小売業者から本を購入する場合、そのプロセスは、ビジネスワークフローを反映して、注文の作成、在庫の更新、支払い、出荷などの一連のトランザクションで構成されます。このワークフローを完了するために、この分散型アーキテクチャでは一連のローカルトランザクションを発行して、注文データベースでの注文の作成、在庫データベースの更新、支払いデータベースの更新を行います。処理が成功する場合は、次の図に示すように、これらのトランザクションが順番に呼び出され、ビジネスワークフローが完了します。一方、これらのローカルトランザクションのいずれかが失敗した場合、システムは次の適切なステップ、つまりフォワードリカバリとバックワードリカバリのどちらかを決定できるようになっています。

ビジネスワークフロー

次の 2 つのシナリオは、次のステップがフォワードリカバリかバックワードリカバリかを判断するのに役立ちます。

  • プラットフォームレベルの障害 (基盤となるインフラストラクチャに何らかの問題が発生し、トランザクションが失敗する場合)。この場合、saga パターンはローカルトランザクションを再試行してビジネスプロセスを続行することでフォワードリカバリを実行できます。

  • アプリケーションレベルの障害 (無効な支払いが原因で支払いサービスが停止する場合)。この場合、saga パターンは、補償トランザクションを発行して在庫データベースと注文データベースを更新し、以前の状態に戻すことでバックワードリカバリを実行できます。

saga パターンは、ビジネスワークフローを処理し、フォワードリカバリによって望ましい最終状態に到達するようにします。障害が発生した場合は、データ整合性の問題が発生しないように、バックワードリカバリを使用してローカルトランザクションを元に戻します。

saga パターンには、コレオグラフィとオーケストレーションという 2 つのバリエーションがあります。

Saga コレオグラフィ

Saga コレオグラフィパターンは、マイクロサービスが発行するイベントによって異なります。Saga を構成するサービス (マイクロサービス) はイベントをサブスクライブし、イベントトリガーに基づくアクションを実行します。例えば、次の図の注文サービスは OrderPlaced イベントを発生させます。在庫サービスはそのイベントをサブスクライブし、OrderPlaced イベントが発生すると在庫を更新します。同様に、構成しているサービスは発生したイベントのコンテキストに基づいて動作します。

Saga コレオグラフィパターンは、Saga を構成しているサービスが少なく、単一障害点のないシンプルな実装が必要な場合に適しています。構成しているサービスが増えると、このパターンを使用して構成しているサービス間の依存関係を追跡するのが難しくなります。

Saga コレオグラフィパターン

詳細なレビューについては、このガイドの「Saga コレオグラフィ」セクションを参照してください。

Saga オーケストレーション

Saga オーケストレーションパターンには、オーケストレーターと呼ばれるセントラルコーディネーターが存在します。Saga オーケストレーターは、トランザクションのライフサイクル全体を管理し、調整します。トランザクションを完了するために実行すべき一連のステップを認識しています。ステップを実行するには、構成しているマイクロサービスにメッセージを送信してオペレーションを実行します。構成しているマイクロサービスはオペレーションを完了し、オーケストレーターにメッセージを返信します。受信したメッセージに基づいて、オーケストレーターはトランザクションで次に実行するマイクロサービスを決定します。

Saga オーケストレーションパターンは、構成しているサービスが多く、Saga を構成するサービス間で疎結合が必要な場合に適しています。オーケストレーターは、ロジックの複雑さをカプセル化するために、構成しているサービスを疎結合にしています。ただし、オーケストレーターがワークフロー全体を制御するため、単一障害点になる可能性があります。

Saga オーケストレーションパターン

詳細なレビューについては、このガイドの「Saga オーケストレーション」セクションを参照してください。