はじめに
AzureのメッセージングサービスをMS Learnで勉強していたが日本語が難解なのでQiita上に翻訳しつつ理解する。
Azureのメッセージングサービス4種
- メッセージ系
- Queue Storage
- シンプルなメッセージキュー、データ量が多い場合
- Service Bus
- キュー:単一の受信者(サブスクライバ)
- トピック:複数の受信者(サブスクライバ)
- Queue Storage
- イベント系
- Event Grid
- シンプルなイベント
- Event Hubs
- 高スループット、多数のパブリッシャー、セキュリティ、回復性を持つイベント
- Event Grid
メッセージとイベントの違い
項目 | メッセージ | イベント |
---|---|---|
データ | 含まれる | 含まれない(参照のみで軽量) |
送信側が受信側を意識するか | する | しない |
特徴 | 分散アプリで通信の処理を保証したい | ブロードキャストで利用、多くの場合一時的 |
メッセージ
Queue Storageの特徴
- シンプルなキュー
- Azure Storageを利用
- 無制限のキューサイズ
- RESTベース
- ストレージの容量で課金
- 単一の送信先
Service Bus
Service Bus キューの特徴
- 柔軟なキュー
- 容量は最大80GB
- 以下のいずれかを選択可能
- At-Least-Once:最低1回(重複あり、損失なし)
- At-Most-Once:最大1回(重複なし、損失あり)
- トランザクション有(複数メッセージをグループ化)
Service Bus トピックの特徴
- 複数の送信先
- 複数クライアントからのサブスクライブ・処理が可能
キューのメリット
- 信頼性向上
- メッセージの読み取り側の準備ができるまで待機させられる(非同期に処理できる)
- メッセージの配信保証
- At-Least-Once
- 少なくとも1回。つまり1回は確実に配信されるが、重複(2回以上同じメッセージ)がありうる。
- At-Most-Once
- 最大1回。つまり0回=配信されないことがある。重複はない。
- 先入れ先出し法(FIFO:First in, First out)
- 通常、先にいれたメッセージが先に出て行く(FIFO)だが、そうでない(順序が保証されない)ものがある。順序が入れ替わると困る場合はFIFO保証を含むシステムを選択する必要がある。
- At-Least-Once
- トランザクションのサポート
- グループ化されたメッセージが全て処理されるか、どのメッセージも処理されないかのいずれかの状態になるか。
サービスの選択
Queueストレージ、Serviceバス(キューorトピック)の選択基準は以下の通り。
Queueストレージを選択(最も単純)
- データ量が多い(キューのサイズが80GBを超える)
- 簡単にコーディングできるシンプルなキューがほしい
Service Busキューを選択
- At-Most-Once保証(最大1回、重複なし)が必要
- 順序保証(FIFO)が必要
- トランザクションが必要(全て処理される or 何も処理されない)
- データ量が比較的少ない(キューのサイズが80GB未満)
Service Busトピックを選択(最も複雑)
- 複数のサブスクライバー(受信者)が必要
イベント
Event Grid
特徴
- フルマネージドのイベントルーティングサービス
- イベントベースのアプリや、サーバレスのアプリを簡単にビルドできるようになる
- ほとんどのAzureサービスからのPublish/Subscribeをサポート
- サードパーティサービスとも連携可
- At-Least-Once(少なくとも1回、重複あり)
- 一度の配信でひとつのイベントを配信
イベントとは
- EventGridを通過するメッセージデータ
- イベントは最大64KB
- 変化の通知が目的でデータは含まれない。多くの場合、データを指すURLや識別子が渡される。
イベントソースとは
- Event Gridにイベントを送信するクライアント
- 種類
- サブスクリプション、リソースグループ
- コンテナーレジストリ
- イベントハブ
- Service Bus
- ストレージアカウント
- Media Service
- Azure IoT Hub
- カスタムイベント
イベントトピックとは
- イベントをグループに分類するもの
- トピックはパブリックのエンドポイントであり、イベントの送信先となる。
- 以下の2種類がある
- システムトピック
- Azure組み込みのトピック。
- Azureサブスクリプションには表示されないが、サブスクライブは可能。
- カスタムトピック
- アプリまたはサードパーティのトピック。
- サブスクリプションに表示される。
- システムトピック
イベントハンドラ(サブスクライバ)とは
- Event Gridからイベントを受信するコンポーネント
- 種類
- Azure Functions
- Webhook
- Azure Logic Apps
- Microsoft Flow
Event Hubs
特徴
- Event Gridよりも高スループット、多数のパブリッシャー、セキュリティ、回復性を持つ
- キャプチャ機能を利用して、Azure Data LakeまたはBLOBストレージに永続化
- 全ての発行元(パブリッシャー)が認証・トークンが発行される
- At-Least-Once(少なくとも1回、重複あり)