Архитектура, управляемая событиями - Event-driven architecture

Архитектура, управляемая событиями (EDA) это программная архитектура парадигма, продвигающая производство, обнаружение, потребление и реакцию на События.

An мероприятие можно определить как «значительное изменение государственный ".[1] Например, когда потребитель покупает автомобиль, состояние автомобиля меняется с «продано» на «продано». Архитектура системы автосалона может рассматривать это изменение состояния как событие, о возникновении которого можно сообщить другим приложениям в этой архитектуре. С формальной точки зрения, то, что создается, публикуется, распространяется, обнаруживается или потребляется, является (обычно асинхронным) сообщением, называемым уведомлением о событии, а не самим событием, которое является изменением состояния, вызвавшим отправку сообщения. События не путешествуют, они просто происходят. Однако срок мероприятие часто используется метонимически для обозначения самого сообщения уведомления, что может привести к некоторой путанице. Это связано с тем, что архитектура, управляемая событиями, часто проектируется поверх архитектуры, управляемые сообщениями, где такой шаблон коммуникации требует, чтобы один из входов был только текстом, сообщением, чтобы различать, как следует обрабатывать каждое сообщение.

Этот архитектурный образец может применяться при разработке и реализации приложений и систем, которые передают события между слабосвязанные программные компоненты и Сервисы. Система, управляемая событиями, обычно состоит из источников (или агентов) событий, потребителей (или приемников) событий и каналов событий. Эмитенты несут ответственность за обнаружение, сбор и передачу событий. Генератор событий не знает потребителей события, он даже не знает, существует ли потребитель, и, если он существует, он не знает, как событие используется или обрабатывается. Раковины несут ответственность за применение реакции, как только событие представлено. Реакция может полностью или не может быть обеспечена самой раковиной. Например, приемник может просто отвечать за фильтрацию, преобразование и пересылку события другому компоненту или может обеспечивать автономную реакцию на такое событие. Каналы событий - это каналы, по которым события передаются от источников событий к потребителям событий. Знание о правильном распределении событий присутствует исключительно в канале событий.[нужна цитата ] Физическая реализация каналов событий может быть основана на традиционных компонентах, таких как промежуточное ПО, ориентированное на сообщения или двухточечной связи, которая может потребовать более подходящего исполнительная структура транзакций[уточнить ].

Построение систем на основе событийно-ориентированной архитектуры упрощает горизонтальную масштабируемость в распределенных вычислений модели и делает их более устойчивыми к сбоям. Это связано с тем, что состояние приложения может быть скопировано из нескольких параллельных снимков для обеспечения высокой доступности.[2] Новые события могут быть инициированы где угодно, но, что более важно, они распространяются по сети хранилищ данных, обновляя каждое по мере их поступления. Добавление дополнительных узлов также становится тривиальным: вы можете просто взять копию состояния приложения, передать ему поток событий и запустить его. [3]

Архитектура, управляемая событиями, может дополнять Сервис-Ориентированная Архитектура (SOA), потому что службы могут быть активированы триггерами, срабатывающими при входящих событиях.[4][5]Эта парадигма особенно полезна, когда раковина не дает никаких автономный руководитель[уточнить ].

SOA 2.0 развивает последствия, обеспечиваемые архитектурами SOA и EDA, до более богатого и надежного уровня за счет использования ранее неизвестных причинно-следственных связей для формирования нового паттерна событий.[нечеткий ] Этот новый бизнес-аналитика шаблон запускает дальнейшую автономную человеческую или автоматизированную обработку, которая увеличивает экспоненциальную ценность для предприятия, вводя дополнительную информацию в распознанный шаблон, чего нельзя было достичь ранее.[нечеткий ]

Структура мероприятия

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

Слои потока событий

Архитектура, управляемая событиями, может быть построена на четырех логических уровнях, начиная с восприятия события (т. Е. Значимого временного состояния или факта), переходя к созданию его технического представления в форме структуры события и заканчивая отсутствием -пустой набор реакций на это событие.[6]

Генератор событий

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

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

Канал событий

