Event Driven Architecture: краткий обзор

Event-Driven Architecture (EDA) — архитектурный подход, при котором система строится вокруг событий.
В таком подходе сервисы взаимодействуют друг с другом через генерацию событий, вместо того, чтобы вызывать друг друга напрямую через HTTP-запросы. Сервис, который породил событие, ничего не знает о сервисах, которые будут это событие обрабатывать (обратное тоже верно). Подход EDA широко применяется в архитектуре микросервисов.
Компоненты EDA
- Событие – любое изменение состояния некой сущности или возникновение новой.
- Производитель события – сервис, который создаёт событие.
- Обработчик события – сервис, который получает событие и обрабатывает его, после чего порождается новое событие – результат обработки события.
- Маршрутизатор события – промежуточный слой, который обеспечивает доставку события от производителя до обработчика. Обычно это брокер сообщений.
Одни и те же сервисы могут выполнять как роль производителя, так и роль обработчика событий.
Модели доставки событий в EDA
1. Pub/Sub
- Производители генерируют события и отправляют брокеру.
- Брокер направляет события потребителям, которые на них подписались.
- После отправки события удаляются. Пример: RabbitMQ.
2. Потоковая передача
- Производители генерируют события и отправляют брокеру.
- Брокер сохраняет события у себя в журнале.
- Потребители считывают события из любой части журнала в любой момент времени. События не удаляются брокером. Пример: Kafka.
Преимущества событийно-ориентированной архитектуры
- Слабая связность и гибкость: можно масштабировать, обновлять и развертывать сервисы независимо друг от друга.
- Скорость: в EDA каждое событие может быть обработано независимо, что позволяет системе использовать параллельную обработку и эффективно распределять нагрузку.
- Отказоустойчивость и высокая доступность: даже если один сервис выйдет из строя, система в целом сохранит доступность.
Недостатки EDA
- Сложность разработки и тестирования: распределённая архитектура и асинхронное взаимодействие увеличивают сложность.
- Отсутствие тр анзакционности: трудно поддерживать транзакции между распределёнными компонентами.
- Единая точка отказа: брокер сообщений является критическим элементом системы.
- Дополнительные затраты на инфраструктуру: реализация EDA требует больше ресурсов и увеличивает расходы на поддержку.
Подборка материалов по Event Driven Architecture
Статьи
- Фрагмент про событийно-ориентированную архитектуру из книги Марка Ричардса "Паттерны архитектуры программного обеспечения"
- Стиль архитектуры, управляемой событиями
- Что такое архитектура, управляемая событием (EDA)
- События в экосистеме Apache Kafka: проектирование EDA-архитектуры
- Готовая EDA. Альтернативный подход к решению проблем проектирования ИТ-систем
- Как событийно-ориентированная архитектура решает проблемы современных веб-приложений
- События, процессы и сервисы: современный подход к автоматизации бизнес-процессов
- 4 вида распространённых ошибок в Event-Driven системах
- Архитектура event-driven приложений
- Event-driven архитектура в Kubernetes
- Event driven architecture (EDA) — из цикла статей про разработку архитектуры для чайников
- А может событийно-ориентированная архитектура?
Видео
- Обзор архитектуры, управляемой событиями (event-driven architecture) из книги «Фундаментальный подход к программной архитектуре: паттерны, свойства, проверенные методы»
- Что такое СОБЫТИЙНО-ОРИЕНТИРОВАННАЯ АРХИТЕКТУРА за 9 минут
- Event-Driven Architecture в контексте микросервисов: основные паттерны | Николай Голов, ManyChat
- Event-Driven Architecture — Виктор Гамов
- Event Driven Architecture // Демо-занятие курса «Microservice Architecture»
- Лекции 7 в НГУ: Event-Driven Architecture