Брокер сообщений — посредник асинхронного взаимодействия (pub/sub, очереди), который буферизует и доставляет сообщения между сервисами.
Когда использовать
-
Декуплинг продюсеров и консьюмеров, сглаживание пиков нагрузки.
-
Фан-аут/фан-ин, ретраи без блокировки основного потока.
-
Event-driven интеграции и интеграция с устаревшими системами.
Ключевые элементы
-
Топики/очереди, разделы/партиции, группы потребителей.
-
Продюсеры/консьюмеры, ack/nack, ретраи, DLQ.
-
Схемы сообщений (JSON/Avro/Protobuf), ключи для партиционирования/идемпотентности.
Гарантии и паттерны
-
Доставка: at-most-once / at-least-once / effectively-once (за счёт идемпотентности).
-
Паттерны: outbox + дедупликация, idempotency key, отложенная доставка, backoff, rebalancing.
-
Порядок: ключи партиции, упорядочивание внутри ключа, компенсации при нарушении порядка.
Выбор и сравнение
-
Kafka — высокая пропускная способность, хранение логов, управление порядком по ключу, pull-модель.
-
RabbitMQ — маршрутизация по exchange/queue, богаче паттерны очередей, удобен для RPC/управляемых ретраев.
-
NATS — лёгкий брокер для low-latency, request/reply и streaming.
Артефакты
-
Спецификация топиков/очередей: схема, ключи, TTL/DLQ, лимиты.
-
Соглашения о ретраях/таймаутах, SLA на доставку, мониторинг лагов.
-
Тесты совместимости продюсер/консьюмер: контракты, фикстуры сообщений.
Когда не использовать
-
Когда нужен строгий глобальный порядок или транзакции между несколькими ресурсами без дополнительных паттернов.
-
Когда нагрузка мала и добавление брокера усложнит эксплуатацию без ценности.
Эксплуатация и мониторинг
-
Метрики: лаги потребителей, доля retry/DLQ, размер очередей, время в пути сообщения.
-
Оповещения: рост лагов, превышение ретраев, отставание от SLA доставки.
-
Процедуры: политика retention, очистка DLQ, бэкапы/восстановление конфигураций.
Контракт сообщений
-
Схема с версиями и правилами совместимости (Avro/Protobuf/JSON Schema).
-
Поля для идемпотентности/корреляции: idempotency key, trace id, источники события.
-
Примеры сообщений и негативные кейсы (битые схемы, неизвестные поля) для контракт-тестов.