Обзор технологии Microsoft StreamInsight

Обзор технологии Microsoft StreamInsight

Введение

Технология StreamInsight – это новая технология для анализа данных от Microsoft. Microsoft StreamInsight предназначен для обработки потоков событий и базируется на технологии Complex Event Processing.

Complex Event Processing (CEP) – это непрерывная инкрементальная обработка потоков событий из множества источников на основании декларированных запросов и шаблонов с близкой к нулю задержкой.

Рассмотрим ситуацию, когда нам нужно обрабатывать некоторый поток событий, причем событий очень много и они поступают очень часто. Необходимо обрабатывать события с минимальной задержкой, желательно в реальном времени.

В парадигме СУБД данные сначала должны быть загружены на сервер, а это уже может потребовать значительных затрат ресурсов и времени. Затем, нужно сделать запрос к базе данных, чтобы получить некоторый ответ, на основании которого можно принять то или иное решение.

Понятно, что для описанного примера использование подхода СУБД, возможно, является не самой лучшей идеей.

Теперь рассмотрим работу CEP системы. В CEP системе запросы являются «статичными», то есть автоматически выполняются системой при поступлении новых событий и отправляют обработанные данные в выходной поток. В общем случае, данные даже не обязательно сохранять куда-либо.

Данные из входного потока обрабатываются инкрементально, то есть CEP движку не нужно обращаться к старым данных, если в этом нет необходимости.

В таблице приводится сравнение СУБД и CEP по различным параметрам. Видно, что CEP позволяет обрабатывать большое количество данных с малой задержкой, в то время как СУБД не позволяет этого сделать.

СУБД

CEP

Парадигма запросов Запросы выполняются по требованию Запросы обрабатываются непрерывно
Задержка Секунды, часы, дни Миллисекунды или меньше
Пропускная способность Сотни записей/сек Десятки тысяч записей/сек

Связь StreamInsight и Microsoft SQL Server 2008 R2

StreamInsight поставляется вместе с SQL Server 2008 R2 и является частью платформы обработки данных MS SQL, однако StreamInsight никак не относится к Database Engine и не зависит от SQL Server (обратное тоже верно).

Так что связь SQL Server и StreamInsight является достаточно условной.

Более того, StreamInsight можно скачать отдельно от MS SQL Server.

С другой стороны, при установке StreamInsight отдельно от MS SQL Server, нужно ввести ключ активации MS SQL Server 2008 R2 или выбрать ознакомительный 180-дневный режим. Полностью бесплатную версию я найти не смог.

Возможности StreamInsight зависят от редакции MS SQL Server 2008 R2, с которой ассоциирован вводимый ключ, и представлены в таблице:

Возможности StreamInsight Редакция Microsoft SQL Server 2008 R2
Standard

Тысячи событий/сек

Задержка: секунды

Standard

Enterprise

Web

Premium

Десятки тысяц событий/сек

Задержка: менее секунды

Datacenter

Developer

Evaluation

Установка StreamInsight

Дистрибутив StreamInsight можно скачать по ссылке

http://www.microsoft.com/sqlserver/2008/en/us/R2-complex-event.aspx, на момент написания статьи доступны версии для 32-битных и 64-битных операционных систем.

Системные требования

Аппаратное обеспечение:

  • Рекомендуется: 2.2 GHz CPU, 1024 MB RAM
  • Минимум: 1.6 GHz CPU, 384 MB RAM

Программное обеспечение:

Поддерживаются следующие операционные системы:

  • Windows XP Service Pack 2 и более новые (x86 и x64)
  • Windows Server 2003 Service Pack 2 и более новые (x86 и x64)
  • Windows Server 2003 R2 и более новые (x86 и x64)
  • Windows Vista (x86 и x64)
  • Windows Server 2008 и более новые (x86 и x64)
  • Windows 7 (x86 и x64)

