イベント駆動型アーキテクチャとは

イベント発生時に実行される、疎結合されたシステム

イベント駆動型アーキテクチャは、イベントをトリガーとして使い、分離されたサービス間の通信を行うもので、マイクロサービスによって構築されたモダンアプリケーションでよく見られるものです。イベントとは、e コマースウェブサイトのショッピングカートに商品が置かれるなど、状態が変化すること (または更新) です。イベントは、状態 (購入したアイテム、その料金、および配送先住所) を持つことができます。または、イベントは識別子 (注文が出荷されたという通知) となることができます。

イベント駆動型アーキテクチャには、イベントプロデューサー、イベントルーター、イベントコンシューマーの 3 つの主要コンポーネントがあります。 プロデューサーはイベントをルーターに発行し、ルーターはイベントをフィルタリングしてコンシューマーにプッシュします。プロデューサーサービスとコンシューマーサービスは切り離されているため、それらを個別にスケーリング、更新、デプロイできます。

AWS Online Tech Talks

Amazon EventBridge を使用して疎結合化されたイベント駆動型アーキテクチャを構築する方法 | デモ動画シリーズ

イベントバスの作成、SaaS イベントソースの設定など、イベント駆動型アーキテクチャの基本を学び、EventBridge の使用を開始できます。

イベント駆動型アーキテクチャのメリット

スケーリングやエラーが個別化

サービスを疎結合化すると、それぞれのサービスはイベントルーターのみを認識し、お互いを認識しなくなります。つまり、サービスは相互運用可能でありながら、1 つのサービスに障害が発生した場合でも、残りのサービスは稼働し続けることができます。イベントルーターは、ワークロードの急増に対応する弾力性のあるバッファとして機能します。

俊敏に開発

イベントルーターが自動的にイベントのフィルタリングを行い、コンシューマーにプッシュするため、イベントをポーリング、フィルタリング、ルーティングするためのカスタムコードを作成する必要がなくなります。また、ルーターによってプロデューサーサービスとコンシューマーサービス間の手間のかかる調整が不要になるため、開発のスピードアップが可能になります。

監査が簡単

イベントルーターは、アプリケーションを監査し、ポリシーを定義するための単一のロケーションとして機能します。これらのポリシーは、ルーターにパブリッシュおよびサブスクライブできるユーザーを制限し、データへのアクセス許可を持つユーザーとリソースを制御します。また、転送中のイベントと保管時のイベントは共に暗号化できます。

コストを削減

イベント駆動型アーキテクチャはプッシュベースであるため、ルーターにイベントが発生すると、すべてがオンデマンドで処理されます。この方法では、イベントの有無を確認するための継続的なポーリングに対する料金は発生しません。これは、ネットワーク帯域幅の消費量、CPU 使用率、アイドル状態のフリート容量、SSL/TLS ハンドシェイクが減ることを意味します。

仕組み: アーキテクチャの例

ここでは、e コマースサイトにおけるイベント駆動型アーキテクチャの例を紹介します。このアーキテクチャでは、アプリケーションをクラッシュさせたり、リソースをオーバープロビジョニングしたりすることなく、需要のピーク時にさまざまなソースからの変更に対応できます。

このアーキテクチャの活用方法

クロスアカウントでクロスリージョンのデータレプリケーション

イベント駆動型アーキテクチャを利用することによって、異なるリージョンやアカウントで運用、デプロイされるチーム間でシステムを連携させることができます。システム間のデータ転送にイベントルーターを使用すれば、他のチームから独立してサービスの開発、スケール、デプロイを行うことができます。

リソースの状態のモニタリングとアラート

イベント駆動型アーキテクチャを使用すれば、リソースを継続的にチェックしなくても、異常、変更、更新をモニタリングし、アラートを受信できます。これらのリソースには、ストレージバケット、データベーステーブル、サーバーレス関数、コンピューティングノードなどが含まれます。

ファンアウトと並列処理

イベントに応じて動作させるシステムが多数ある場合、イベント駆動型アーキテクチャを使用すれば、各コンシューマーにプッシュするカスタムコードを作成しなくても、イベントをファンアウトできます。ルーターはイベントをシステムにプッシュし、各システムは目的の異なるイベントを並行して処理できます。

異種システムの統合

異なるスタックで動作するシステムがある場合、イベント駆動型アーキテクチャを使用すれば、結合しなくてもシステム間で情報を共有できます。イベントルーターは、システム間の間接化と相互運用性を確立するため、サーバーは互いに依存することがないまま、メッセージやデータを交換できるようになります。


イベント駆動型アーキテクチャを使う理由

イベント駆動型アーキテクチャは、俊敏性の向上と迅速な処理に最適です。マイクロサービスを使用する最新のアプリケーションや、疎結合されたコンポーネントを持つアプリケーションでよく利用されます。イベント駆動型アーキテクチャを採用する際には、アプリケーション設計に対する考え方の見直しが必要になる場合があります。適切に行うために、以下の点を考慮してください。

• イベントソースの耐久性。イベントごとの処理が必要な場合、信頼性の高いイベントソースの配信を保証する必要があります。 

• パフォーマンス制御の要件。アプリケーションは、イベントルーターの非同期性を処理できるようにします。 

• イベントフローのトラッキング。イベント駆動型アーキテクチャによって導入される間接化では、モニタリングサービスによる動的なトラッキングは可能ですが、コード分析による静的なトラッキングは実行できません。 

• イベントソースのデータ。状態を再構築する必要がある場合は、イベントソースの重複を排除し、順序付けしてください。

開始方法

イベント駆動型アーキテクチャで使用されるルーターには、大きく分けてイベントバスとイベントトピックの 2 種類があります。AWS では、イベントバスを構築するための Amazon EventBridge と、イベントトピックを構築するための Amazon Simple Notification Service (SNS) を提供しています。

Amazon EventBridge の使用をお勧めするのは、SaaS アプリケーション、AWS のサービス、カスタムアプリケーションからのイベントに対応するアプリケーションを構築する場合です。イベントに事前定義されたスキーマを使用する EventBridge では、イベント本体全体に適用されるルールを作成して、コンシューマーにプッシュする前にフィルタリングを実行できます。

Amazon SNS の使用をお勧めするのは、他のアプリケーション、マイクロサービス、AWS のサービスからパブリッシュされた高スループットまたは低レイテンシーのイベントに対応するアプリケーション、または非常に高いファンアウト (数十万または数百万のエンドポイント) を必要とするアプリケーションを構築する場合です。SNS トピックは、通過するイベントスキーマに依存しません。

無料のアカウントにサインアップ

AWS 無料利用枠にすぐにアクセスできます。 

サインアップ