Главная SQL, Без рубрики, Новое Microsoft StreamInsight и обработка сложных событий Complex Event Processing (CEP)
  • Microsoft StreamInsight и обработка сложных событий Complex Event Processing (CEP)

    00_logo С выходом новой версии SQL Server 2008 R2 Microsoft представила платформу StreamInsight для создания приложений обработки сложных событий. Главной задачей CEP приложений является обработка в режиме реального времени множества событий из различных источников (потоков событий) с целью выявления значимых событий, основанных на одном или нескольких потоков событий, либо выявления ряда событий, за определенный промежуток времени.

    StreamInsight способствует реализации надежных и высокоэффективных приложений обработки событий благодаря высокой пропускной способности архитектуры обработки событий и платформе Microsoft .Net Framework. Источники потоков событий обычно включают данные производственных приложений, финансовые приложения торговли, веб и оперативную аналитику. На платформе StreamInsight можно разрабатывать CEP приложения, дающих немедленную отдачу бизнесу из «сырых» данных, за счет снижения стоимости извлечения, анализа и обработки данных, а также позволяя отслеживать, контролировать и предсказывать данные по условиям, возможностям и недостаткам практически мгновенно.

    Теория Event Stream Processing (ESP) и Complex Event Processing (CEP)

    В отличие от объектно-ориентированных технологий брокеров объектных запросов COBRA от OMG и DCOM от Microsoft, использующих сообщения, представляющие собой вызов удаленных процедур, возвращаемых значений и ошибок, CEP поддерживает событийно-ориентированную архитектуру и занимается обработкой событий. Сами же события можно рассматривать как сообщения, находящиеся во времени и связанные с определенными системами. События описывают определенные объекты и их состояния, хотя могут быть и переходными состояниями из одной системы в другую. Сообщения используются для передачи записей о событиях с соответствующими данными. Сообщения обычно живут в течение некоторого времени, после этого событие считается завершенным. Сообщения также используются для передачи событий между различными системами и подсистемами.

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

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

    Большинство архитектур обработки потоков событий, в том числе и CEP от Microsoft, работают с событиями в рамках временного окна. Временные окна могут следовать непрерывно друг за другом, с фиксированным временем начала и конца или же быть "скользящими", точнее одним окном, поддерживающим определенный промежуток времени от начального, до текущего (5, 10, х секунд). События, как правило, считается актуальным, если оно происходит в заданном временном окне.

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

    Архитектуры обработки событий часто сталкиваются с двумя проблемами: низкой задержкой и большими объемами данных. Объем зависит от реализации и детализации событий. Система должна иметь возможность для расширения и эффективно обрабатывать 10, 100 тысяч событий в секунду в случае необходимости, хотя большинство сценариев требует намного меньшей пропускной способности. Большой объем часто сопровождается большой избыточностью, и часть событий могут быть отклонены как не релевантные или не представляющие интереса, на основании какого-либо порогового значения. Чрезмерность данных требует тщательной фильтрации и определения только необходимых нам событий. Эти действия также должны выполняться в кратчайшие сроки.

    Движок от Microsoft позиционируется не просто как архитектура обработки потоков событий (ESP), а как архитектура обработки сложных событий (CEP). Идея сложных событий вытекает из наблюдений, что в некоторых сценариях, значения не всегда связаны с каким-либо конкретным событием или записью о событии. Вместо этого, мы придаем значение результату нескольких событий, зачастую регистрируемых в разное время, как часть различных потоков. В этом случае важны данные, полученные обработкой различных событий.

    CEP различает «примитивные» и сложные события. Примитивное событие регистрируется непосредственно с датчика сообщением о событии и поступает в CEP. Сложное событие получается путем выявления структур из различных потоков примитивных событий. CEP движок регистрирует и обрабатывает такие события. Для принятия решения, мы можем опираться на цепочки предыдущих событий, информацию из баз данных и справочные данные. В CEP это приводит к концепции абстрактных иерархий событий. Примитивные события агрегируются на более высоком уровне событий, которые сами в дальнейшем могут объединяться в события еще большего уровня. По мере продвижения вверх по уровням абстракции событий мы вынуждены использовать все более сложные формы анализа и делать выводы на все более широких агрегациях различных типов событий.

    Концепция абстрактных иерархий событий и «облаков» событий означают, что CEP будет, скорее всего, распространено по всему предприятию. Фильтрацию и агрегирование лучше проводить непосредственно вблизи от источников событий. Результаты могут быть связующим звеном различных систем. Анализ событий на более высоком уровне абстракции может производиться уже в центрах обработки данных совместно с кубами данных, сложными аналитическими инструментами и механизмами отчетности.

    Это приводит к понятию сетей обработки событий (Event Processing Network (EPN)), связывающих «агентов» обработки событий. Каждый агент является узлом в EPN и отвечает за получение, обработку события и передачу результатов на другие узлы при необходимости. «Агент», как правило, является экземпляром ESP или CEP. По мере продвижения по иерархии, может быть целесообразным использовать дополнительные правила или аналитические системы, как «агенты». Каждый «агент» может рассматриваться как система, выполняющая определенные действия, которая в состоянии обмениваться данными с другими «агентами» в пределах EPN. Концепция EPN позволяет строить ESP и CEP системы с возможностью работы в распределенной среде, масштабированием с течением времени и управлением, по возможности, из одной точки.

    Архитектура StreamInsight

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

    На следующем рисунке показана архитектура StreamInsight. (Рис. 1)

    clip_image002

    Для написания CEP приложений используется платформа .Net (C#). Для анализа данных используются декларативные выражения LINQ (Language Integrated Query). Приложение должно реструктурировать потоки данных в формат CEP движка с помощью адаптеров.

    Все данные в StreamInsight имеют вид потоков, представляющих наборы данных, изменяющиеся во времени. StreamInsight рассматривает потоковые данные как события. Каждое событие имеет заголовок и полезные данные.

    Заголовок включает тип события и временные интервалы. Тип события определяет новые события или уже существующие события в потоке. StreamInsight поддерживает два типа событий: событие INSERT и событие CTI. Событие типа INSERT добавляет событие с полезными данными в поток событий и определяет начальное и конечное время события. Событие типа CTI подтверждает завершенность существующих событий в потоке.

    Полезные данные (нагрузка) содержат данные события в структуре данных .Net.

    StreamInsight поддерживает три модели события INSERT: интервальную, точечную и граничную. Модель события определяет форму события в зависимости от временных характеристик.

    Интервальная (interval) – представляет событие с фиксированной длительностью, данные которого действительны только в течение определенного периода времени.

    Точечная (point) – представляет событие, происходящее в конкретный момент времени. Необходимо только начальное время события. Сервер StreamInsight выводит допустимое конечное время, добавляя такт (минимальную единицу времени в базовом типе данных времени) к начальному времени, чтобы получить допустимый интервал времени для события.

    Граничная (edge) – представляет событие, имеющее только начальную временную точку, длительность которого не известна. На момент прибытия на сервер StreamInsight известно только начальное время, поэтому конечное время устанавливается на максимально отдаленное время в будущем. Фактическое конечное время события становится известно и обновляется позже.

    Наборы адаптеров сервера StreamInsight отвечают за получение и последующее представление событий. Адаптеры, написанные на .Net языках регистрируются как сборки на CEP сервере, который затем инициирует адаптеры в процессе выполнения. Входные адаптеры получают потоки данных непрерывно из различных источников событий (сенсоры, web-сервера, каналы данных, базы данных и др.). Данные из входных адаптеров передаются CEP движку, который их обрабатывает, преобразует при помощи запросов и передает выходным адаптерам. Запросы содержат бизнес логику в виде шаблонов. Выходные адаптеры могут содержать логику реагирования на результирующие данные и, в свою очередь, связаны с различными конечными устройствами, системами, базами данных. (Рис. 2).

    clip_image003

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

    Сервер StreamInsight предоставляет следующие функции для написания выражений запросов и аналитики.

    • Проекция (Projection) – вычисления для образования дополнительных свойств событий. В таких ситуациях, как преобразование единиц, требуется выполнять вычисления с получаемыми событиями. С помощью операции проекции на сервере StreamInsight можно добавлять в полезные данные дополнительные поля и выполнять вычисления с полями входного события. Проекции всегда выполняются при использовании предложения select в LINQ.

    • Фильтрация событий (Filtering). Операция фильтрации позволяет задавать логические условия для полезных данных событий и пропускать события, не удовлетворяющие этим условиям. Фильтры задаются в предложении where.

    • Соединения (Joins). Значения из разных потоков сопоставляются, используя операции соединения.
    • Объединения (Unions). События из разных потоков объединяются, используя операцию объединения.
    • Группировка событий (Group). Сервер StreamInsight поддерживает операцию группирования, которая позволяет секционировать входящий поток в зависимости от свойств событий, таких как расположение или идентификатор, а затем применять другие операции или завершенные фрагменты запросов отдельно к каждой группе. События секционируются по группам с помощью предложения group by.
    • Изменения отметок времени (Time Stamp Modifications). Путем изменения отметки времени для события можно изменить воздействие событий на последующие операторы, такие как окна и соединения. Доступны операции сдвига времени события, изменения продолжительности события, преобразования потока в поток точечных событий.
    • Окна времени (Event Windows). Некоторые вычисления выполняются с множествами (статистическая обработка) или другие операции с подмножествами событий, которые попадают в некоторый период времени.
    • Статистическая обработка (Aggregates). Если отдельные события не представляют интереса, можно работать с агрегатными значениями, такими как средние значения, суммы или количества элементов. Сервер StreamInsight поддерживает встроенные агрегаты sum, count, min, max и average, которые обычно работают с временными окнами.
    • Определение первых N кандидатов (TopK). Операции TopK позволяют проверить наличие важных параметров в зависимости от порядка, заданного для полей событий в потоке. Операции TopK используются для ранжирования событий в потоке окон и возвращения первых N событий в порядке возрастания или убывания ранга. Реализуется предложением orderby.
    • Определяемые пользователем расширения (скалярные функции, агрегаты). Использование определяемых пользователем функций позволяет создавать выражения любой сложности. Они могут использоваться везде, где встречаются обычные выражения: фильтры, проекции, соединения и т.д.

    Microsoft StreamInsight поддерживает два сценария развертывания для сервера StreamInsight. CEP сервер может быть интегрирован в приложение как внедренная сборка или же развернут в виде отдельного сервера.

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

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

    Разработка и управление StreamInsight приложениями

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

    StreamInsight поддерживает три модели разработки: явная (Explicit), неявная (Implicit), IObservable/IObserver (Rx Framework).

    Явная модель разработки позволяет разработчикам явным образом создавать и регистрировать все объекты, необходимые для трансформации и обработки событий, входящих и выходящих из CEP-сервера. Это обеспечивает разработчику полный контроль над своим CEP-приложением и средой разработки посредством использования API модели объекта на стороне клиента. Используется если необходимо иметь полный контроль над CEP сервером, а так же использовать уже зарегистрированные запросы, адаптеры, типы событий.

    Неявная модель разработки обеспечивает простую в использовании среду, которая позволяет избежать большинства сложностей, связанных с моделью явной разработки. Это достигается благодаря тому, что CEP-сервер действует как неявный узел, который содержит и регистрирует большинство объектов необходимых для преобразования и обработки входящих и исходящих событий CEP-сервера. Это позволяет разработчику сосредоточиться на построении логики запросов, необходимых для обработки и анализа событий в рамках CEP-сервера. Серверный объект сам по себе «анонимен», и непосредственный доступ к нему с помощью модели объекта получить нельзя. Используется при внедрении CEP сервера в приложение или же, как тестовая среда для разработчиков.

    Модель разработки IObservable/IObserver предлагает альтернативный метод реализации адаптеров ввода и вывода как генераторов и потребителей, источников и приемников событий. Данная модель основывается на модели разработки IObservable/IObserver из Reactive Extensions for .Net (Rx). Используется если необходимо связать CEP события с CLR моделью запросов при помощи LINQ или же обрабатывать данные уже имеющегося событийно-ориентированного приложения CEP сервером, без его модификации.

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

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

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

    Microsoft StreamInsight поставляется в двух редакциях, различающихся количеством обрабатываемых событий в секунду и допуском задержки:

    Standard – рекомендуется для приложений, у которых частота событий не превышает 5 000 событий в секунду и/или допуск задержки составляет более пяти секунд. Поставляется в Standard, Enterprise, Web редакциях Microsoft SQL Server 2008 R2

    Premium – для приложений, у которых частота событий превышает 5 000 событий в секунду или допуск задержки менее пяти секунд. Поставляется в Datacenter, Developer, Evaluation редакциях Microsoft SQL Server 2008 R2

    Заключение

    Microsoft StreamInsight может использоваться в различных бизнес сценариях, которым необходимы высокая пропускная способность и малые задержки: Наблюдение за производственными процессами и управление процессами, Веб-аналитика, Финансовые службы и торговля, Мониторинг ИТ-среды, Телекоммуникации.

    Гибкость и расширяемость StreamInsight способствует легкой интеграции StreamInsight с другими Microsoft технологиями: WCF, BizTalk RFID, Microsoft Sync Framework, SharePoint, SQL Server Business Intelligence. Именно поэтому Microsoft StreamInsight поставляется вместе с SQL Server 2008 R2, предоставляющим возможности хранения исторических данных, построения отчетов и обширные аналитические возможности.

    Документация по StreamInsight на сайте MSDN: http://msdn.microsoft.com/ru-ru/library/bb418434(v=SQL.10).aspx

    Блог команды разработчиков StreamInsight: http://blogs.msdn.com/b/streaminsight/

    Исчерпывающие примеры StreamInsight приложений с комментариями: http://streaminsight.codeplex.com/releases

    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=fffaad6a-0153-4d41-b289-a3ed1d637c0d

    Вадим Тюрин

Комментарии

  1. […] Microsoft StreamInsight и обработка сложных событий Complex Event Processing… […]

  2. […] Microsoft StreamInsight и обработка сложных событий Complex Event Processing… […]