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

Архитектура, управляемая событиями (EDA) — это тип модели программирования, который позволяет организации обнаруживать события или важные бизнес-моменты и действовать в соответствии с ними в режиме реального времени или, по крайней мере, в ближайшее время.

Что такое асинхронные платформы, управляемые событиями?

Архитектура, управляемая событиями (EDA), — это тип модели программирования, которая позволяет обнаруживать события (такие как транзакция, посещение сайта, отказ от корзины) и действовать в соответствии с ними в режиме реального времени или, по крайней мере, максимально близко к этому. Этот шаблон заменяет традиционную архитектуру «запрос/ответ», когда службам приходится ждать ответа, прежде чем они смогут перейти к следующей задаче. В традиционных моделях синхронного программирования приложение ожидает завершения действия, прежде чем перейти к следующей задаче. Напротив, модели асинхронного программирования позволяют приложениям выполнять несколько задач одновременно, не блокируя основной поток. Поток событийно-управляемой архитектуры управляется событиями и предназначен для того, чтобы реагировать на них или выполнять в соответствии с ними какие-то действия.

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

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

Зачем использовать архитектуру, управляемую событиями?

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

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

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

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

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

Преимущества архитектуры, управляемой событиями

Истинное разделение производителей и потребителей данных в виде микросервисов

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

Разделяя компоненты системы, разработчики могут динамически добавлять или удалять производителей и потребителей событий, не затрагивая другие службы. Это позволяет реализовывать разные службы на разных языках или технологиях, а также позволяет использовать разные форматы кодирования, такие как JSON, XML или Avro.

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

Отказоустойчивость систем обработки событий

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

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

Push-сообщения

В системе обмена сообщениями на основе запросов существует механизм запроса/ответа. Клиент периодически опрашивает сообщения. Системы, управляемые событиями, позволяют легко отправлять push-сообщения благодаря присутствию брокера-посредника.

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

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

Единый источник достоверной информации с журналом неизменяемых событий

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

Этот «бизнес-нарратив» является преимуществом для управления бизнес-данными, поскольку он позволяет вести журнал всех событий, которые произошли в системе, для целей аудита или справок.

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

Шаблоны Event-First VS Event-Command для проектирования, управляемого событиями

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

Традиционные REST-приложения следуют схеме «событие → команда», где конечная точка, метод и синхронное возвращаемое значение предопределены. Однако при подходе, основанном на событиях, связь API с удаленной службой отсутствует. Вместо этого событие отправляется как реакция, а эмиттер не вызывает конкретную функцию. Излучатель не знает, какие процессоры будут потреблять событие, и событие становится API. Это разъединение позволяет изменять набор потребляющих приложений с течением времени, не требуя изменений в эмиттере.

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

Шаблон команды события

В шаблоне событий-команд служба знает конечные точки и API других служб и вызывает их. Например:

Шаблон Event-First

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

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

Преимущества подхода, ориентированного на события, становятся очевидными, когда мы рассматриваем усовершенствования системы. Предположим, мы хотим включить такие функции, как проверка уровня запасов, повторный заказ товаров, анализ неудачных покупок и повышение коэффициента конверсии. В системе, основанной на управлении событиями, нам потребуется модифицировать основное приложение для закупок, чтобы оно вызывало эти новые системы. Однако с помощью решения, ориентированного на события, мы можем легко добавить новые обработчики для существующих событий, таких как почему (элемент) и checkInventory(). Такой подход позволяет нам улучшать систему, не изменяя основное приложение, делая его более гибким и адаптируемым к изменениям.

Обратите внимание, как подход, основанный на событиях, позволяет многим процессорам реагировать на одно и то же событие «покупка» (опубликованное в теме /user-purchases)? Такая гибкость означает, что функции могут работать параллельно и добавляться, расширяться, обновляться или заменяться без отключения системы. Развязка — это ключ.

Заключение

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

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

Почему архитектура, управляемая событиями, важна сегодня — 04 апреля 2019 г. — Исаак Саколик — (https://www.infoworld.com/article/3386177/why- события-ориентированные-архитектуры-важны-сегодня.html)

Высокочастотная торговля с обработкой сложных событий — декабрь 2016 г. — Нандини Сиднал — (https://www.researchgate.net/publication/313449358_High_Frequency_Trading_with_Complex_Event_Processing)

Полное руководство по архитектуре, управляемой событиями— Solace— (https://solace.com/what-is-event-driven-architecture/)

Преимущества шаблона архитектуры, управляемой событиями — 11 мая 2021 г. — Грейс Янсен, Джоанна Саладас — (https://developer.ibm.com/articles/advantages -событийной-архитектуры/)

3 преимущества архитектуры, управляемой событиями — 25 октября 2021 г. — Акшата Савант — («https://blogs.mulesoft.com/api-integration/benefits-of -архитектура, управляемая событиями/")