flex-height
text-black

オンラインで買い物をする人物

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

イベント駆動型アーキテクチャーに基づく統合モデルは、重要な「イベント」をリアルタイムで検出して処理します。

default

{}

default

{}

primary

default

{}

secondary

イベント駆動型アーキテクチャーの定義とその重要性

イベント駆動型アーキテクチャーは、重要な状態変化に対する即時対応を可能にするソフトウェア設計アプローチです。重要な出来事が起きた瞬間、例えば、顧客がオンラインショッピングしたとき、センサーが故障の危険を知らせたとき、株価が下落したとき、セキュリティアラートが作動したときに、即座に対応が取れるに越したことはありません。このような変化を「イベント」と呼びますが、イベントはあらゆる組織、あらゆる業界で常に起こっています。そして企業の成功は、イベントにどれだけ迅速に対応できるかにかかっています。

そこで、イベント駆動型アーキテクチャー (EDA) の出番となります。イベント駆動型アーキテクチャーでは、スケジュールされた更新を待ったり、緊密に接続された硬直的なシステムに依存したりするのではなく、緩やかに結合するコンポーネントを通じて、アプリケーション間で非同期通信を行うことができます。つまり、システムの各部分は、他の部分の内部で何をしているかを意識しなくても独立して動作できるため、スケーリング、改修、イノベーションが容易になります。

その結果、企業はイベント駆動型アーキテクチャーを使用する最新のシステムを活用して、パーソナライズされたエクスペリエンスを迅速に提供し、業務を自動化し、ニーズやデータ量が増加しても俊敏性を維持することができます。イベント駆動型アーキテクチャーの導入によって事後対応から事前対応に移行した組織は、絶えず変化するデジタル世界で成功するために必要なスピード、柔軟性、レジリエンスを獲得しています。

イベントとは

イベントとは、ビジネスに影響を及ぼすアクションや状態変化のことを言います。例えば、顧客がクレジットカードをスワイプしたとき、乗客がフライトのチェックインをしたとき、ユーザーがパスワードをリセットしたとき、倉庫の在庫が更新されたときなどです。つまりイベントとは、「今何が起こったのか」を示して、システムの他の部分がすぐに対応できるようにする小さなメッセージです。

発生したイベントを常に把握し、それに対応できる企業は、イベント駆動型と呼ばれます。イベントの一般的な例をいくつかご紹介しましょう。

イベント駆動型アーキテクチャーのコアコンポーネント

イベントスキーマでは、構造の一貫性を保つために、イベントに含まれるフィールド、データ型、解釈のルールなど、イベントの構造と形式を定義します。

イベント駆動型アーキテクチャーでは、アプリケーションは、イベントを生成するか取得するイベントプロデューサー、またはイベントを処理して、それに基づいて対応するイベントコンシューマーとして機能します。プロデューサーは、イベントブローカー(メッセージング指向のミドルウェア)を介して、コンシューマーにリアルタイムでイベントを送信します。その後、コンシューマーはイベントを処理し、他のアクションやワークフロー、イベントをトリガーすることができます。このような設計により、データストリームの入力に対してリアルタイムの対応やスマートな意思決定が可能になります。

イベントブローカーは、プロデューサーとコンシューマーを接続するイベントチャネルを管理し、確実にイベントを配信するとともに、多くの場合、フィルタリング、永続化、リプレイなどの機能を提供します。イベントブローカーは、プロデューサーとコンシューマーの分離によって、システムの回復力と拡張性を向上させます。

単一のプロデューサーと単一のコンシューマーが互いに直接通信する非常に単純なアーキテクチャーの場合、イベントブローカーは任意になります。しかし、ほとんどの企業では、複数のソースが複数のコンシューマーにイベントを送信するため、ブローカー、あるいはブローカーのネットワーク(「イベントメッシュ」とも呼ばれる)が必要です。イベントブローカーやイベントメッシュを使用すると、アプリケーションの「疎結合」が生まれます。

同期通信と非同期通信

