Событийно-ориентированная архитектура — это архитектурный подход, при котором взаимодействие между компонентами системы строится вокруг обмена и обработки событий.
В этой архитектуре основной фокус направлен на поток событий и их обработку, что позволяет системам быть асинхронными и хорошо масштабируемыми. События могут представлять собой любые значимые изменения состояния или действия: от пользовательских запросов и сообщений сервисов друг другу до сигналов от внешних устройств.
Ключевые элементы событийно-ориентированной архитектуры:
- События (Events): Представляют собой факты или изменения состояния, которые происходят в системе. Например, поступление сообщения в Kafka, нажатие кнопки в пользовательском интерфейсе или обновление данных в хранилище.
- Обработчики событий (Event Handlers): Компоненты или сервисы, которые “подписываются” на определённые типы событий и выполняют определённые действия в ответ на их возникновение. Обработчиком может быть микросервис, вызов функции или запуск определённой логики в реакцию на сигнал.
- Цикл обработки событий (Event Loop) или Механизм распределения событий: Центральный элемент, отвечающий за получение событий, их маршрутизацию и передачу нужным обработчикам. В распределённых системах его роль часто выполняет брокер сообщений или шина данных.
- Очередь событий (Event Queue): Средство для буферизации и упорядочивания событий при высокой нагрузке или одновременном возникновении большого числа сигналов. Очередь обеспечивает последовательную, контролируемую обработку и повышает надёжность системы.
Какие задачи хорошо решает событийно-ориентированная архитектура:
- Ситуации, когда мгновенный ответ не критичен, но важна асинхронная и надёжная обработка. Например, асинхронная загрузка, парсинг и последующая обработка крупного XML-файла или событий из внешних систем.
- Сценарии, где требуется легко масштабировать отдельные компоненты, реагирующие на поток входящих данных или сигналов.
Основные компоненты архитектуры:
- Брокер сообщений, выступающий в роли центрального канала обмена событиями.
- Слабо связанные сервисы и микросервисы, которые подписываются на события и обрабатывают их по мере поступления.
Преимущества:
- Изоляция компонентов: каждый сервис может развиваться и масштабироваться независимо от других.
- Простота развёртывания и интеграции новых сервисов за счёт слабой связности.
- Высокая производительность и масштабируемость: возможность обработки большого количества асинхронных операций в параллель.
- Лёгкая адаптация под изменяющиеся потребности и нагрузки.
Недостатки:
- Сложность тестирования, поскольку трудно контролировать и предсказать порядок возникновения и обработки событий.
- Повышенная сложность разработки и отладки из-за асинхронной природы взаимодействий между компонентами.
Способы отправки событий:
- Отправлять в брокеры сообщений события прямо из кода.
- Можно читать бинлог и отправлять в Брокер сообщений
- Transactional Outbox. Сохраняем события в БД, из которой события отправляются в Брокер сообщений.
Мета информация
Область:: 00 Архитектура ИС
Родитель:: Архитектурный паттерн
Источник::
Автор::
Создана:: 2204-03-19