Azure メッセージング サービスの中から選択する - Azure Event Grid、Event Hubs、および Service Bus

Azure には、ソリューション全体にわたるイベントまたはメッセージの配信を支援する 3 つのサービスがあります。 サービスは Azure Event Grid、Azure Event Hubs、Azure Service Bus です。

いくつかの類似点もありますが、各サービスはそれぞれ、特定のシナリオ向けに設計されています。 この記事では、これらのサービスの相違点について説明し、アプリケーションでどのサービスを選択すればよいかを把握しやすくします。 多くの場合、メッセージング サービスは補完的で、組み合わせて使用することができます。

イベントとメッセージの違い

イベント配信サービスとメッセージ配信サービスの間には、重要な相違点があります。

Event

イベントは、状態または状態変更の軽量の通知です。 イベントの発行元は、イベントの処理方法に関して何も予測していません。 通知の処理方法はイベントの処理者が決定します。 イベントは、個別の単位またはシリーズの一部になることができます。

個別のイベントでは、状態の変更が報告され、対処可能です。 処理者が次の手順を実行するために必要なのは、何かが起こったことを知ることだけです。 イベント データには、発生した事象に関する情報は含まれますが、イベントをトリガーしたデータは含まれていません。 たとえば、あるイベントは、ファイルが作成されたことを処理者に通知します。 このイベントにファイルに関する一般情報が含まれることはありますが、ファイル自体は含まれません。 個別のイベントは、スケーリングする必要があるサーバーレス ソリューションに最適です。

一連のイベントは、状態を報告し、分析可能です。 イベントは、時間順に並べられ、相互に関連付けられています。 処理者は、一連のイベントを分析して、何が起こったかを知る必要があります。

Message

メッセージは、サービスによって生成される生データで、別の場所で使用または格納されます。 メッセージには、メッセージ パイプラインをトリガーしたデータが含まれています。 メッセージの発行元は、処理者によるメッセージの処理方法を予測しています。 両者の間には協定が存在します。 たとえば、発行元は、メッセージを生データで送信し、処理者がそのデータからファイルを作成し、作業が終わったときに応答を送信すると予測しています。

次に、Azure Event Grid、Azure Event Hubs、Azure Service Bus が何であるか、簡単に確認しましょう。

Azure Event Grid

Azure Event Grid は、メッセージ キュー テレメトリ転送 (MQTT) および HTTP プロトコルを使用した柔軟なメッセージ消費パターンを提供する、スケーラブルでフル マネージドの 発行/サブスクライブ メッセージ配信サービスです。 Azure Event Grid を使用すると、デバイス データを使用したデータ パイプラインの構築、アプリケーションの統合、イベントドリブン サーバーレス アーキテクチャの構築を行うことができます。

このサービスは、イベント駆動型のリアクティブ プログラミングを可能にするイベント バックボーンです。 発行-サブスクライブ モデルを使用します。 公開元はイベントを発行しますが、イベントの処理方法については想定していません。 どのイベントを処理するかはサブスクライバーが決定します。

Event Grid は他の Azure サービスと緊密に統合されており、サード パーティのサービスと統合することもできます。 イベントの使用が簡略化され、定期的にポーリングする必要がなくなるためコストも削減できます。 Event Grid は、Azure および Azure 以外のリソースからのイベントを効率的かつ確実にルーティングします。 イベントは、登録されたサブスクライバーのエンドポイントに配信されます。 イベント メッセージには、サービスやアプリケーションの変更に対応するために必要な情報が含まれています。 Event Grid は、データ パイプラインではないため、更新された実際のオブジェクトは配信しません。

次の特性があります。

  • 動的にスケーラブル
  • 低コスト
  • サーバーレス
  • イベントを少なくとも 1 回配信

Event Grid には、2 つのエディションが提供されています。Azure Event Grid は Azure 上で利用できるフル マネージドの PaaS サービスで、Azure Arc を使用した Kubernetes 上の Event Grid を使用すると、オンプレミスやクラウドを問わず、Kubernetes クラスターがデプロイできる任意の場所で Event Grid を使用することができます。 詳細については、Azure Event Grid の概要Azure Arc を使用した Kubernetes 上の Event Grid の概要に関する記事を参照してください。

