Зачем асинхронный обмен: очереди, pub/sub, события
↑ 5.4 Очереди и брокеры: Kafka, RabbitMQ · → Следующая
Зачем это на собесе
Базовый вопрос про микросервисы: когда вызывать синхронно, а когда через брокер.
Объяснение
Синхронный вызов (HTTP/gRPC) связывает сервисы по времени: если получатель недоступен, отправитель ждёт или падает. Брокер сообщений разделяет их по времени, нагрузке и знанию друг о друге.
| Модель | Как работает | Пример |
|---|---|---|
| Очередь (point-to-point) | сообщение получает один потребитель | обработка задач, отправка писем |
| Pub/Sub | сообщение получают все подписчики | событие OrderPaid для склада, биллинга, аналитики |
| Log (Kafka) | упорядоченный журнал, потребители читают со своей позиции | потоки событий, аналитика |
| Тип сообщения | Смысл | Пример |
|---|---|---|
| Команда | «сделай X», адресована одному получателю | SendEmail |
| Событие | «произошло X», факт, подписчиков много | OrderPaid |
| Запрос/ответ | RPC поверх очереди | редко |
Преимущества: буферизация пиков, отказоустойчивость (получатель может быть выключен), независимое масштабирование, слабая связность. Цена: eventual consistency, сложная отладка, дублирование и порядок сообщений, дополнительная инфраструктура.
Нюансы и подводные камни
- Событие называйте в прошедшем времени и описывайте факт; команду — в повелительном.
- Не превращайте очередь в скрытый RPC: ожидание ответа возвращает связность.
- Потребитель должен быть идемпотентным: доставка обычно at-least-once.
- Следите за размером очереди и лагом потребителей.
- Не всё нужно делать асинхронно: где нужен немедленный ответ — синхронный вызов.
Практика
- Разделите сценарий «оформление заказа» на синхронную часть и события.
- Нарисуйте потоки событий между сервисами.
- Определите, какие операции допускают eventual consistency.
Вопросы с ответами
Зачем брокер, если есть HTTP?
Развязка по времени и нагрузке, буферизация, надёжная доставка, широковещательные события.
Команда и событие — в чём разница?
Команда просит выполнить действие одного адресата, событие сообщает о свершившемся факте многим подписчикам.
Какая цена асинхронности?
Eventual consistency, дубли и порядок, сложность отладки и эксплуатации.