イベントソーシングパターン - AWS 規範ガイダンス

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

イベントソーシングパターン

イベントソーシングパターンは通常、CQRS パターン とともに使用され、読み取りと書き込みのワークロードを切り離し、パフォーマンス、スケーラビリティ、セキュリティを最適化します。データは、データストアに直接更新されるのではなく、一連のイベントとして保存されます。マイクロサービスはイベントストアのイベントを再生して、独自のデータストアの適切な状態を計算します。このパターンは、アプリケーションの現在の状態を可視化し、アプリケーションがどのようにしてその状態に到達したかを示す追加のコンテキストを提供します。イベントソーシングパターンは、コマンドデータストアとクエリデータストアのスキーマが異なっていても、特定のイベントのデータを再現できるため、CQRS パターンと効果的に連携します。

このパターンを選択することで、任意の時点におけるアプリケーションの状態を特定して再構築できます。これにより、永続的なオーディットトレイルが作成され、デバッグが容易になります。ただし、データには最終的に一貫性が保たれるため、使用事例によっては適切でない場合があります。

このパターンは、Amazon Kinesis Data Streams または Amazon を使用して実装できます EventBridge。

Amazon Kinesis Data Streams の実装

次の図では、Kinesis Data Streams が一元化されたイベントストアの主要コンポーネントです。イベントストアは、アプリケーションの変更をイベントとしてキャプチャし、Amazon Simple Storage Service (Amazon S3) に保存します。

Amazon Kinesis Data Streams の実装

ワークフローは、以下の手順で構成されます。

  1. 「/withdraw」または「/credit」マイクロサービスでイベントの状態が変化すると、Kinesis Data Streams にメッセージを書き込むことでイベントを発行します。

  2. 「/balance」や「/CreditLimit」などの他のマイクロサービスは、メッセージのコピーを読み取り、関連性を判断してフィルタリングし、今後の処理のために転送します。

Amazon の EventBridge 実装

次の図のアーキテクチャでは、 を使用しています EventBridge。 EventBridge は、イベントを使用してアプリケーションコンポーネントを接続するサーバーレスサービスです。これにより、スケーラブルなイベント駆動型アプリケーションを簡単に構築できます。イベント駆動型アーキテクチャは、イベントを発行して応答することで連携する疎結合ソフトウェアシステムを構築するスタイルです。 EventBridge は、 AWSのサービスによって発行されるイベントのデフォルトのイベントバスを提供し、ドメイン固有のバスのカスタムイベントバスを作成することもできます。

Amazon の EventBridge 実装

ワークフローの主なステップは、以下のとおりです。

  1. OrderPlaced「」イベントは、「注文」マイクロサービスによってカスタムイベントバスに発行されます。

  2. 「/route」マイクロサービスなど、注文後にアクションを実行する必要があるマイクロサービスは、ルールとターゲットによって開始されます。

  3. これらのマイクロサービスは、顧客に注文を配送するルートを生成し、RouteCreated「」イベントを発行します。

  4. さらにアクションを実行する必要があるマイクロサービスは、RouteCreated「」イベントによっても開始されます。

  5. イベントはイベントアーカイブ ( EventBridge アーカイブなど) に送信され、必要に応じて再処理のために再生できます。

  6. 履歴注文イベントは、必要に応じて新しい Amazon SQS キュー (再生キュー) に送信され、再処理されます。

  7. ターゲットが開始されない場合、影響を受けたイベントはさらなる分析と再処理のためにデッドレターキュー (DLQ) に置かれます。

以下の場合は、このパターンの使用を検討してください。

  • イベントはアプリケーションの状態を完全に再構築するために使用されます。

  • システム内でイベントを再生し、アプリケーションの状態をいつでも判断できるようにする必要があります。

  • 空白のアプリケーションの状態から始めることなく、特定のイベントをリバースできるようにしたい。

  • システムには、自動ログを作成するために簡単にシリアル化できる一連のイベントが必要です。

  • システムには大量の読み取り操作が必要ですが、書き込み操作は軽いため、負荷の高い読み取り操作はメモリ内のデータベースに送ることができ、そのデータベースはイベントストリームで最新の状態に保たれます。

重要

イベントソーシングパターンを使用する場合は、マイクロサービス間でデータの一貫性を保つために Saga パターン をデプロイする必要があります。