-
Notifications
You must be signed in to change notification settings - Fork 1
Сравнение брокеров сообщений
Брокер сообщений — архитектурный паттерн в распределённых системах; приложение, которое преобразует сообщение по одному протоколу от приложения-источника в сообщение протокола приложения-приёмника, тем самым выступая между ними посредником. Кроме преобразования сообщений из одного формата в другой, в задачи брокера сообщений также входит:
- проверка сообщения на ошибки;
- маршрутизация конкретному приемнику(ам);
- разбиение сообщения на несколько маленьких, а затем агрегирование ответов приёмников и отправка результата источнику;
- сохранение сообщений в базе данных;
- вызов веб-сервисов;
- распространение сообщений подписчикам, если используются шаблоны типа «издатель — подписчик».
Использование брокеров сообщений позволяет разгрузить веб-сервисы в распределённой системе, так как при отправке сообщений им не нужно тратить время на некоторые ресурсоёмкие операции типа маршрутизации и поиска приёмников. Кроме того, брокер сообщений для повышения эффективности может реализовывать стратегии упорядоченной рассылки и определение приоритетности, балансировать нагрузку и прочее.
В работе любого брокера сообщений используются две основные сущности:
- Producer / Publisher — занимается отправкой сообщения в брокер;
- Consumer / Subscriber — получает и обрабатывает сообщения из брокера;
На данный момент самыми популярными брокерами сообщений являются Apache Kafka, RabbitMQ и Redis.
Один из самых популярных брокеров, который достаточно активно используется и имеет очень много возможностей.
- Подписчики должны сами «забирать» сообщения;
- Постоянное хранение данных. Все сообщения хранятся ограниченное количество времени, которое конфигурируется на уровне брокера.
- Позволяет перечитывать сообщения.
- Гарантирует порядок сообщений в разрезе топика. В каком порядке publisher прислал сообщения, в таком порядке subscriber их и получит.
Тоже один из популярных брокеров. Он менее производительный, по сравнению с Kafka, но у него есть свои плюсы.
- Гибкая маршрутизация. Здесь мы можем выстраивать такие системы, которые требуют передачи данных в множество частей или микросервисов. За счет него можно облегчить эту задачу путем использования всех возможностей.
- Удаляет сообщение после доставки его получателю.
Есть сложности при горизонтальном масштабировании в кластере.
- Резервное копирование на определенный момент времени;
- Имеет ограниченный функционал по сравнению с другими брокерами.
Брокер | Количество сообщений, отправляемых в системе, в секунду | Возможность восстановления сообщений | Клиентские возможности |
---|---|---|---|
Apache Kafka | Очень быстрый, позволяет обрабатывать более 1 млн сообщений в секунду | Есть | Один ко многим |
RabbitMQ | Около 50 тысяч сообщений в секунду (зависит от конфигурации) | Поддерживает постоянные и временные сообщения | Один к одному и один ко многим |
Redis | До 1 млн сообщений в секунду | Частичная реализация | Один к одному и один ко многим |
- когда нужно обработать большой объем данных, которые очень быстро генерируются
- при реализации транзакционных или конвейерных систем
- при построении событийно-ориентированной архитектуры
- при использовании буфера для логов и метрик
- нет большого потока данных
- важна гибкость маршрутизации сообщений внутри системы
- важен факт доставки сообщений
- необходима обработка больших объемов данных
- не требуется персистентность (возможность восстановления сообщений)
- необходима высокая скорость доставки сообщений