Это второй логический уровень. Канал событий - это механизм распространения информации, собранной из генератора событий, в механизм событий.[6] Это может быть TCP / IP-соединение или любой тип входного файла (плоский, формат XML, электронная почта и т. д.). Одновременно можно открыть несколько каналов событий. Обычно, поскольку механизм обработки событий должен обрабатывать их почти в реальном времени, каналы событий будут считываться асинхронно. События хранятся в очереди, ожидая обработки позже механизмом обработки событий.

Механизм обработки событий

Механизм обработки событий - это логический уровень, отвечающий за идентификацию события, а затем за выбор и выполнение соответствующей реакции. Он также может вызвать ряд утверждений. Например, если событие, которое поступает в механизм обработки событий, является идентификатором продукта, которого нет на складе, это может вызвать такие реакции, как «Код продукта заказа» и «Уведомить персонал».[6]

Последующая деятельность, управляемая событиями

Это логический слой, на котором показаны последствия события. Это можно сделать разными способами и формами; Например, кому-то отправлено электронное письмо, и приложение может отображать на экране какое-то предупреждение.[6] В зависимости от уровня автоматизации, обеспечиваемого приемником (механизмом обработки событий), последующие действия могут не потребоваться.

Стили обработки событий

Существует три основных стиля обработки событий: простой, потоковый и сложный. Эти три стиля часто используются вместе в зрелой событийно-ориентированной архитектуре.[6]

Простая обработка событий

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

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

Обработка потока событий

В обработка потока событий (ESP) случаются как обычные, так и знаменательные события. Обычные события (заказы, передачи RFID) проверяются на заметность и передаются подписчикам информации. Обработка потока событий обычно используется для управления потоком информации в реальном времени внутри предприятия и вокруг него, что позволяет своевременно принимать решения.[6]

Обработка сложных событий

Обработка сложных событий (CEP) позволяет рассматривать шаблоны простых и обычных событий, чтобы сделать вывод о том, что произошло сложное событие. Обработка сложных событий оценивает совокупность событий и затем принимает меры. События (заметные или обычные) могут пересекать типы событий и происходить в течение длительного периода времени. Корреляция событий может быть причинной, временной или пространственной. CEP требует использования сложных интерпретаторов событий, определения и сопоставления шаблонов событий, а также методов корреляции. CEP обычно используется для обнаружения бизнес-аномалий, угроз и возможностей и реагирования на них.[6]

Обработка событий онлайн

Онлайн-обработка событий (OLEP) использует асинхронные распределенные журналы событий для обработки сложных событий и управления постоянными данными.[7] OLEP позволяет надежно составлять связанные события сложного сценария в гетерогенных системах. Тем самым он обеспечивает очень гибкие схемы распределения с высокой масштабируемостью и обеспечивает высокую согласованность. Однако он не может гарантировать верхнюю границу времени обработки.

Очень слабое сцепление и хорошее распределение

Архитектура, управляемая событиями, чрезвычайно слабо связана и хорошо распределена. Эта архитектура широко распространена, потому что событие может быть почти любым и существовать практически где угодно. Архитектура чрезвычайно слабо связана, потому что само событие не знает о последствиях своей причины. например Если у нас есть система сигнализации, которая записывает информацию при открытии входной двери, сама дверь не знает, что система сигнализации добавит информацию при открытии двери, а только то, что дверь была открыта.[6]

Семантическая связь и дальнейшие исследования

Управляемые событиями архитектуры имеют слабую взаимосвязь в пространстве, времени и синхронизации, обеспечивая масштабируемую инфраструктуру для обмена информацией и распределенных рабочих процессов. Однако событийные архитектуры тесно связаны с семантикой базовой схемы событий и значений через подписки на события и шаблоны. Высокая степень семантической неоднородности событий в крупных и открытых развертываниях, таких как умные города и сенсорная сеть, затрудняет разработку и обслуживание систем, основанных на событиях. Для решения проблемы семантической связи в системах, основанных на событиях, использование приблизительного семантическое соответствие событий - активная область исследований.[8]

Реализации и примеры

Java Swing

