Azureあの機能この機能:Stream Analytics

こんにちは。日山(@hiiyan0402)です。
今回は現在(2015/03/01時点で)プレビュー中のAzureサービスである Stream Analytics についての説明と、利用方法の考察します。

Stream Analytics とは

Stream Analytics は 2014/10/28 からプレビュー機能として公開されたサービスで、
マイクロソフトのサイトでは「クラウドにおけるリアルタイムのストリーム処理」と説明されています。

Microsoft Azure Stream Analytics
http://azure.microsoft.com/ja-jp/services/stream-analytics/

機能をざっくり説明すると、「入力データストリームを、定義したクエリに応じてリアルタイム処理(データ変換&フィルタリング)を行い、出力する」といったものになります。

入力データストリームとして「Azure Blob」「Event Hubs」のうち複数のデータソースを指定できます。
データの出力先として「SQLDatabase」「Azure Blob」「Azure Table」「Event Hubs」のうちどれか1つを指定できます。

3c078e78-ad3b-97a5-4280-2bb0470bc9dc

ストリーミング処理の定義はSQLに非常に近いクエリ言語(Stream Analytics Query Language)で行います。
クエリの定義は管理ポータル上で行うことができます。

4aa52a78-fdc1-e3a4-bc6f-f49d95aa98ad

Stream Analytics Query Language の仕様については以下の MSDN で確認できます。
クエリ言語については、非常にT-SQLに似ています。例えば、Select句でのデータフィルタリング、Where句での複数データソースの統合、そしてウィンドウ関数によるデータサマライズなどが実現できます。

MSDN: Stream Analytics Query Language Reference
https://msdn.microsoft.com/library/dn834998.aspx

ストリーミング処理の代替としての利用

例えばIoTソリューションにおける次々と送られてくるデバイスデータなどのデータストリームは、まず Event Hubs で受け、それをクラウドサービスで順次受信して処理させる必要がありました。そのクラウドサービスについては Event Processor Host などを用いて自身で実装する必要があります。(前回記事参照)

Stream Analytics はそのクラウドサービスの代替となりえるサービスになります。Stream Analytics は管理ポータル上でのクエリ定義だけで、Event Hubs に投入されたデータストリームをリアルタイムで処理することができます。つまりクラウドサービスと同等の処理を管理ポータル上の操作だけで実現することができます。これで自身でクラウドサービスを実装し、稼働させる必要がなくなります。

図7

しかし、Stream Analyticsで行えることは、自身でクラウドサービスを実装するのと比べると非常に制限されています。Stream Analyticsはクラウドサービスと比べ、よりPaaSと言えます(実装速い/管理楽/柔軟性低い)。
単純なストリーミング処理は Stream Analytics で、複雑なストリーミング処理はクラウドサービスで、と使い分けることをオススメします。

利用シーン

考えられる Stream Analytics の利用シーンについて考察し、以下に羅列しました。

Event Hubs のデータを永続化

Event Hubsのストリーミングデータをそのまま Azure Table / Blob / SQLDatabase へ投入するのに使えます。
例えばIoTソリューションにおいて、センサーデバイスからセンサーデータを AMQP で EventHubs へ投入、そのデータを Stream Analytics 経由で Table / Blob, SQLDatabase のいずれかへ投入して永続化。そして、そのデータを Azure Machine Learning で分析する、なんて使い方ができます。データ収集から分析まで、ノンプログラミングで実現できます。
また Power BI を用いることでデータをビジュアライズしても良いと思います。

図4

Event Hubs のデータをサマライズして SQLDatabase へ格納

ウィンドウ関数を用いることで、例えば5分間のデータを一括で処理することができます。
そこでAVG関数やMAX/MIN関数等を使うと、一定間隔でのデータサマライズを行うことができます。
またCOUNT関数とWHERE句を活用することで、特定のデータが一定時間に一定数以上あった場合にのみ出力、なんてことができます。Azureのアラート機能みたいなことが実現できます。

図3

複数 Event Hubs の統合

Stream Analytics は 入力データストリームとして複数指定できるので、
複数の Event Hubs のデータストリームを1つの Event Hubs のデータストリームに統合することができます。

図5

Azure Blob のデータをストリーミングデータとして Event Hubs へ投入

Blobに格納されたビックデータをデータストリームとしてEvent Hubsへ投入し、順次処理することができます。
Blobファイルを大量のインスタンスで処理したいときなどに活用できます。
(HDInsight使えばいいじゃん、とも言えますが・・・)

図6

アーキテクチャ設計

Stream Analytics に関するアーキテクチャ設計については、マイクロソフトから以下のドキュメントが公開されています。非常に参考になります。

Reference Architecture: Real-Time Event Processing with Microsoft Azure Stream Analytics
http://azure.microsoft.com/ja-jp/documentation/articles/stream-analytics-real-time-event-processing-reference-architecture/

Stream Analytics を使う

機能の有効化

Stream Analytics はプレビュー中であるため、利用するためには申請が必要です。
サブスクリプション管理/プレビュー機能の画面で機能を有効化しましょう。

4aa52a78-fdc1-e3a4-bc6f-f49d95aa98ad

Stream Analytics を学ぶ

マイクロソフトで公開されているドキュメントを読めば、だいたい使えます。
チュートリアルから開発ガイド、クエリ言語リファレンスまで公開されています。
http://azure.microsoft.com/ja-jp/documentation/services/stream-analytics/

Stream Analytics の開発チームブログ

Stream Analytics の開発チームブログは以下のサイトです。最新アップデート情報が拾えます。
http://blogs.msdn.com/b/streamanalytics/

Stream Analytics のフィードバック

利用したらフィードバックを出すと、より使いやすいようにサービスがアップデートしていくことでしょう。
http://feedback.azure.com/forums/270577-azure-stream-analytics

今回も最後までご覧いただきありがとうございました!