Перейти к основному содержимому

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

Event Driven Architecture

Event-Driven Architecture (EDA) — архитектурный подход, при котором система строится вокруг событий.

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

Компоненты EDA

  • Событие – любое изменение состояния некой сущности или возникновение новой.
  • Производитель события – сервис, который создаёт событие.
  • Обработчик события – сервис, который получает событие и обрабатывает его, после чего порождается новое событие – результат обработки события.
  • Маршрутизатор события – промежуточный слой, который обеспечивает доставку события от производителя до обработчика. Обычно это брокер сообщений.

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

Модели доставки событий в EDA

1. Pub/Sub

  1. Производители генерируют события и отправляют брокеру.
  2. Брокер направляет события потребителям, которые на них подписались.
  3. После отправки события удаляются. Пример: RabbitMQ.

2. Потоковая передача

  1. Производители генерируют события и отправляют брокеру.
  2. Брокер сохраняет события у себя в журнале.
  3. Потребители считывают события из любой части журнала в любой момент времени. События не удаляются брокером. Пример: Kafka.

Преимущества событийно-ориентированной архитектуры

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

Недостатки EDA

  • Сложность разработки и тестирования: распределённая архитектура и асинхронное взаимодействие увеличивают сложность.
  • Отсутствие транзакционности: трудно поддерживать транзакции между распределёнными компонентами.
  • Единая точка отказа: брокер сообщений является критическим элементом системы.
  • Дополнительные затраты на инфраструктуру: реализация EDA требует больше ресурсов и увеличивает расходы на поддержку.

Подборка материалов по Event Driven Architecture

Статьи

  1. Фрагмент про событийно-ориентированную архитектуру из книги Марка Ричардса "Паттерны архитектуры программного обеспечения"
  2. Стиль архитектуры, управляемой событиями
  3. Что такое архитектура, управляемая событием (EDA)
  4. События в экосистеме Apache Kafka: проектирование EDA-архитектуры
  5. Готовая EDA. Альтернативный подход к решению проблем проектирования ИТ-систем
  6. Как событийно-ориентированная архитектура решает проблемы современных веб-приложений
  7. События, процессы и сервисы: современный подход к автоматизации бизнес-процессов
  8. 4 вида распространённых ошибок в Event-Driven системах
  9. Архитектура event-driven приложений
  10. Event-driven архитектура в Kubernetes
  11. Event driven architecture (EDA) — из цикла статей про разработку архитектуры для чайников
  12. А может событийно-ориентированная архитектура?

Видео

  1. Обзор архитектуры, управляемой событиями (event-driven architecture) из книги «Фундаментальный подход к программной архитектуре: паттерны, свойства, проверенные методы»
  2. Что такое СОБЫТИЙНО-ОРИЕНТИРОВАННАЯ АРХИТЕКТУРА за 9 минут
  3. Event-Driven Architecture в контексте микросервисов: основные паттерны | Николай Голов, ManyChat
  4. Event-Driven Architecture — Виктор Гамов
  5. Event Driven Architecture // Демо-занятие курса «Microservice Architecture»
  6. Лекции 7 в НГУ: Event-Driven Architecture

Книги

  1. Марк Ричардс. Фундаментальный подход к программной архитектуре
  2. Бен Стопфорд. Проектирование событийно-ориентированных систем
  3. Practical Event-Driven Microservices Architecture: Building Sustainable and Highly Scalable Event-Driven Microservices