Месяц назад Microsoft анонсировала предварительную версию нового сервиса – Azure Stream Analytics, созданного для потоковой обработки данных в режиме близкого к реальному времени.
Текущая версия Azure Stream Analytics подключается к Azure Event Hub и Azure Blob Storage для получения потока данных (носят название Inputs), а также к Event Hubs, Blob Storage, Azure SQL Database для записи результатов (Outputs). Обработчик потока (stream processor) проектируется с использованием языка похожего на SQL, что позволяет задавать обработку и преобразование потоковых данных в достоверную информацию в реальном времени.
И здесь на передний план выходит мощь облака. Всего лишь за несколько шагов и пару часов вы сможете поднять надежную инфраструктуру, которая сможет обрабатывать десятки тысяч событий или сообщений в секунду.
Мне было очень любопытно узнать, как много можно добиться с помощью этого сервиса. Поэтому я составил тестовый сценарий. Основой для моего эксперимента стало руководство, которое можно найти по этой ссылке.
В руководстве есть небольшая неточность на шаге «Start the Job». Там написано, что вы должны перейти в раздел «configure» вашей задачи (Job) для того, чтобы настроить время начала работы задачи (job output). Однако, эта настройка находится не в разделе Configure. Этот параметр конфигурируется в окне где вы стартуете свою задачу.
Для того, чтоб сделать тест интереснее, я поменял следующие настройки:
- Установил шкалу Event Hub на 10 единиц. Таким образом, потенциально можно достигнуть 10000 событий в секунду.
- Изменил код Event Hub для увеличения количества сообщений.
- Создал небольшой скрипт PowerShell для того, чтобы запустить N одновременных экземпляров приложения командной строки
- Все это сделал на виртуальной машине в том же датацентре Azure (Западная Европа), где работает Event Hub и Stream Analytics
Изменения в исходном демо-коде Service Bus Event Hub
Я удалил весь ненужный код (например, создание 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 х 2 000, или 50 000 сообщений. Чтобы сделать все еще веселее, я запущу приложение псевдо-параллельно, просто стартуя его 20 раз с помощью следующего скрипта PowerShell:
for($i=1; $i -le 20; $i++)
{
start .BasicEventHubSample.exe
}
Таким образом, я запускаю процессы почти одновременно. И жду до конца, то есть пока все процессы не отправят свои сообщения. Двадцать раз по 50 000 сообщений сформируют 1 000 000 сообщений. Затем просто получу результат самой медленной операции. Конечно, все эти показатели немного приблизительны, но достаточны, чтобы дать мне представление о возможностях, которые у меня есть. Без необходимости вкладывать в дорогое оборудование и разработку сложных решений.
Еще один момент — я запустил свою задачу stream analytics перед запуском приложений командной строки, качающих данные, просто чтобы убедиться, что процессор потока уже запущен до того, как я забросаю его данными.
Обратите внимание на некоторые моменты. В первую очередь сервис Stream Analytics пока еще в стадии предварительной версии, поэтому там могут быть сбои. Но конечный результат все равно просто поразительный.
Посмотрите на графики Event Hub и Stream Analytics — это просто потрясающе. Кстати, еще я убедился в том, что новые уровни производительности Azure SQL Database тоже потрясающие.
При таком объеме данных в Stream Analytics, у сервиса не возникло проблем записи результатов в единую базу данных уровня Basic (5 DTUs)! Я начал получать результаты в таблице моей базы данных SQL сразу, как только перешел от запуска программы в мою SQL Server Management Studio и смог увидеть результаты, поступающие в реальном времени.
И напоследок, я накачал 1 000 000 событий в Event Hub всего за 75 секунд! Это означает более чем 13 000 событий в секунду! Всего с помощью пары строк кода.
Как же здорово смотреть на графики, вроде этого:
И как же здорово смотреть на подобные графики Azure Event Hubs:
Azure Event Hubs, миллионы сообщений. Только подумайте, сколько времени заняло бы у нас создание локальной тестовой лаборатории, для того чтобы обработать такой объем данных?
Ниже перечислены некоторые наиболее важные ограничения и известные проблемы Stream Analytics:
- Географическая доступность предварительной версии сервиса (Центральный регион США и Западная Европа)
- Квота потоковой единицы (12 потоковых единиц на azure на регион на подписку)
- UTF-8 единственная поддерживаемая кодировка для входных источников данных CSV и JSON.
- В предварительной версии недоступны некоторые классные счетчики производительности, например, считающие задержки.
Глядя на полученные результаты, я убежден, что Azure Event Hubs действительно может обеспечить пропускную способность в миллионы событий в секунду, а Stream Analytics действительно может обработать такое количество данных.
Полезные ссылки
- Попробовать Azure бесплатно на 30 дней!
- Центр разработки Microsoft Azure (azurehub.ru) – сценарии, руководства, примеры, рекомендации по разработке
- Twitter.com/windowsazure_ru — последние новости Microsoft Azure
- Сообществе Microsoft Azure на Facebook – эксперты, вопросы
- Изучить курсы виртуальной академии Microsoft по облачным и другим технологиям
- Бизнес и облако: лучшие практики решений
- Windows 8.1 Update для крупных организаций. Начало работы
- Гибридное облако Microsoft: Руководство по типовым решениям
- Набор средств для подготовки пользователей к Windows 8.1
- Введение в графическую библиотеку Win2D
- Загрузить бесплатную или пробную Visual Studio
- Стать разработчиком универсальных приложений Windows
Автор: maria_gore