Azure Event Hubs

Azure Event Hubs は、ビッグ データのストリーミング プラットフォームとなるイベント インジェスト サービスです。 1 秒間に何百万ものイベントを受信して処理することができます。 テレメトリおよびイベント ストリーム データのキャプチャ、保持、再生を容易にします。 データは多数のソースから同時に取得できます。 Event Hubs を使用すると、テレメトリとイベントのデータをさまざまなストリーム処理インフラストラクチャや分析サービスで使用できるようになります。 データ ストリームとしても、バンドルされているイベント バッチとしても使用できます。 このサービスは 1 つのソリューションで、リアルタイム処理用の高速なデータ取得と、格納された生データの繰り返し再生の両方を可能にします。 ストリーミング データをファイルにキャプチャして、処理と分析で使用できます。

次の特性があります。

  • 待ち時間の短縮
  • 1 秒間に何百万ものイベントを受信して処理することができます。
  • イベントを少なくとも 1 回配信

詳細については、「Event Hubs の概要」を参照してください。

Azure Service Bus

Service Bus は、メッセージ キューと、パブリッシュとサブスクライブのトピックを備えたフル マネージド エンタープライズ統合メッセージ ブローカーです。 このサービスは、トランザクション、順序付け、重複の検出、瞬間的な整合性を必要とするエンタープライズ アプリケーションを対象としています。 Service Bus を使用すると、クラウドネイティブ アプリケーションでビジネス プロセスに対する信頼性の高い状態遷移管理を実現できます。 損失や重複が許されない高価値のメッセージを処理する場合は、Azure Service Bus を使用してください。 このサービスは、ハイブリッド クラウド ソリューション全体で安全性の高い通信を容易にします。そして、既存のオンプレミス システムをクラウド ソリューションに接続できます。

Service Bus はブローカー メッセージング システムです。 使用側がメッセージを受信する準備ができるまで、メッセージを "ブローカー" (キューなど) に格納します。 次の特性があります。

  • ポーリングが必要な信頼性の高い非同期メッセージ配信 (サービスとしてのエンタープライズ メッセージング)。 Service Bus を使用していて、キューをポーリングせずにメッセージを受信する必要がある場合は、Service Bus でサポートされている TCP ベースのプロトコルを使用する長時間ポーリング受信操作を使用することでそれを実現できます。
  • 先入れ先出し (FIFO)、バッチ処理/セッション、トランザクション、配信不能処理、一時的制御、ルーティングとフィルタリング、重複検出など、高度なメッセージング機能
  • メッセージを少なくとも 1 回配信
  • メッセージの任意の順次配送

詳細については、Service Bus の概要に関する記事を参照してください。

サービスの比較

次の表では、Event Grid、Event Hubs、Service Bus の 3 つのサービスを比較しています。

サービス 目的 Type いつ使用するか
Event Grid リアクティブ プログラミング イベントの配信 (個別イベント) 状態の変更に反応する
Event Hubs ビッグ データのパイプライン イベントのストリーミング (シリーズ) テレメトリと分散データ ストリーミング
Service Bus 高価値のエンタープライズ メッセージング Message 注文処理や金融取引

サービスを組み合わせて使用する

場合によっては、異なる役割を実行するために複数のサービスを並行して使用します。 たとえば、eコマース サイトでは、注文の処理に Service Bus、サイトのテレメトリのキャプチャに Event Hubs、イベント (アイテムの出荷など) への応答に Event Grid を使用できます。

別のケースでは、これらのサービスをリンクしてイベントとデータのパイプラインを形成することもできます。 Event Grid を使用して、他のサービスのイベントに応答することもできます。 Event Grid と Event Hubs を使用して Azure Synapse Analytics にデータを移行する例については、ビッグ データの Azure Synapse Analytics へのストリーム配信に関するページを参照してください。 次の図は、データ ストリーミングのワークフローを示しています。

Event Hubs、Service Bus、Event Grid の接続方法を示す図。

次の記事をご覧ください。