Skip to content

Сравнение брокеров сообщений

Elizaveta Andreeva edited this page Jan 24, 2024 · 1 revision

Сравнение брокеров сообщений

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

Брокер сообщений — архитектурный паттерн в распределённых системах; приложение, которое преобразует сообщение по одному протоколу от приложения-источника в сообщение протокола приложения-приёмника, тем самым выступая между ними посредником. Кроме преобразования сообщений из одного формата в другой, в задачи брокера сообщений также входит:

  • проверка сообщения на ошибки;
  • маршрутизация конкретному приемнику(ам);
  • разбиение сообщения на несколько маленьких, а затем агрегирование ответов приёмников и отправка результата источнику;
  • сохранение сообщений в базе данных;
  • вызов веб-сервисов;
  • распространение сообщений подписчикам, если используются шаблоны типа «издатель — подписчик».

Использование брокеров сообщений позволяет разгрузить веб-сервисы в распределённой системе, так как при отправке сообщений им не нужно тратить время на некоторые ресурсоёмкие операции типа маршрутизации и поиска приёмников. Кроме того, брокер сообщений для повышения эффективности может реализовывать стратегии упорядоченной рассылки и определение приоритетности, балансировать нагрузку и прочее.

В работе любого брокера сообщений используются две основные сущности:

  • Producer / Publisher — занимается отправкой сообщения в брокер;
  • Consumer / Subscriber — получает и обрабатывает сообщения из брокера;

Самые популярные брокеры сообщений

На данный момент самыми популярными брокерами сообщений являются Apache Kafka, RabbitMQ и Redis.

Особенности Apache Kafka

Один из самых популярных брокеров, который достаточно активно используется и имеет очень много возможностей.

  • Подписчики должны сами «забирать» сообщения;
  • Постоянное хранение данных. Все сообщения хранятся ограниченное количество времени, которое конфигурируется на уровне брокера.
  • Позволяет перечитывать сообщения.
  • Гарантирует порядок сообщений в разрезе топика. В каком порядке publisher прислал сообщения, в таком порядке subscriber их и получит.

Особенности Rabbit MQ

Тоже один из популярных брокеров. Он менее производительный, по сравнению с Kafka, но у него есть свои плюсы.

  • Гибкая маршрутизация. Здесь мы можем выстраивать такие системы, которые требуют передачи данных в множество частей или микросервисов. За счет него можно облегчить эту задачу путем использования всех возможностей.
  • Удаляет сообщение после доставки его получателю.

Есть сложности при горизонтальном масштабировании в кластере.

Особенности Redis

  • Резервное копирование на определенный момент времени;
  • Имеет ограниченный функционал по сравнению с другими брокерами.

Сравнение популярных брокеров

Брокер Количество сообщений, отправляемых в системе, в секунду Возможность восстановления сообщений Клиентские возможности
Apache Kafka Очень быстрый, позволяет обрабатывать более 1 млн сообщений в секунду Есть Один ко многим
RabbitMQ Около 50 тысяч сообщений в секунду (зависит от конфигурации) Поддерживает постоянные и временные сообщения Один к одному и один ко многим
Redis До 1 млн сообщений в секунду Частичная реализация Один к одному и один ко многим

Когда и какой брокер лучше использовать

Apache Kafka

  • когда нужно обработать большой объем данных, которые очень быстро генерируются
  • при реализации транзакционных или конвейерных систем
  • при построении событийно-ориентированной архитектуры
  • при использовании буфера для логов и метрик

RabbitMQ

  • нет большого потока данных
  • важна гибкость маршрутизации сообщений внутри системы
  • важен факт доставки сообщений

Redis

  • необходима обработка больших объемов данных
  • не требуется персистентность (возможность восстановления сообщений)
  • необходима высокая скорость доставки сообщений