イベント駆動型アーキテクチャーで同期通信が行われると、イベントプロデューサーは次の処理に進む前に、受け手の処理と応答を待機します。例として、Web クライアントが HTTP リクエストを送信し、サーバーの応答を待機する場合が挙げられます。通常、同期通信の各コンポーネントは密結合されており、負荷が大きければ処理速度は低下します。このため、コンシューマーから応答を受信するまで、プロデューサーは次のタスクの実行を「ブロック」されます。

イベント駆動型アーキテクチャーで非同期通信が行われると、プロデューサーは即時応答を待たずに処理を続行し、イベントコンシューマーは後でメッセージを処理することができます。例として、システムがイベントをイベントブローカーに公開し、各コンシューマーが個別にイベントを処理する場合が挙げられます。非同期通信では、タスクはブロックされず、各コンポーネントは疎結合されています。拡張性が高く、リアルタイムシステムや分散システムがうまく機能します。

イベント駆動型アーキテクチャーにおけるリクエスト駆動型モデルとイベント駆動型モデルの比較

リクエスト駆動型モデルでは、イベントコンシューマーからサーバーへのリクエストによってインタラクションが開始され、これにサーバーが応答します。このモデルはプルベースです。つまり、コンシューマーは自動更新を受信するのではなく、サーバーからのデータやサービスが必要になったときに主体的に要求します。同期式の場合も非同期式の場合もあります。リクエスト駆動型モデルは、従来の Web アプリケーションや API で一般的です。

イベント駆動型モデルでは、インタラクションはイベント(処理をトリガーする状態変化やアクション)によって開始され、公開/購読などのイベントが発生すると、コンポーネントが自動的に対応します。このモデルは典型的なプッシュベースです。つまり、コンシューマーが要求するのを待たず、イベントや更新が発生するとすぐに、コンシューマーに自動的に送信(「プッシュ」)されます。イベント駆動型モデルは非同期式かつ分離型で、リアルタイムの対応に最適です。

モデル間の主な違いは、リクエスト駆動型モデルでは、ユーザーは必要なときにデータを要求しますが、イベント駆動型モデルでは、何かが発生したときに自動的に対応する点です。

一般的なイベント駆動型アーキテクチャーのパターン

イベント駆動型アーキテクチャーのパターンとは、イベント駆動型システムがイベントを取得して、処理および消費する方法を定義する一般的な設計アプローチです。パターンは、拡張性に優れた分離方式で通信や状態変化を処理するための再利用可能な方法を示します。システムの設計時や導入時にイベント駆動型アーキテクチャーのパターンを適用して、一般的な課題を解決できます。例えば、非同期式かつ疎結合の環境におけるイベント配信、データの一貫性、拡張性などの課題があります。

イベント駆動型アーキテクチャーにおけるイベントの送信には、主に 4 つのパターンがあります。

イベント処理スタイル

イベント処理スタイルとは、イベントの検出、解釈、および処理の方法を示します。これにより、ロジックの複雑さ、タイミング、およびシステムで認識されるイベント間の関係が定義されます。コンシューマーに到達したイベントを処理するには、単純なイベント処理、複雑なイベント処理、イベントストリーム処理の 3 つの異なるアプローチがあります。

1. 単純なイベント処理:コンシューマーは各イベントを受信時に処理します。以下に例を示します。

2. 複雑なイベント処理:コンシューマーは一連のイベントを処理してパターンを検出し、結果に基づいてアクションを実行します。以下に例を示します。

3. イベントストリーム処理:コンシューマーはデータストリーミングプラットフォームを使用して、絶え間なく流れるデータ(移動中のデータ)をリアルタイムで処理し、それに基づいて動作します。以下に例を示します。

企業は、それぞれのニーズとユースケースに基づいて、イベント処理スタイルを選択します。

イベント駆動型アーキテクチャーの仕組み

イベント駆動型アーキテクチャーは、分散システムを横断してイベントをリアルタイムに公開、取得、処理、さらにこれに応答するための統合モデルです。あるアプリケーションでイベントが発生すると、それを把握する必要がある他のすべてのアプリケーションにメッセージが自動的に送信されるため、順番に処理を行うことができます。

