**Почему событийная архитектура хорошо сочетается с микросервисами?

**
Представим систему, в которой после подтверждения платежа нужно отправить клиенту квитанцию. В простой реализации сервис платежей напрямую обращается к email-сервису. По мере развития продукта появляются новые задачи: сформировать счёт-фактуру, обновить метрики, отправить уведомление. Сервис платежей начинает вызывать каждый из этих сервисов самостоятельно. Чем больше становится система, тем больше возникает прямых зависимостей и тем сложнее вносить изменения.
Событийная архитектура решает эту проблему иначе. После успешной операции сервис платежей публикует событие «Платёж подтверждён». Email-сервис реагирует на него и отправляет квитанцию, биллинг формирует счёт-фактуру, сервис метрик обновляет дашборды, а сервис уведомлений сообщает клиенту об оплате. Если впоследствии появится ещё один микросервис, его достаточно подписать на это событие. Изменять сервис платежей не потребуется.
Обычно события передаются через брокер сообщений, например Kafka или RabbitMQ. Он принимает опубликованное событие и доставляет его заинтересованным потребителям. Такой подход уменьшает связанность микросервисов и позволяет развивать их независимо. Однако у событийной архитектуры есть своя цена: необходимо учитывать повторную доставку и дублирование событий, порядок их обработки, повторные попытки после ошибок и сквозную наблюдаемость системы
__Во многих распределённых системах такой компромисс оказывается оправданным__


