イベント ドリブン アーキテクチャ

イベント ドリブン アーキテクチャは、マイクロサービスが状態変化(イベント)に対応するためのソフトウェア設計パターンです。イベントは、状態(アイテムの価格や配送先住所など)を伝える場合もあり、識別子(注文の受信または配送の通知など)となる場合もあります。イベントは、共通の目標を達成するために連携するマイクロサービスをトリガーしますが、イベント形式を除き互いに認識する必要はありません。各マイクロサービスは連携して動作していますが、異なるビジネス ロジックを適用して、独自の出力イベントを発生させることができます。

イベントには次のような特性があります。

  • 発生したことを記録します。
  • 変更や削除ができない不変のファクトをキャプチャします。
  • これは、サービスが使用時にロジックを適用するかどうかにかかわらず発生します。
  • 無期限かつ広範囲に維持できます。必要に応じて何度でも使用できます。

イベント ドリブン システムでは、イベントはイベント プロデューサーによって生成され、イベント ルーター(またはブローカー)によって排出され、フィルタされます。さらに、適切なイベント コンシューマー(またはシンク)にファンアウトされます。イベントは、1 つ以上のトリガーによって定義されたサブスクライバーに転送されます。イベント プロデューサー、イベント ルーター、イベント コンシューマーの 3 つのコンポーネントは分離されており、個別にデプロイ、更新、スケーリングが可能です。

イベント ブローカーとサブスクライバー

イベント ルーターは、さまざまなサービスをリンクし、メッセージの送受信を行うメディアです。イベント プロデューサーによって生成された元のイベントに対するレスポンスを生成し、適切なレスポンスを適切なコンシューマーに送信します。イベントは非同期に処理されます。サービスがイベントに反応するか、影響を受ける場合に結果が決まります。イベントフローは、次の図のように非常にシンプルなものになります。

イベント ドリブン アーキテクチャ

イベント ドリブン アーキテクチャを使用する場面

システムを設計する際は、次の点に注意してください。

  • ストレージ バケット、データベース テーブル、仮想マシン、またはその他のリソースの異常や変更に対するアラートをモニタリングして受信する
  • 複数のコンシューマーに単一のイベントをファンアウトする。イベント ルーターは、カスタマイズされたコードを記述しなくても、適切なすべてのコンシューマーにイベントを push します。各サービスは、異なる方法でイベントを並行処理できます。
  • 異なるテクノロジー スタック間の相互運用性を確保し、各スタックの独立性を維持する。
  • 異なるリージョンやアカウント間で運用とデプロイを行うシステムとチーム間で調整を行う。マイクロサービスの所有権を再編成できます。チーム間の依存関係が少なくなり、データアクセスの壁に妨げられていた変更にもすばやく対応できます。

イベント ドリブン アーキテクチャの利点

イベント ドリブン アーキテクチャを構築する利点は次のとおりです。

疎結合とデベロッパーのアジリティの向上

イベント プロデューサーはイベント コンシューマーと論理的に分離されています。イベントの生成と使用が分離されるため、サービスは相互運用できますが、スケーリング、更新、デプロイを相互に独立して行うことができます。

疎結合によって依存関係が減少し、さまざまな言語とフレームワークでサービスを実装できます。イベント プロデューサーとレシーバは、それぞれのサービスでロジックを変更しなくても追加または削除できます。イベントをポーリング、フィルタ、転送するためにカスタムコードを作成する必要はありません。

非同期のイベントと復元性

イベント ドリブン システムでは、イベントは非同期的に生成されます。レスポンスを待たずに発行することも可能です。コンポーネントが疎結合のため、1 つのサービスが失敗しても他のサービスに影響はありません。必要であれば、受信側のサービスが障害点から再開できるようにイベントを記録できます。また、過去のイベントを再生することもできます。

push ベースのメッセージング、リアルタイム イベント ストリーム、コスト削減

イベント ドリブン システムでは、push ベースのメッセージングを実現できます。クライアントは、リモート サービスを継続的にポーリングしなくても、状態変化の更新を受信できます。これらの push メッセージは、データの即時処理と変換、リアルタイム分析に使用できます。また、ポーリングが少ないため、ネットワーク I/O が減少し、コストを抑えることができます。

簡素化された監査とイベント ソーシング

イベント ルーターを一元的に管理することで監査を簡素化し、ルーターにアクセスできるユーザーとデータにアクセスできるユーザーやリソースを制御できます。転送時と保存時のデータを暗号化することもできます。

また、イベント ソーシングを利用できます。これは、元の状態と同じ順序でアプリケーションの状態変更を記録するアーキテクチャ パターンです。イベント ソーシングでは不変イベントのログが記録されます。このログは監査目的で維持できます。また、履歴状態の再作成、ビジネスの意思決定における説明で利用することもできます。

アーキテクチャに関する注意事項

イベント ドリブン アーキテクチャでは、アプリケーションの設計を新しい方法で考える必要があります。これは、マイクロサービスや分離されたコンポーネントを使用するアプリケーションに適していますが、次の点を考慮する必要があります。

  • すべてのイベントを処理する必要がある場合、イベントソースで配信を保証できるかどうか。

    耐久性と信頼性の高いイベントソースが必要です。

  • アプリケーションで複数の非同期リクエストを処理できるかどうか。

    システム パフォーマンスが、グローバル スコープや柔軟性に欠けるデータベースに左右されないようにする必要があります。

  • イベントフローをどのようにトラッキングするのか。

    イベント ドリブン アーキテクチャは、モニタリング サービスを使用した動的トラッキングをサポートしていますが、コード分析を使用した静的トラッキングはサポートしていません。

  • イベントソースのデータを使用して状態を再構築するかどうか。

    データの重複を排除し、適切な順序で処理する方法を検討する必要があります。

次のステップ