以下に、イベント駆動型アーキテクチャーの仕組みを順を追って示します。

  1. イベントの発生:例えば、顧客が発注を行った、センサーが温度スパイクを検出した、決済できなかった、などの重要な状態変化が発生します。
  2. イベントプロデューサーによるイベントの発行:イベントが発生したアプリケーションはプロデューサーとして機能し、イベントをイベントブローカーに公開します。
  3. イベントブローカーによるイベントのルーティング:イベントブローカーは、イベントチャネルを管理し、関連するすべてのイベントコンシューマーにイベントを配信する仲介者として機能します。これにより、通信の信頼性と拡張性を保証し、分離を確実に行います。
  4. イベントコンシューマーによるイベントへの対応:イベントチャネルを購読したアプリケーションやサービスがイベントを処理し、在庫の更新、確認メールの送信、アラートのトリガーなどの適切なアクションを実行します。

イベントベースのアーキテクチャーは、非同期式かつ分離型です。つまり、アプリケーションはリアルタイムで情報を共有してタスクを完了するために、相互に認識する必要がありません。イベント情報(メッセージ)は、アプリケーション間で自由かつ自動的に行き来することが可能です。その結果、イベント駆動型アーキテクチャーモデルは、従来のリクエスト駆動型モデルおよびレスポンス駆動型モデルよりもはるかに高速で、高い回復力を備えています。従来のモデルでは、あるアプリケーションが必要とする特定の情報を別のアプリケーションに要求し、応答を待ってから次のタスクに進む必要がありました。また、イベント駆動型アーキテクチャーは分離型であるため、マイクロサービス通信のベストプラクティスであると広く考えられています。

ユースケースと実際の例

イベント駆動型アーキテクチャーは、銀行、小売、製造、物流など、幅広い業種で最新のデジタルエクスペリエンスに活用されています。AI を活用した自動化、イベントインテリジェンス、リアルタイムの応答性を実現するイベント駆動型アーキテクチャーにより、IT のモダナイゼーション、レガシーシステムの分離、マルチクラウド環境全体のシームレスな運用が可能になります。

以下の例は、イベント駆動型アーキテクチャーの実際の機能を示しています。

レストラン業界

  1. 大学生がフードデリバリーアプリケーションを使用してピザを注文します。このアプリケーションでは、大学生の基本情報(名前、住所、支払情報、注文)が取得され、「ピザ注文」イベントが公開されます。
  2. ピザレストランはイベントを購読し、注文を遂行し、自らの「注文準備完了」イベントをフードデリバリーサービスに公開します。
  3. 次に、フードデリバリーサービスは、配達ドライバーを割り当て、ETA をスケジュールし、顧客にピザが配達中であることを通知します。

e コマース

  1. オンラインショッピングの利用者が e コマースサイトにクレジットカード情報を入力すると、「支払送信済み」イベントが公開されます。
  2. 支払システムはイベントを購読し、支払を処理し、成功または失敗を示す自らの「支払処理済み」イベントを発行し、それをウェブサイト UI に送り返します。
  3. UI は顧客に支払状況を表示し、次のステップを促します。

さらに、イベント駆動型アーキテクチャーの例を示します。

IoT テレメトリー

アナリティクスおよびイベントインテリジェンス

自動化

財務トランザクジョン

サプライチェーン

IT のモダナイゼーションとレガシーの分離

通知

一般的なイベント駆動型アーキテクチャーのユースケースには、以下が挙げられます。

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