Дистрибутив занимаем около 10 Mb, установка происходит при помощи простого мастера. Наиболее важный вопрос при установке – это имя инстанса StreamInsight – это имя нужно обязательно запомнить, поскольку оно используется при программировании.

После установки необходимо удалить старую версию Microsoft SQL Server Compact (Панель управления->Установка и удаление программ) и установить новую (идущую в комплекте со StreamInsight). На момент написания статьи, это Microsoft SQL Server Compact 3.5 SP1.

В комплект установки входят следующие компоненты (после установки их можно найти в папке c:\Program Files\Microsoft StreamInsight 1.0\):

Файлы Путь
Microsoft.ComplexEventProcessing DLLs*

StreamInsightDumper

C:\Program Files\Microsoft StreamInsight 1.0\Bin
Документация StreamInsight C:\Program Files\Microsoft StreamInsight 1.0\Documentation\<LanguageFolder>
Конфигурация и исполняемые файлы Microsoft StreamInsight Server C:\Program Files\Microsoft StreamInsight 1.0\Host

C:\Program Files\Microsoft StreamInsight 1.0\Host\<InstanceName>

Лицензия Microsoft StreamInsight C:\Program Files\Microsoft StreamInsight 1.0\license\<LanguageFolder>
Пакет установки SQL Server Compact Edition C:\Program Files\Microsoft StreamInsight 1.0\Redist
Отладчик потоков событий Microsoft StreamInsight

Для Windows XP и Windows Server 2003 урезанные версии

C:\Program Files\Microsoft StreamInsight 1.

* — Сборки регистрируются в GAC во время установки

Схема работы StreamInsight

Рассмотрим более подробно схему работы StreamInsight:

Данные могут поступать с различных источников. Например, это могут быть различные сенсоры, веб-сервисы, хранилища данных и другие источники. Информация из таких источников, скорее всего, является разнородной (например, имеет разный формат), для преобразования этой информации в события, понятные системе, используются входные адаптеры (Input Adapters). Полученные события поступают на движок StreamInsight, где обрабатываются заранее описанными запросами. Причем, данные могут обрабатываться несколькими запросами по очереди, может также использоваться информация из внешних источников данных. Всю работу по максимально быстрой обработке событий берет на себя движок StreamInsight. Обработанные данные нужно каким-то образом передать получателям событий. Для преобразования данных в удобную для получателей форму используются выходные адаптеры (Output Adapters).

Основные понятия

К основным структурым элементам StreamInsight относятся:

  • Потоки
  • События
  • Адаптеры
  • Запросы

Рассмотрим каждый элемент:

Потоки

Поток – это набор событий, который, в общем случае, может быть бесконечным.

События в потоке необязательно упорядочены по времени, однако каждое событие обязательно имеет временную отметку.

В StreamInsight потоки реализованы в виде очередей, которые предоставляют методы для постановки и изъятия событий из потока. Причем, StreamInsight берет на себя работу по правильной обработке событий с учетом их временных отметок, а не на основании порядка поступления событий из потока, что, безусловно, очень важно.

События

Пожалуй, основной элемент StreamInsight – это событие.

Любое событие в StreamInsight состоит из двух частей:

  • Заголовок
    • Тип события (Event Kind)
    • Временные отметки (Timestamps)
  • Нагрузка (Payload)
    • Данные

Событие может иметь одну или более (начало события, конец события) временных отметок. Время задается типом DateTime в фомате UTC. Стоит отметить, что временные отметки задаются программно, то есть разработчик отвечает за корректное заполнение временных отметок, а не движок StreamInsight.

Тип события может иметь значения INSERT (новые данные) и CTI (Current Time Increment). Событие CTI используется для корректной обработки данных в тех случаях, когда события поступают в неправильной хронологической последовательности. Событие CTI по сути сообщает о том, что все события, появившиеся до временной отметки, соответствующей событию CTI, уже были отправлены и теперь могут быть обработаны.

Рассмотрим пример:

