Anton Sidorov homepage

Bookmark this to keep an eye on my project updates!

Follow me on GitHub

Event Driven Architecture (EDA) Событийно ориентированная архитектура

Зачем

  • Multiple subsystems must process the same events.
  • Real-time processing with minimum time lag.
  • Complex event processing, such as pattern matching or aggregation over time windows.
  • High volume and high velocity of data, such as IoT.
  • Background Jobs: Sending background messages, emails, or notifications to loads of users.
  • Asynchronous Messaging: Messaging queues are the best way to implement asynchronous programming.
  • High Response Time: When the response time of a request is too much. For example, calculations, searching or pdf creation, etc.

Плюсы и минусы

Критерии

Плюсы

  • Слабая связность. Подсистемы получают независимые представления потока событий.
  • Масштабируемость. Производительность
  • Отправители и получатели независимы друг от друга
  • Нет интеграции “точка — точка”. Очень легко добавлять в систему новые объекты-получатели.
  • Объекты-получатели могут реагировать на события сразу при их поступлении.
  • Гибкость

Минусы

  • Обеспечить последовательность событий
  • Асинхронный обмен сообщениями и итоговая согласованность
  • Управляемость
  • Взаимодействие между службами
  • Гарантированная доставка
  • Сложность реализации
  • Сложность тестирования

Паттерны

  • two main topologies
    • The mediator topology is commonly used when you need to orchestrate multiple steps within an event through a central mediator
      • Spring Integration, Apache Camel, Mule ESB
      • BPEL (business process execution language)
      • BPMS
    • broker topology is used when you want to chain events together without the use of a central mediator (хореография).
  • Событие Event driven
    • Publish-subscribe
    • Подходы к передаче событий
      • событие event
      • состояние state
    • Слабая связанность (Low Coupling) — одно из основных преимуществ обработки, управляемой событиями. Это позволяет производителям событий создавать события, не зная о том, кто будет потреблять эти события. Точно так же потребители событий не должны знать об источниках событий. Из-за слабой связанности модули, потребляющие события, и модули, создающие события, могут быть реализованы на разных языках или использовать разные технологии, подходящие для конкретных задач.
  • Команда Command driven
  • Запросы CQRS - command query request segregation
  • Event sourcing
  • Распределенные транзакции (лучше не делать)
    • SAGA - компенсационные действия для отмены “транзакции”
    • двухфазный комит - намерение, получено ок от участников, комит
  • Versioning Message

Технологии

  • Шины сообщений\событий Event\Message Bus (брокер обмена сообщениями Message Broker) можно выбрать одну из нескольких технологий (траспорт) обмена сообщениями
  • Реализации шин сообщений (фреймворк)
    • .NET
      • NServiceBus
      • MassTransit или Brighter
      • EasyNetQ
      • abp.io
    • Python
      • Celery
    • PHP
  • MS Обмен сообщениями

TODO