イベントメッシュ¶
イベントメッシュは、イベントを送信者から受信者に配信することを簡素化するように設計された動的なインフラストラクチャです。Apache KafkaやRabbitMQなどの従来のメッセージチャネルアーキテクチャと同様に、イベントメッシュはメッセージの非同期(ストアアンドフォワード)配信を提供し、送信者と受信者を時間的に切り離すことができます。従来のメッセージチャネルベースの統合パターンとは異なり、イベントメッシュは、基礎となるイベントトランスポートインフラストラクチャ(Kafka、RabbitMQ、またはクラウドプロバイダーインフラストラクチャなどのフェデレーションされたソリューションのセットである可能性があります)から切り離すことにより、送信者と受信者のルーティングに関する懸念も簡素化します。メッシュは、あらゆる環境、さらにはクラウド間でも、相互接続されたイベントブローカーのネットワークを介して、プロデューサーからコンシューマーにイベントをシームレスかつ疎結合な方法で転送します。
イベントメッシュでは、イベントを生成するアプリケーションと消費するアプリケーションの両方が、イベントルーティングやサブスクリプション管理を実装する必要はありません。イベントプロデューサーはすべてのイベントをメッシュに公開でき、メッシュは、アプリケーションがイベントをチャネルに細分化する必要なく、関心のあるサブスクライバーにイベントをルーティングできます。イベントコンシューマーは、複数のサブスクリプションとアプリケーションレベルのイベントフィルタリングを実装して目的のイベントを選択する必要なく、メッシュ構成を使用して、きめ細かいフィルター式を使用して関心のあるイベントを受信できます。イベントのシリアル化とデシリアル化は、より複雑なルーティングとフィルタリングを実装する必要なく、言語ネイティブライブラリで処理できます。
Knativeイベントメッシュ¶
上記のイベントブローカーは、Knative EventingのコアAPIであるBroker
APIに直接マッピングされます。これは、イベントイングレスのための発見可能なエンドポイントを提供し、Trigger
APIは、イベントフィルタリングと配信機能を提供します。これらのAPIを使用すると、Knative Eventingは上記の定義に従ってイベントメッシュを提供します
上記の図に見られるように、イベントメッシュは、イベントのイングレスとイグレスのためにBroker
およびTrigger
APIで定義されています。Knative Eventingは、"ダックタイピング"と呼ばれる部分スキーマパターンを使用して、複数のリソースがイベントメッシュに参加できるようにします。ダックタイピングを使用すると、複数のリソースタイプが、"URLでイベントを受信できる"または"宛先にイベントを配信できる"などの共通機能をアドバタイズできます。Knative Eventingはこれらの機能を使用して、Broker
にイベントを送信するための相互運用可能なソースのプールと、Trigger
ルーティングされたイベントの宛先を提供します。Knative Eventing APIには、3つのカテゴリのAPIが含まれています
- イベントイングレス:イベント送信者の接続をサポートします:SourceダックタイプとSinkBindingにより、アプリケーションがイベントを
Broker
に配信するように簡単に構成できます。アプリケーションはイベントを送信でき、ソースがインストールされていなくてもEventingを使用できます。 - イベントルーティング:
Broker
およびTrigger
オブジェクトは、メッシュとイベントルーティングの定義をサポートします。Broker
はアドレス指定可能なイベント宛先の定義と一致するため、あるクラスターのBrokerから別のクラスターのBrokerにイベントをリレーできることに注意してください。同様に、Trigger
は多くのソースと同じ配信可能なダックタイプを使用するため、イベントの直接配信の代わりにイベントメッシュを簡単に代用できます。 - イベントイグレス:配信可能なコントラクトは、宛先としてベアURLを指定するか、アドレス指定可能なインターフェイス(
status.address.url
を持つ)を実装するKubernetesオブジェクトを参照することをサポートします。すべてのイベント宛先("シンク")は、CloudEvents配信仕様を実装する必要がありますが、必ずしもKubernetesの動作を実装する必要はありません。URLで参照されるベアVMは、許容可能なイベントイグレスです。
イベントソースとシンクは、イベントエコシステムをサポートするコンポーネントですが、イベントメッシュの一部ではないことに注意することが重要です。イベントメッシュの一部ではありませんが、これらのエコシステムコンポーネントはメッシュを補完し、"イベントメッシュ"とのスムーズな統合または接続のためにダックタイプAPI(Callable
/Addressable
)からメリットを得ます。