落とし穴に立て札を立てるが如く

ハマりどころの解決が少しでも早くなることを願って書いていきます

Azureのメッセージングサービスに再入門 似ているサービスの違いを理解しよう

f:id:nam_yu_sql:20200228094745j:plain この記事は後ほどcloud.config techblogにマルチポストされる予定です。

はじめに

最近社内でMCP資格取得の機運が高まってきていて私の方でもAZ-203取得に向けて久々にAzureの学習を始めたところです。
AZ-203の試験範囲にはAzureのメッセージングサービスも含まれているのですが、これらのうちどういった時にどれを利用すればいいか迷ったりしませんか?
Azureのメッセージングサービスは大きく分けてQueue Storage、Service Bus Queue、Event Grid、Event Hubsの4つがあります。
今回はこれらのサービスについて特徴や使いどころについて纏めておきたいと思います。

MessageとEvent

まず、4つのメッセージングサービスを分ける大きな観点として、メッセージとして送るものがメッセージかイベントかというものがあります。
まず、メッセージとはその言葉のイメージ通り何かしら情報が入った小包のようなものです。
それ自体がデータとしてこれを受け取った側はその中に含まれるデータを使って処理を行います。
4つのサービスの中ではQueue Storage、Service Bus Queueがこれにあたります。
一方で、イベントはそのような送られた物自体を使って処理を行うものではなく、何かしらのイベントが起きたこと(例えば、Blob Storageにファイルが追加された、など)を伝えます。
付加情報として例えば追加されたBlob Storageのファイルに関する情報等が送られますが、そのファイル自体は送らず、その参照情報を送るので、イベントを受け取った側はそのファイルに対して直接操作を行うといった動作が可能になります。
4つのサービスの中ではEvent Gridと Event Hubsがこれにあたります。

MessageベースのQueue StorageとService Bus Queueの違い

Queue Storageの大きな特徴は、キューとしてAzure Storageを利用していることです。
Azure Storageは保存できる容量が莫大であるため、Queueに保持できるメッセージの合計容量の制限がほぼほぼありません。
一方でService Bus Queueは、キューのサイズに制限がありますが、メッセージをキューに入った順で確実に処理できるFIFOの仕組みなど、機能面で優れているという特徴があります。
キューのサイズは、パーティション分割の仕組みを利用して最大80GBまでで、その中に1メッセージあたり256kbのメッセージを送ることができます。
もしメッセージの合計容量がキューのサイズを超えると、後からやってきたメッセージはエラーとなってしまいます。
なので、基本的にメッセージの容量が合計で80GBを超えるならQueue Storageを利用し、それ以下であれば Service Bus Queueを利用するといった形になります。

EventベースのEvent GridとEvent Hubsの違い

Event HubsとEvent Gridの使い分けるシーンの大きな違いとしては、利用規模が挙げられます。
Event Hubsの主な利用用途はイベントの発行元が多数存在するようなビッグデータパイプラインです。
大量のイベントを高速で処理する必要がある際に利用され、Stream Analytics等を用いることでイベントを分析することもできます。
一方でEvent Hubsはよりシンプルで、イベント駆動のアプリケーションを作るのに向いています。
イベントの送信元には他のAzureサービスであるBlob Storage等を設定でき、イベントを受信したときに処理を行う側としてFunctionsなどを指定してやることで単純に○○が起きたら○○を行うといった動作の流れを作ることができます。

おわりに

今回の記事では自分のAZ-203対策も兼ねてAzureのメッセージングサービスであるQueue Storage、Service Bus Queue、Event Grid、Event Hubsとそれらの違いについて解説しました。
Azureのメッセージングサービスは大きく分けて4つあり、大きく分けるとメッセージを扱うものとイベントを扱うものがあります。
その中でさらに、メッセージの合計容量が大きい場合(80GBを越す)はStorage Queueを利用し、メッセージの容量が小さい場合やメッセージを受け取る側がFIFOでメッセージを受け取りたい場合はService Bus Queueを利用します。
イベントを扱うサービスにはEvent HubsとEvent Gridがあり、それぞれEventの発行元が多かったり分析用データの蓄積のために処理速度が必要だったりする場合はEvent Hubsを利用し、発行元が1箇所で決まっている場合等要件がシンプルな場合はEvent Gridを利用します。
それぞれのサービスの違いについてより詳しく知りたい場合はmsdnのドキュメントや、あるいはMicrosoft製品の学習サイトであるMicrosoft Learnでも取り扱っています。
Microsoft LearnではMicrosoft製品について分かりやすくて順を追って解説してくれているので入門の際の学習リソースとして便利なのでぜひ使ってみてください。
https://docs.microsoft.com/ja-jp/learn/modules/choose-a-messaging-model-in-azure-to-connect-your-services/index