組織は、イベント駆動型アーキテクチャーの利点を最新のシステムに適用することができます。イベント駆動型アーキテクチャーの主なメリットは以下のとおりです。

  1. リアルタイムの応答性とインテリジェントなワークフロー:イベント駆動型アーキテクチャーにより、イベント発生時にシステムが即座に対応し、自動化されたワークフローと意思決定をリアルタイムでトリガーすることができます。これは、需要ピーク時、例えば、大きな販売イベントや祝祭日には特に重要です。組織は、このような応答性を日常の業務に適用し、サプライチェーンの自動化や不正検知からパーソナライズされたカスタマーエンゲージメントまで、あらゆる業務を改善することができます。
  2. 非同期通信を用いたスピードと効率:イベント駆動型アーキテクチャーのアプリケーションは非同期で通信します。つまり、プロデューサーはイベントメッセージを公開すると、コンシューマーによるイベントメッセージの受信を待つことはありません。このノンブロッキングアプローチにより、パフォーマンスが向上し、遅延時間が短縮され、ボトルネックなしで大量のイベントを処理できるようになります。
  3. 分離と疎結合による柔軟性と拡張性:イベント駆動型アーキテクチャーの各コンポーネントは分離または疎結合しているため、互いの可用性や内部ロジックに依存せず、独立して動作します。これにより、システム全体を中断することなく、サービスを簡単に更新、テスト、およびデプロイすることができます。また、分離によって、必要に応じてプロデューサーやコンシューマーを追加することが容易になり、ビジネスニーズの拡大に合わせてシームレスな拡張が可能です。
  4. 回復力と障害分離:サービスが分離されていれば、1 つのコンポーネントで障害が発生してもシステム全体に波及しません。また、サービスの障害は個別に発生するため、従来の密結合のモデルよりも耐久性と耐障害性に優れたアーキテクチャーになっています。
  5. 将来を見据えた統合:疎結合および非同期式で設計されたイベント駆動型アーキテクチャーは、IT のモダナイゼーション、レガシーシステムの分離、マルチクラウド運用に最適です。コアシステムを書き換えることなく、AI を活用した自動化やイベントインテリジェンスなどの新しいテクノロジーを柔軟に統合できます。

課題、制限、ベストプラクティス

イベント駆動型アーキテクチャーには大きな利点がありますが、設計上および運用上の新たな課題も生じるため、組織は対策を講じる必要があります。イベント駆動型アーキテクチャーを導入する場合は、以下のイベント駆動型アーキテクチャーの課題、制限、ベストプラクティスを考慮して、拡張性が高く回復力があり、適切に管理されたイベント駆動型システムとします。

課題

イベントメッシュの適合性

イベントメッシュは、さまざまなハイパースケーラーを横断して、また、プライベート環境、ハイブリッド環境、およびマルチクラウド環境で、複数のイベントブローカーを接続するアーキテクチャー機能です。イベントメッシュは、イベントストリーミング、イベント管理、モニタリング、動的メッセージルーティング、きめ細かなフィルタリングのような、高度なイベントサービスの万能セットを提供します。イベントブローカーを分散メッシュに接続することで、組織は以下のことが可能になります。

イベントメッシュは、最新システムのバックボーンとして、拡張性が高くリアルタイム対応の可能なイベント駆動型アーキテクチャーの基本レイヤーを構成します。これにより、リアルタイムの応答性を確保しながら、統合を簡素化し、イベントの混乱を減らし、分散環境全体のトラブルシューティング機能を強化することができます。

イベント駆動型アーキテクチャーの制限

イベント駆動型アーキテクチャーのベストプラクティス

イベント駆動型アーキテクチャーの特性

本質的に、イベント駆動型アーキテクチャーが分散環境、ハイブリッド環境、マルチクラウド環境に適しているのは、複数の決定的な特性を持っているからです。

これらの特性を組み合わせることで、イベント駆動型アーキテクチャーは、マイクロサービスのサポートやクラウド環境の統合、イベント駆動型のビジネスプロセスアプリケーションの有効化などを行う場合に、回復力、適応性、成長に向けた準備を整えたリアルタイムシステムを構築するための強力なアプローチになります。

FAQ(よくある質問)

イベント駆動型アーキテクチャーのイベントとは?
イベント駆動型アーキテクチャーのイベントは、エンティティの作成、更新、完了など、ビジネスプロセスやシステムにおける重要な状態変化です。イベントは、重要な事柄が発生したときにアプリケーションから発行されるシグナルであるため、他のシステムはリアルタイムで通知を受け取り、緊密なつながりがなくても対応することができます。イベントの例には、顧客の決済が成功または失敗した場合、出荷品が倉庫に到着するか、倉庫を出発した場合、機械のセンサーが温度スパイクを検出した場合などがあります。
イベント駆動型アーキテクチャーとリクエスト駆動型アーキテクチャーの違いは?