В Ява Качать API основан на архитектуре, управляемой событиями. Это особенно хорошо работает с мотивацией Swing предоставлять компоненты и функции, связанные с пользовательским интерфейсом. API использует условные обозначения (например, «ActionListener» и «ActionEvent»), чтобы связывать и организовывать проблемы, связанные с событиями. Класс, которому необходимо знать о конкретном событии, просто реализует соответствующий слушатель, переопределяет унаследованные методы и затем добавляется к объекту, запускающему событие. Очень простой пример:

общественный учебный класс FooPanel расширяет JPanel орудия ActionListener {    общественный FooPanel() {        супер();        JButton кстати = новый JButton("Нажми на меня!");        кстати.addActionListener(это);        это.Добавить(кстати);    }    @Override    общественный пустота действие выполнено(ActionEvent ае) {        Система.из.println("Нажата кнопка!");    }}

В качестве альтернативы другой вариант реализации - добавить слушателя к объекту как анонимный класс. Ниже приведен пример.

общественный учебный класс FooPanel расширяет JPanel {    общественный FooPanel() {        супер();        JButton кстати = новый JButton("Нажми на меня!");        кстати.addActionListener(новый ActionListener() {            общественный пустота действие выполнено(ActionEvent ае) {                Система.из.println("Нажата кнопка!");            }        });        это.Добавить(кстати);    }}

JavaScript

(() => {  'использовать строго';  учебный класс EventEmitter {    конструктор() {      это.События = новый карта();    }    на(мероприятие, слушатель) {      если (тип слушатель !== 'функция') {        бросать новый TypeError("Слушатель должен быть функцией");      }      позволять слушатели = это.События.получать(мероприятие);      если (!слушатели) {        слушатели = новый Набор();        это.События.набор(мероприятие, слушатели);       }      слушатели.Добавить(слушатель);      возвращаться это;    }    выключенный(мероприятие, слушатель) {      если (!аргументы.длина) {        это.События.Чисто();      } еще если (аргументы.длина === 1) {        это.События.Удалить(мероприятие);      } еще {        const слушатели = это.События.получать(мероприятие);        если (слушатели) {          слушатели.Удалить(слушатель);        }      }      возвращаться это;    }    испускают(мероприятие, ...аргументы) {      const слушатели = это.События.получать(мероприятие);      если (слушатели) {        за (позволять слушатель из слушатели) {          слушатель.подать заявление(это, аргументы);        }      }      возвращаться это;    }  }  это.EventEmitter = EventEmitter;})();

Использование:

const События = новый EventEmitter();События.на('фу', () => { консоль.бревно('фу'); });События.испускают('фу'); // Выводит "foo"События.выключенный('фу');События.испускают('фу'); // Ничего не случится

Смотрите также

Статьи

Рекомендации

  1. ^ К. Мани Чанди Приложения, ориентированные на события: затраты, выгоды и подходы к проектированию, Калифорнийский технологический институт, 2006
  2. ^ Мартин Фаулер, Поиск событий, Декабрь 2005 г.
  3. ^ Мартин Фаулер, Параллельная модель, Декабрь 2005 г.
  4. ^ Хэнсон, Джефф (31 января 2005 г.). «Событийно-ориентированные сервисы в SOA». JavaWorld. Получено 2020-07-21.
  5. ^ Слива, Кэрол (12 мая 2003 г.). «Архитектура, управляемая событиями, готова к широкому внедрению». Computerworld. Получено 2020-07-21.
  6. ^ а б c d е ж грамм час я j Бренда М. Майкельсон, Обзор событийной архитектуры, Патрисия Сейболд Групп, 2 февраля 2006 г.
  7. ^ «Обработка онлайн-событий - очередь ACM». queue.acm.org. Получено 2019-05-30.
  8. ^ Хасан, Сулейман, Шон О’Райен и Эдвард Карри. 2012 г. «Приблизительное семантическое сопоставление разнородных событий». На 6-й Международной конференции ACM по распределенным системам, основанным на событиях (DEBS 2012), 252–263. Берлин, Германия: ACM. «DOI».

внешняя ссылка