最近、Microsoft は、ほぼリアルタイムモードでのストリーミングデータ処理用に作成された新しいサービスの予備バージョンであるAzure Stream Analyticsを 発表しました 。
Azure Stream Analyticsの現在のバージョンは、Azure Event HubとAzure Blob Storageに接続してデータストリーム(入力と呼ばれる)を受信し、Event Hubs、Blob Storage、Azure SQLデータベースに接続して結果(出力)を記録します。 ストリームプロセッサは、SQLに似た言語を使用して設計されているため、ストリームデータの処理と信頼できる情報への変換をリアルタイムで指定できます。
そして、ここでクラウドの力が前面に出ます。 わずか数ステップと数時間で、毎秒何万ものイベントやメッセージを処理できる信頼性の高いインフラストラクチャを構築できます。
このサービスを使用してどれだけ達成できるかを知りたいと思いました。 そこで、テストケースを作成しました。 私の実験の基礎は、このリンクにあるマニュアルです。
マニュアルには、「ジョブの開始」ステップで若干の不正確さがあります。 タスク(ジョブ出力)の開始時刻を設定するには、タスク(ジョブ)の「構成」セクションに移動する必要があると書かれています。 ただし、この設定は[構成]セクションにはありません。 このパラメーターは、タスクを開始するウィンドウで構成されます。
テストをより面白くするために、次の設定を変更しました。
- Event Hubのスケールを10ユニットに設定します。 したがって、1秒あたり10,000イベントを達成できる可能性があります。
- イベントハブコードを変更して、メッセージ数を増やしました。
- コマンドラインアプリケーションのN個の同時インスタンスを実行する小さなPowerShellスクリプトを作成しました
- これらはすべて、Event HubとStream Analyticsが機能する同じAzureデータセンター(西ヨーロッパ)の仮想マシンで行われました
Service Bus Event Hubソースコードの変更
不要なコードをすべて削除しました(イベントハブの作成など)。 その結果、私のProgram.csファイルは次のようになります。
static void Main(string[] args) { System.Net.ServicePointManager.DefaultConnectionLimit = 1024; eventHubName = "salhub"; Console.WriteLine("Start sending ..."); Stopwatch sw = new Stopwatch(); sw.Start(); Paralelize(); sw.Stop(); Console.WriteLine("Completed in {0} ms", sw.ElapsedMilliseconds); Console.WriteLine("Press enter key to stop worker."); Console.ReadLine(); } static void Paralelize() { Task[] tasks = new Task[25]; for (int i = 0; i < 25; i++) { tasks[i] = new Task(()=>Send(2000)); } Parallel.ForEach(tasks, (t) => { t.Start(); }); Task.WaitAll(tasks); } public static void Send(int eventCount) { Sender s = new Sender(eventHubName, eventCount); s.SendEvents(); }
現在、このコマンドラインアプリケーションを使用して、25 x 2,000、または50,000のメッセージを並行して送信しています。 さらに面白くするために、次のPowerShellスクリプトを使用してアプリケーションを20回起動するだけで、アプリケーションを擬似的に並列実行します。
for($i=1; $i -le 20; $i++) { start .\BasicEventHubSample.exe }
したがって、ほとんど同時にプロセスを開始します。 そして、最後まで、つまり、すべてのプロセスがメッセージを送信するまで待ちます。 50,000メッセージの20倍で1,000,000メッセージが生成されます。 次に、最も遅い操作の結果を取得します。 もちろん、これらの指標はすべて大まかなものですが、私が持っている機会についての考えを与えるのに十分です。 高価な機器や複雑なソリューションの開発に投資する必要はありません。
もう1つのポイントは、データをダウンロードするコマンドラインアプリケーションを実行する前にストリーム分析タスクを起動したことです。データをドロップする前にストリームプロセッサが既に実行されていることを確認するためです。
いくつかの点に注意してください。 まず、Stream Analyticsサービスはまだ暫定バージョンの段階にあるため、クラッシュする可能性があります。 しかし、最終結果はまだ驚くばかりです。
Event HubとStream Analyticsのチャートを見てください-それは最高です。 ところで、 Azure SQL Databaseの新しいパフォーマンスレベルも素晴らしいことを確認しました。
Stream Analyticsのこのような量のデータにより、サービスは、基本レベル(5 DTU)の単一のデータベースに結果を書き込む際に問題が発生しませんでした! プログラムの実行をSQL Server Management Studioに切り替えてすぐに結果をSQLデータベースのテーブルに取得し始め、結果がリアルタイムで表示されるようになりました。
そして最後に、わずか75秒でイベントハブに1,000,000個のイベントを追加しました! つまり、1秒間に13,000以上のイベントが発生します。 合計で、数行のコードで。
このようなチャートを見るのは素晴らしいことです:
そして、これらのAzure Event Hubsチャートを見るのは素晴らしいことです。
Azure Event Hubs、数百万の投稿。 このような大量のデータを処理するために、ローカルのテストラボを作成するのにどれくらい時間がかかるかを考えてください。
以下は、 Stream Analyticsの最も重要な制限と既知の問題の一部です。
- サービスの予備バージョンの地理的アクセシビリティ(米国中部および西ヨーロッパ)
- ストリームユニットクォータ(サブスクリプションごとにリージョンごとに紺perごとに12ストリームユニット)
- UTF-8は、入力CSVおよびJSONデータソースでサポートされる唯一のエンコーディングです。
- 暫定版では、遅延のカウントなど、一部のクールなパフォーマンスカウンターは使用できません。
結果を見ると、Azure Event Hubsは毎秒数百万のイベントのスループットを本当に提供でき、Stream Analyticsはこの量のデータを本当に処理できると確信しています。
便利なリンク
- Azureを30日間無料でお試しください !
- Microsoft Azure Development Center(azurehub.ru) -スクリプト、ガイド、例、開発の推奨事項
- Twitter.com/windowsazure_ru-最新のMicrosoft Azureニュース
- FacebookのMicrosoft Azureコミュニティ -専門家、質問
- Microsoft Cloudおよびその他の仮想アカデミーコースを学ぶ
- ビジネスとクラウド:ベストプラクティスソリューション
- 大規模組織向けのWindows 8.1アップデート。 はじめに
- Microsoft Hybrid Cloud:サンプルガイド
- Windows 8.1のユーザーを準備するためのツールキット
- Win2Dグラフィックスライブラリの概要
- 無料または試用版のVisual Studioをダウンロードする
- ユニバーサルWindows 開発者になる