Перейти к основному содержимому

2.09. Брокеры сообщений

Всем

Брокеры сообщений

Вы наверняка сталкивались с термином «брокер», используемом при сделках на бирже? А теперь представьте, что между системами нужно обеспечить асинхронную доставку большого количества сообщений, через посредника-агента.

Брокер сообщений — это программное обеспечение или система, которая управляет обменом данными между приложениями, сервисами или системами. Некоторые считают брокеры сообщений как архитектурные шаблоны в распределённых системах, но основна задача брокеров - преобразовать сообщение источника в сообщение приёмника.

Брокер выступает в роли посредника, который принимает сообщения от «производителей» (producers) и передаёт их «потребителям» (consumers). Это позволяет организовать асинхронную связь между компонентами системы.

Производитель отправляет сообщение в брокер и продолжает свою работу, не дожидаясь ответа от потребителя, а брокер гарантирует доставку сообщений даже в случае сбоев (например, через очереди и подтверждения) и позволяет распределять нагрузку между несколькими потребителями, что упрощает масштабирование.

Среди брокеров различают RabbitMQ (модель очередей), Apache Kafka (модель топиков), ActiveMQ (классический брокер сообщений с поддержкой JMS), IBM MQ и Redis (который также используется для кэширования).

Потребители нуждаются в данных для выполнения своих функций - учёт, отслеживание, вычисления, мониторинг, проверки. Данные передаются как раз в виде структурированного пакета данных - сообщения. В RabbitMQ/IBM MQ/ActiveMQ их так и называют - «сообщения», а в Apache Kafla называются «топики».

Мы рассмотрим RabbitMQ и Kafka по отдельности. Для начала давайте разграничим их в виде таблицы отличий:

КритерийRabbitMQKafka
АрхитектураОснована на очередях (queues).Основана на топиках (topics) с партициями (partitions).
Модель работыПроизводитель → Обменник (Exchange) → Очередь → Потребитель.Производитель → Топик → Партиция → Потребитель.
УпорядоченностьГарантируется порядок в пределах одной очереди.Гарантируется порядок только внутри одной партиции.
Состояние данныхСообщения хранятся до доставки или истечения времени хранения.Сообщения хранятся на диске в течение заданного времени (например, 7 дней).
ПроизводительностьДо десятков тысяч сообщений/секунду.До миллионов сообщений/секунду.
ЗадержкиНизкие задержки благодаря прямой передаче через очереди.Задержки выше из-за партиционирования и логической структуры.
РесурсыТребует меньше ресурсов для небольших нагрузок.Требует больше памяти и дискового пространства.
МасштабируемостьМасштабируется за счёт добавления брокеров, но сложнее настроить кластер.Легко масштабируется за счёт добавления брокеров и партиций.
Гарантия доставкиГарантированная доставка каждого сообщения.Доставка "хотя бы один раз" (at-least-once delivery).
МаршрутизацияПоддерживает сложные правила маршрутизации через обменники (exchanges).Маршрутизация ограничена топиками и партициями.
Веб-интерфейсВстроенный веб-интерфейс (RabbitMQ Management).Нет встроенного интерфейса, но можно использовать сторонние инструменты.
Сценарии использованияФоновые задачи, микросервисы, системы уведомлений.Потоковая аналитика, логирование, мониторинг, IoT.
Примеры задачОтправка email, обработка заказов, рассылка уведомлений.Сбор и анализ логов, мониторинг событий, обработка данных в реальном времени.