イベント駆動型アーキテクチャーとリクエスト駆動型アーキテクチャーの主な違いは、システムが通信し、変化に対応する方法です。リクエスト駆動型モデルでは、コンシューマーがサーバーに対してデータまたはアクションを要求するとインタラクションが開始され、これにサーバーが応答します。このモデルは通常、同期式です。つまり、リクエスト側が応答を受信するまで待機(ブロック)する、プルベースです。アプリケーションは、更新を要求した場合のみ更新を受信します。

イベント駆動型モデルでは、イベントの発生時(ビジネスシステムにおける重要な状態変化)にインタラクションが開始され、アプリケーションが自動的に対応します。イベント駆動型システムは非同期式であるため、プロデューサーはイベントを公開すると、コンシューマーの応答を待つことはありません。このようなプッシュベースの疎結合モデルにより、アプリケーションは独立して動作し、分散環境、ハイブリッド環境、およびマルチクラウド環境でリアルタイムでイベントを処理することができます。

イベント駆動型アーキテクチャーの主なコンポーネントとは?

イベント駆動型アーキテクチャの主なコンポーネントは、プロデューサー、コンシューマー、イベントブローカー、およびイベントチャネルです。これらのコンポーネントを組み合わせることで、非同期式で結合のゆるやかなイベントフローが作成され、分散環境、およびハイブリッド環境、マルチクラウド環境で、拡張性の高いリアルタイムインタラクションが可能になります。

  • プロデューサー:オーダーの更新、決済、センサーの読取などのイベントを生成または取得し、イベント駆動型システムに公開するアプリケーション。
  • コンシューマー:ワークフローのトリガー、データの更新、通知の送信、または下流プロセスの開始など、イベントの購読、処理、および対応を行うアプリケーション。
  • イベントブローカー:プロデューサーからコンシューマーにイベントをルーティングするメッセージングミドルウェア。信頼性の高い配信、フィルタリング、動的ルーティング、永続化、リプレイなどの機能を提供します。
  • イベントチャネル:プロデューサーとコンシューマーを接続するイベントブローカーが管理する経路。プロデューサーはイベントをチャネルに公開し、コンシューマーは関連するチャネルを購読します。
イベント駆動型アーキテクチャーの主なパターンとは?

イベント駆動型アーキテクチャーのパターンとは、イベント駆動型システムにおけるイベントの取得、ルーティング、保存、および消費方法を定義する、再利用可能な設計アプローチです。イベント駆動型アーキテクチャーの主なパターンは以下のとおりです。

  • 公開/購読 (pub/sub):プロデューサーはイベントをチャネルに公開し、複数のコンシューマーが自動的に購読および対応します。
  • イベントストリーミング:プロデューサーはイベントの連続ストリームをブローカーに公開し、コンシューマーはストリーム内の任意の箇所でイベントの読込、リプレイ、または処理を行うことができます。
  • コマンドクエリ責任分離 (CQRS):読込操作と書込操作は異なるモデルに分割され、更新は非同期式で伝播されます。
  • イベントソーシング:すべての状態変化が不変のイベントとして追加専用ログに保存されており、イベントのリプレイによって現在の状態を再現します。
イベント駆動型アーキテクチャーを使用するメリットとは?

イベント駆動型アーキテクチャーを使用する主なメリットは以下のとおりです。

  • 疎結合:アプリケーションは互いの内部を意識せず独立して動作するため、更新、統合、拡張が容易になります。
  • 拡張性:新しいプロデューサーとコンシューマーをシームレスに追加できます。ワークロードは、ハイブリッド環境やマルチクラウド環境でスケーリングできます。
  • 回復力:分離型のサービスにより障害が分離されるため、1 つのコンポーネントがダウンしてもシステム全体に影響が及びません。
  • スピードとリアルタイムの応答性:非同期式のノンブロッキング通信により、システムはビジネスイベントに即座に対応し、大量のデータを低遅延で処理することができます。