- PVSM.RU - https://www.pvsm.ru -

Анализ потока данных в реальном времени с помощью Azure Stream Analytics

Анализ потока данных в реальном времени с помощью Azure Stream Analytics - 1

Месяц назад Microsoft анонсировала [1] предварительную версию нового сервиса – Azure Stream Analytics [2], созданного для потоковой обработки данных в режиме близкого к реальному времени.

Текущая версия Azure Stream Analytics подключается к Azure Event Hub и Azure Blob Storage для получения потока данных (носят название Inputs), а также к Event Hubs, Blob Storage, Azure SQL Database для записи результатов (Outputs). Обработчик потока (stream processor) проектируется с использованием языка похожего на SQL, что позволяет задавать обработку и преобразование потоковых данных в достоверную информацию в реальном времени.

И здесь на передний план выходит мощь облака. Всего лишь за несколько шагов и пару часов вы сможете поднять надежную инфраструктуру, которая сможет обрабатывать десятки тысяч событий или сообщений в секунду.

Мне было очень любопытно узнать, как много можно добиться с помощью этого сервиса. Поэтому я составил тестовый сценарий. Основой для моего эксперимента стало руководство, которое можно найти по этой ссылке [3].

В руководстве есть небольшая неточность на шаге «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 [4] тоже потрясающие.

При таком объеме данных в Stream Analytics, у сервиса не возникло проблем записи результатов в единую базу данных уровня Basic (5 DTUs)! Я начал получать результаты в таблице моей базы данных SQL сразу, как только перешел от запуска программы в мою SQL Server Management Studio и смог увидеть результаты, поступающие в реальном времени.

И напоследок, я накачал 1 000 000 событий в Event Hub всего за 75 секунд! Это означает более чем 13 000 событий в секунду! Всего с помощью пары строк кода.

Как же здорово смотреть на графики, вроде этого:

Анализ потока данных в реальном времени с помощью Azure Stream Analytics - 2

И как же здорово смотреть на подобные графики Azure Event Hubs:

Анализ потока данных в реальном времени с помощью Azure Stream Analytics - 3

Azure Event Hubs, миллионы сообщений. Только подумайте, сколько времени заняло бы у нас создание локальной тестовой лаборатории, для того чтобы обработать такой объем данных?

Ниже перечислены некоторые наиболее важные ограничения и известные проблемы [5] Stream Analytics:

  • Географическая доступность предварительной версии сервиса (Центральный регион США и Западная Европа)
  • Квота потоковой единицы (12 потоковых единиц на azure на регион на подписку)
  • UTF-8 единственная поддерживаемая кодировка для входных источников данных CSV и JSON.
  • В предварительной версии недоступны некоторые классные счетчики производительности, например, считающие задержки.

Глядя на полученные результаты, я убежден, что Azure Event Hubs действительно может обеспечить пропускную способность в миллионы событий в секунду, а Stream Analytics действительно может обработать такое количество данных.

Полезные ссылки

Автор: maria_gore

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/oblako/82172

Ссылки в тексте:

[1] анонсировала: http://weblogs.asp.net/scottgu/azure-announcing-new-real-time-data-streaming-and-data-factory-services

[2] Azure Stream Analytics: http://azure.microsoft.com/ru-ru/services/stream-analytics/

[3] ссылке: http://azure.microsoft.com/ru-ru/documentation/articles/stream-analytics-get-started/

[4] уровни производительности Azure SQL Database: https://msdn.microsoft.com/library/azure/dn741336.aspx/

[5] ограничения и известные проблемы: http://azure.microsoft.com/ru-ru/documentation/articles/stream-analytics-limitations/

[6] Попробовать Azure: http://l.techdays.ru/go/azuretrial

[7] Центр разработки Microsoft Azure (azurehub.ru): http://www.azurehub.ru/

[8] Twitter.com/windowsazure_ru: http://www.twitter.com/windowsazure_ru

[9] Сообществе Microsoft Azure на Facebook: http://www.facebook.com/groups/azurerus/

[10] Изучить курсы: http://l.techdays.ru/go/mva

[11] Бизнес и облако: лучшие практики решений: http://www.microsoftvirtualacademy.com/training-courses/business-and-cloud-best-practices-solutions-rus

[12] Windows 8.1 Update для крупных организаций. Начало работы: http://www.microsoftvirtualacademy.com/training-courses/windows-8-1-update-for-enterprise-jump-start-rus

[13] Гибридное облако Microsoft: Руководство по типовым решениям: http://www.microsoftvirtualacademy.com/training-courses/the-microsoft-hybrid-cloud-best-practices-guidance-rus

[14] Набор средств для подготовки пользователей к Windows 8.1: http://www.microsoftvirtualacademy.com/training-courses/windows-8-1-user-readiness-toolkit_rus

[15] Введение в графическую библиотеку Win2D: http://www.microsoftvirtualacademy.com/training-courses/introduction-to-the-graphics-library-win2d-rus

[16] Загрузить: http://l.techdays.ru/go/getvs

[17] Стать разработчиком: http://l.techdays.ru/go/winstart

[18] Источник: http://habrahabr.ru/post/250101/