Короткий ответ
В событийно-ориентированной архитектуре сервисы публикуют события о факте произошедшего изменения, а подписчики реагируют асинхронно, что снижает прямую связанность между отправителем и получателями, но усложняет отслеживание сквозного потока обработки.
Как это работает подробнее
Вместо того, чтобы Order Service явно вызывал Notification, Inventory и Analytics по отдельности, он публикует событие «order.created», а каждый заинтересованный сервис сам решает, как реагировать.
Пример кода
Схема
Order Service -> publish "order.created" {order_id, user_id, total}
- Notification Service подписан -> отправляет email
- Inventory Service подписан -> резервирует товар
- Analytics Service подписан -> обновляет дэшбордЧто использовать на практике
- Практика. Плюсы — издатель не зависит от набора и доступности подписчиков, естественная буферизация нагрузки; минусы — сложнее отследить сквозной бизнес-процесс, нужно явно решать вопросы идемпотентности и порядка доставки.
Подводные камни
- Риск. Использовать события там, где нужен немедленный синхронный ответ; не вкладываться в наблюдаемость (трассировка событий через сервисы).