概要
イベント駆動型アーキテクチャとは、アプリケーション設計用のソフトウェア・アーキテクチャモデルです。イベント駆動型のシステムでは、分離されたサービス間でイベントのキャプチャ、通信、処理を行います。つまり、システムは非同期でありながら情報を共有し、タスクを実行することができます。
リアルタイムで顧客データを利用する必要がある顧客エンゲージメント・フレームワークなど、先進的なアプリケーション設計の多くはイベント駆動型です。イベント駆動型アプリケーションはどのプログラミング言語を使用しても作成できます。これはイベント駆動は言語ではなく、プログラミングによるアプローチだからです。イベント駆動型アーキテクチャでは結合が最小限になるので、先進的な分散アプリケーション・アーキテクチャに適した選択肢となります。
EDA は疎結合です。これはイベントプロデューサーはどのイベントコンシューマーがイベントを待機しているか認識せず、イベントは結果を認識しないからです。
イベントとは
イベントは、システムのハードウェアまたはソフトウェアの状態における何らかの重要な出来事または変化の記録です。イベント通知、つまりイベントが発生したことをシステムの他の部分に知らせるために、システムが送信するメッセージまたは通知とは異なります。
イベントのソースは、内部入力の場合も外部入力の場合もあります。マウスクリックやキーストロークなどのユーザー操作やセンサー出力などの外部ソースから発生することもあれば、プログラムの読み込みなどによってシステム内部で発生することもあります。
Red Hat のリソース
デカップリングと疎結合
デカップリングと疎結合は、ソフトウェア・アーキテクチャとイベント駆動型システムにおける概念で、関連してはいますが異なるものです。
デカップリングとは、システム内の各コンポーネント間の直接の依存関係をなくすか最小限に抑え、どのコンポーネントも別のコンポーネントに依存する必要がないようにすることです。EDA のコンテキストでは、イベントを生成するコンポーネントが特定のコンシューマー・コンポーネントを考慮せずにイベントデータを送信するようにすることでデカップリングを実現できます。このようにつながりを断つことによりコンポーネントを独立させることができ、システム全体の柔軟性が向上します。
疎結合は、コンポーネント間の相互依存の程度を軽減することを目的としたデカップリングの一種ですが、コンポーネントを完全に分離するわけではありません。疎結合システムでは、コンポーネントが相互に対話する場合がありますが、その対話はいかなる形式の依存性も生じさせない方法で行われます。
どちらのシステムも柔軟性と独立性を促進し、その結果、俊敏性と拡張性の両方を兼ね備えたシステムが構築されます。
イベント駆動型アーキテクチャが機能する仕組み
イベント駆動型アーキテクチャは、イベントプロデューサー (パブリッシャー) とイベントコンシューマー (サブスクライバー) で構成されています。イベントプロデューサーはイベントを検出または感知し、イベントをメッセージとして表現します。デカップリングにより、イベントのコンシューマーやイベントの結果を知ることはありません。
検出されたイベントは、イベントプロデューサーからイベントチャネルを通じてイベントコンシューマーに送信され、イベント処理プラットフォームで非同期的に処理されます。イベントが発生したときには、その情報がイベントコンシューマーに伝わる必要があります。コンシューマーはイベントを処理することもあれば、ただ影響を受けるだけの場合もあります。
イベント処理プラットフォームはイベントに対して適切な対応を実行し、アクティビティをダウンストリームの適切なコンシューマーに送信します。このダウンストリーム・アクティビティの出力が、イベントの結果となります。
Apache Kafka はイベント処理によく使われる分散データ・ストリーミング・プラットフォームで、イベントストリームのパブリッシュ、サブスクライブ、保存、処理をリアルタイムで処理できます。Apache Kafka は、高スループットとスケーラビリティが欠かせないさまざまなユースケースに対応し、特定のアプリケーションでのデータ共有に対してポイントツーポイントの統合の必要性を最小化するため、レイテンシーがミリ秒単位にまで短縮されます。
イベント処理プラットフォームとして機能するミドルウェア・イベント・マネージャーは他にもあります。
イベント駆動型アーキテクチャ・モデル
イベント駆動型アーキテクチャは、Pub/Sub モデルまたはイベント・ストリーム・モデルをベースにして構築できます。
Pub/Sub モデル
イベントストリームへのサブスクリプションをベースにした、メッセージング・インフラストラクチャです。このモデルでは、イベントが発生したりパブリッシュされたりすると、通知を受ける必要があるサブスクライバーに送信されます。
イベント・ストリーミング・モデル
イベント・ストリーミング・モデルでは、イベントはログに書き込まれます。イベントコンシューマーはイベントストリームにサブスクライブしませんが、ストリームの任意の部分から読み取りを行い、いつでもストリームに接続することができます。
イベントストリーミングには、次のようないくつかの種類があります。
- イベントストリーム処理は、Apache Kafka のようなデータ・ストリーミング・プラットフォームを使用して、イベントを取り込み、イベントストリームを処理または変換します。
- シンプルなイベント処理では、イベントによって、即座にイベントコンシューマーでアクションがトリガーされます。
複雑なイベント処理では、パターンを検出するために、イベントコンシューマーが一連のイベントを処理する必要があります。イベントストリーミング処理は、イベントストリームから意味のあるパターンを検出するのに使用できます。
イベント駆動型アーキテクチャのメリット
EDA は、変化に適応し、リアルタイムで意思決定を行ってワークフローを改善できる柔軟なシステムを実現するのに役立ちます。リアルタイムで状況を把握できるので、システムの現状を表すすべての利用可能なデータを使用して、手動または自動でビジネス上の意思決定を下せます。
IoT (モノのインターネット) デバイス、アプリケーション、ネットワークなどのイベントソースで発生したイベントはすぐにキャプチャされ、ステータスと応答情報はイベントプロデューサーとイベントコンシューマーの間でリアルタイムで共有されます。
イベント駆動型アーキテクチャをシステムとアプリケーションに追加すると、アプリケーションのスケーラビリティと応答性、およびビジネス上の意思決定の改善に必要なデータとコンテキストへのアクセスを向上させることができます。
イベント駆動型アーキテクチャはデカップリングという利点を備えており、データまたはサービスのプロデューサーとコンシューマーが直接通信する必要がなく、より柔軟でスケーラブルなシステムがもたらされます。これにより、新しいコンポーネントの統合が単純化され、フォールトトレランスが促進され、システム全体の効率が向上します。
Red Hat のイベント駆動型アーキテクチャを選ぶ理由
Red Hat は、統合ツールと管理ソフトウェアを提供し、レガシー・テクノロジーとマイクロサービスをハイブリッドクラウド環境上で速やかに接続できるようにして、イベント駆動型アーキテクチャをアジャイル・インテグレーションでサポートします。
Red Hat OpenShift は Red Hat Application Foundations のツールセットと連携して、開発者の生産性の向上、CI/CD パイプラインの自動化、早期かつ開発サイクル全体を通じたセキュリティへの取り組みの移行を支援します。ランタイムにおけるアプリケーションのセキュリティを実現しながら、DevSecOps の実践を自動化するため、ソフトウェア・サプライチェーンの安全性が向上します。
OpenShift Dev Spaces の機能は、開発者には高速で一貫性と信頼性に優れた開発環境を、IT 運用チームには一元制御機能を提供します。OpenShift の Serverless や Service Mesh などの機能や、Red Hat Application Services のアプリケーション・ランタイムとフレームワーク、 API 管理、データストリーミング、イベント駆動型サービスの機能により、開発者は言語やツールにセルフサービスでアクセスし、生産性を高めることができます。開発者が特定のツールを使いたい場合は、Red Hat が提供する、OpenShift と互換性のある広範なパートナー・ソリューションのエコシステムから選ぶことができます。
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。