Пусть у нас есть несколько событий произвольно расположенных на временной оси. Нам нужно вычислить среднее значение из данных, содержащихся в событиях.

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

Добавим события CTI. Событие CTI говорит о том, что можно начать обрабатывать события лежащие левее его по оси времени. Таким образом мы вычисляем среднее значение 1.

Идем дальше: пусть появилось еще некоторое количество событий и событие CTI 2. Теперь все события, лежащие левее CTI 2 могут быть обработаны.

Что произойдет если после появления события CTI появилось новое событие лежащее левее него по оси времени (обозначено красным)? Ведь получается, что среднее значение 1 уже не является актуальным.

Реакция системы в такой ситуации описывается специальной политикой, которая задается разработчиком.

Существует два вида таких политик:

  • Drop – отбрасывать все подобные события
  • Adjust — изменять временные характеристики события таким образом, чтобы оно оказалось правее последнего события CTI на временной оси. Правда такая политика применима не ко всем событиям, а лишь к тем которые обладают моделью отличной от точечной.

Что такое модель события?

Еще одной характеристикой события является его модель (Event Model), существует три модели событий:

  • Interval – известен период времени, в течении которого происходило событие

    Пример: температура в комнате с 14-00 до 16-00 была равна 21 градусу.

  • Point – точечная модель, событие произошло мгновенно.

    Пример: атмосферное давление в 14-30 было равно 760 мм.

  • Edge – известно время начала события, но не известно его время окончания

    Пример: дождь начался в 18-00 (пока не закончился)

Рассмотрим примеры:

Interval

Тип события Начало Конец Нагрузка (Id)
INSERT 2009-12-27

02:04:00.213

2009-12-27

02:04:04.329

EU-23423-12
INSERT 2009-12-27

02:04:04.329

2009-12-27

02:04:08.234

EU-23423-15
INSERT 2009-12-27

02:04:04.234

2009-12-27

02:04:04.523

EU-23423-18

Point

Тип события Начало Конец Нагрузка (Id)
INSERT 2009-12-27

02:04:00.213

2009-12-27

02:04:00.213 + c

EU-23423-12
INSERT 2009-12-27

02:04:04.329

2009-12-27

02:04:04.329 + c

EU-23423-15
INSERT 2009-12-27

02:04:04.234

2009-12-27

02:04:04.234 + c

EU-23423-18

Где с – это наименьшая измеримая единица времени.

События типа Edge обычно состоят из двух событий (начало и конец события):

Тип события Тип границы Начало Конец Нагрузка (Id)
INSERT Start 2009-12-27

02:04:00.213

EU-23423-12
INSERT End 2009-12-27

02:04:00.213

2009-12-27

02:04:04.329

EU-23423-12
INSERT Start 2009-12-27

02:04:04.234

EU-23423-18
INSERT End 2009-12-27

02:04:04.234

2009-12-27

02:04:08.238

EU-23423-18

∞ — на самом деле DateTime.MaxValue

Нагрузка

Нагрузка – это те данные, которые сопровождают событие. Например, текущее значение температуры, полученное с термометра.

Нагрузка описывается стандартной структурой на C#, однако существует ряд ограничений, отметим основные (полный список ограничений может быть найден в Microsoft StreamInsight Help -> Developer’s Guide -> Creating Event Types):

  • Размер события не должен превышать 16Kb с учетом всей служебной информации.
  • Событие должно иметь не менее одного поля нагрузки
  • Допустимы только скалярные и элементарные типы (byte,int,byte[],string,datetime)
  • Нагрузка должна быть упакова в класс или структуру C# (даже если в нагрузке содержится только одно поле, оно должно быть размещено в структуре или классе)
  • Нельзя использовать пользовательские атрибуты для полей

Следующий класс описывает нагрузку с двумя полями типа int.

public class SimplePayload

{

public int V1 { get; set; }

public int V2 { get; set; }

}

Реклама
Запись опубликована в рубрике Uncategorized. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s