Введение
Примечание: данная статья является переводом с дополнительными мыслями автора
MQTT (Message Queue Telemetry Transport) — легковесный протокол обмена сообщениями для публикации/подписки сообщений, на настоящий момент этот протокол является основным стандартом в Интернете Вещей (IoT). Брокер MQTT — главный узел (серверное ПО) для подключения IoT устройств и обмену сообщений между ними. На текущий момент доступно более 20 брокеров MQTT с исходным кодом, что затрудняет выбор архитекторами и разработчиками программного обеспечения. В статье будут рассмотрены и сравнены некоторые из самых популярный MQTT-брокеров.
Критерий оценки: сообщество и популярность
Для сравнения MQTT брокеров с открытым исходным кодом будем учитывать следующие критерии оценки:
Сообщество: оцениваем по количеству звёздочек, числу авторов и закрытых проблем в репозиториях GItHub (или другой площадке);
Популярность: оцениваем по числу скачиваний из репозитория, пользовательской базе и числу установок из docker репозитория;
Активность: оценка по числу коммитов, пулл-реквестов и релизов за последние 12 месяцев.
Основываясь на этих критериях, были выбраны четыре популярных брокера MQTT с открытым исходным кодом:
EMQX — самый популярный брокер MQTT с 11,4 тысячами звёзд на GitHub;
Mosquitto — второй по популярности брокер, имеет самое большое число установок и пользователей:
NanoMQ — новейший и набирающий популярность брокер MQTT, очень легковесный, переносимый и написан на языке C;
VerneMQ — третий по количеству звёзд брокер MQTT на GitHub.
Сводная таблица сравнения этих брокеров:
|
EMQX |
Mosquitto |
NanoMQ |
VerneMQ |
GitHub |
||||
Создан проект |
2012 |
2009 |
2020 |
2014 |
Лицензия |
Apache версии 2.0 |
Лицензия EPL / EDL |
MIT License |
Apache версии 2.0 |
Язык программирования |
Erlang |
C / C ++ |
C |
Erlang |
Последняя версия |
версия 5.0.23 (апрель 2023) |
2.0.15 (август 2022) |
версия 0.17.0 (март 2023) |
версия 1.12.6.2 (ноябрь 2022) |
Звезд на GitHub |
11.5k |
7.2k |
800+ |
3k |
Общее число коммитов |
14k+ |
2800+ |
2000+ |
2400+ |
Число коммитов за последние 12 месяцев |
3000+ |
500+ |
1200+ |
50+ |
Закрытых проблем на GitHub |
3500+ |
2200+ |
120+ |
1300+ |
Релизов |
260+ |
60+ |
75+ |
40 |
Количество PR |
6000+ |
600 |
780+ |
600 |
Количество авторов на GitHub |
100+ |
110+ |
20+ |
50 |
Приступаем к сравнению
EMQX
EMQX — является одним из самых популярных брокеров MQTT и имеет 11,5 тыс. звезд на GitHub. Проект EMQX был запущен в 2012 году и распространяется по лицензии Apache 2.0. EMQX написан на языке Erlang / OTP, том самом знаменитом языке программирования для создания масштабируемых программных систем реального времени.
EMQX — самый масштабируемый в мире брокер MQTT на кластерной основе, который поддерживает расширяемость с помощью плагинов, использует протоколы MQTT 3.1, MQTT 5.0, MQTT-SN и MQTT поверх QUIC. Он поддерживает кластеризацию без мастера для обеспечения высокой доступности и горизонтальной масштабируемости. EMQX 5.0, последняя версия, может обслуживать до 100 миллионов одновременных подключений MQTT только с помощью одного кластера состоящего из 23 узлов.
EMQX также предлагает расширенные корпоративные функции, размещение в облачном хостинге, платную поддержку от компании EMQ Technologies Inc. EMQX завоевал популярность среди различных предприятий, стартапов и частных пользователей благодаря своей высокой производительности, масштабируемости и высокой надёжности. Он распространён среди критически важных для бизнеса отраслях, в таких как Индустриальный Интернет Вещей (Industry IoT), умный дом, автомобильная отрасль, производственные предприятия, телекоммуникации.
Официальный сайт проекта: https://www.emqx.io /
GitHub: https://github.com/emqx/emqx
Достоинства брокера EMQX:
Поддерживает крупномасштабные развертывания
Высокая доступность
Горизонтальная масштабируемость
Высокая производительность и низкая задержка
Богатые корпоративные возможности
Поддержка протокола MQTT over QUIC
Недостатки:
Сложный в настройке
Сложно эффективно управлять (требуется DevOPS)
Mosquitto
Проект Mosquitto разработан Роджером Лайтом в 2009 году, а позже передан на поддержку в Eclipse Foundation, имеет лицензию Eclipse (EPL / EDL license). По состоянию на март 2023 года это самый широко распространенный брокер MQTT с открытым исходным кодом и с большим сообществом и более чем 7 тыс. звезд на GitHub.
Mosquitto написан на языках программирования C / C ++ и использует однопоточную архитектуру (это его главный недостаток). Mosquitto реализует протоколы MQTT версий 5.0, 3.1.1 и 3.1 и поддерживает защищённые соединения SSL / TLS и поддержку веб сокетов. Легкий дизайн Mosquitto делает его подходящим для развертывания во встраиваемых системах или на серверах с ограниченными ресурсами.
Mosquitto имеет небольшой размер около 200 кб. Однако он не поддерживает многопоточность и тем более нет возможности развёртывания на кластере, но Mosquitto доступен для различных платформ, включая Linux, FreeBSD, Windows и macOS.
Официальный сайт проекта: https://mosquitto.org /
Исходный код на GitHub: https://github.com/eclipse/mosquitto
Достоинства:
Простота настройки и использования
Поддержка протокола MQTT 5.0
Легковесный, малое потребление памяти
Активная поддержка сообществом
Недостатки:
Однопоточная архитектура
Ограниченная масштабируемость в продакшне ( <100 тыс.)
Нет поддержки кластеризации
Отсутствуют корпоративные функции
Ограниченная поддержка в облаке
NanoMQ
NanoMQ, проект с открытым исходным кодом, выпущенный в 2020 году, представляет собой легкий и быстрый брокер MQTT, разработанный для вычислительных сценариев Интернете вещей (IoT).
NanoMQ реализован полностью на языке C, использует библиотеку асинхронного программирования NNG и с многопоточной акторной моделью. Брокер полностью поддерживает версии протоколов MQTT 3.1.1, MQTT 5.0 и поддерживает MQTT over QUIC.
NanoMQ отличается малым размером и высокой производительностью, что делает его подходящим для различных периферийных вычислительных платформ (Edge). Он обладает высокой совместимостью и переносимостью, использует исключительно стек POSIX API. Это упрощает развертывание на любой платформе, совместимой с POSIX (Linux, *BSD, MacOS X), и бесперебойно работает на различных архитектурах процессоров, включая x86_64, ARM, MIPS и RISC-V (теперь ещё и E2K).
Примечание: автором проверена сборка и функционирование на компьютерах с процессорами Эльбрус.
Официальный сайт проекта: https://nanomq.io /
Исходный код на GitHub: https://github.com/nanomq/nanomq
Достоинства
Простая архитектура
Поддержка многопоточности и асинхронного ввода-вывод
Высокая переносимость
Малый объем загрузки
Простота развертывания
Поддержка сетевых мостов без посредников
Недостатки
Нет поддержки кластеризации
Небольшое сообщество и база пользователей
Отсутствие документации и руководств
Отсутствие корпоративных функций (интеграция данных)
VerneMQ
Проект VerneMQ был запущен в 2014 году и изначально разработан Erlio GmbH. Проект распространяется по лицензии Apache версии 2.0. Он поддерживает MQTT версий 3.1, 3.1.1 и 5.0. Написан на языке Erlang / OTP, и заимствует некоторый код из проекта EMQX.
Что касается архитектурного дизайна, VerneMQ предназначен для обработки миллионов одновременных подключений и сообщений с низкой задержкой и высокой пропускной способностью. Он поддерживает хранение сообщений MQTT в LevelDB и использует архитектуру кластеризации, основанную на библиотеке Plumtree, которая реализует алгоритм деревьев рассылки Epidemic.
К сожалению, кластерная архитектура Plumtree не доказала свою эффективность, хотя теоретически она казалась идеальной. Команда и сообщество VerneMQ потратили много лет, пытаясь заставить его работать, устраняя такие проблемы, как разделение сети, несогласованность данных и аварийное восстановление.
Наконец, проект перестал активно разрабатываться и поддерживаться, за последние 12 месяцев было зафиксировано всего около 50 коммитов.
Официальный сайт проекта: https://www.vernemq.com /
GitHub репозиторий: https://github.com/vernemq/vernemq
Достоинства:
Высокая доступность
Горизонтальная масштабируемость
Сохранение сообщений
Недостатки:
Не проверенная кластеризация
Ограниченная документация
Ограниченные возможности предприятия
Не активно развивается
Масштабируемость, производительность и надежность
Критерии оценки масштабируемости, надёжности и производительности:
Масштабируемость: может ли брокер масштабироваться горизонтально для обработки миллионов одновременных подключений MQTT
Доступность: Поддерживает ли брокер высокую доступность для критически важных приложений
Производительность: сколько сообщений MQTT в режимах QoS 0/1/2 в секунду может отправлять и доставлять брокер;
Задержка: насколько быстро брокер может отправлять и доставлять сообщения MQTT от одного клиента MQTT другому
Надежность: поддерживает ли брокер сохранение и доставку сообщений MQTT без потери данных
Ниже приведен краткий анализ четырех брокеров MQTT:
|
EMQX |
Mosquitto |
NanoMQ |
VerneMQ |
Масштабируемость |
|
|
|
|
Многопоточность |
ДА |
НЕТ |
ДА |
ДА |
Асинхронный ввод-вывод |
ДА |
ДА |
ДА |
ДА |
Кластеризация |
Да (кластер из более чем 20 узлов) |
НЕТ |
НЕТ |
ДА |
Соединения MQTT на 1 узел |
4 млн. |
100 тыс. |
100 тыс. |
1 млн |
Подключения MQTT на весь кластер |
100 млн. |
- |
- |
? |
Доступность |
|
|
|
|
Архитектура кластеризации без мастера |
ДА |
НЕТ |
НЕТ |
ДА |
Эластичное масштабирование во время выполнения |
ДА |
НЕТ |
НЕТ |
ДА |
Автоматическая кластеризация |
ДА |
НЕТ |
НЕТ |
НЕТ |
Защита от перегрузки |
ДА |
НЕТ |
НЕТ |
ДА |
Отказоустойчивость |
ДА |
НЕТ |
НЕТ |
? |
Производительность (на узел) |
|
|
|
|
Режим QoS0 (сообщений / сек.) |
2 миллиона |
120k |
500k |
? |
Режим QoS1 (сообщений / сек.) |
800k |
80k |
400k |
? |
Режим QoS2 (сообщений / сек.) |
200k |
40k |
200k |
? |
Задержка |
|
|
|
|
Задержка (зависит от разных сценариев) |
Однозначная задержка в миллисекундном масштабе |
Задержка до нескольких секунд в некоторых сценариях |
В большинстве сценариев менее 10 миллисекунд |
Задержка до нескольких секунд в некоторых сценариях |
Надежность |
|
|
|
|
Сохранение сообщений |
В RocksDB и внешних базах данных |
В файлах |
В SQLite |
В LevelDB |
Нулевое время простоя / Горячее обновление |
ДА |
НЕТ |
НЕТ |
НЕТ |
Горячий патч |
ДА |
НЕТ |
НЕТ |
НЕТ |
Протокол MQTT и способы соединения
Все представленные брокеры полностью реализуют протокол MQTT версий 3.1.1 и 5.0 и поддерживают MQTT через WebSocket и шифрование с SSL/ TLS. Кроме того, EMQX поддерживает шлюзы протоколов MQTT-SN, CoAP и LwM2M. NanoMQ поддерживает режим без брокеров и может работать с DDS, ZeroMQ и Nanomsg.
EMQX и NanoMQ взяли на себя обязательство продвигать стандарт MQTT over QUIC. Они являются пионерами в реализации MQTT over QUIC, протокола MQTT следующего поколения, который направлен на дальнейшую оптимизацию взаимодействия IoT.
|
EMQX |
Mosquitto |
NanoMQ |
VerneMQ |
MQTT 3.1/3.1.1 |
ДА |
ДА |
ДА |
ДА |
MQTT 5.0 |
ДА |
ДА |
ДА |
ДА |
MQTT-SN 1.2 |
ДА |
НЕТ |
НЕТ |
НЕТ |
MQTT через TCP |
ДА |
ДА |
ДА |
ДА |
MQTT через SSL / TLS |
ДА |
ДА |
ДА |
ДА |
MQTT через WebSocket |
ДА |
ДА |
ДА |
ДА |
MQTT по сравнению с QUIC |
ДА |
НЕТ |
ДА |
НЕТ |
Объединение MQTT |
ДА |
ДА |
ДА |
ДА |
Общая подписка |
ДА |
ДА |
ДА |
ДА |
Сохраненное сообщение |
ДА |
ДА |
ДА |
ДА |
ДА |
ДА |
ДА |
ДА |
|
ДА |
ДА |
ДА |
ДА |
|
LB (прокси-протокол) |
ДА |
НЕТ |
НЕТ |
ДА |
Мультипротоколный шлюз |
ДА |
НЕТ |
НЕТ |
НЕТ |
CoAP |
ДА |
НЕТ |
НЕТ |
НЕТ |
LwM2M |
ДА |
НЕТ |
НЕТ |
НЕТ |
Шлюз DDS |
НЕТ |
НЕТ |
ДА |
НЕТ |
Шлюз ZeroMQ |
НЕТ |
НЕТ |
ДА |
НЕТ |
Nanomsg/NNG |
НЕТ |
НЕТ |
ДА |
НЕТ |
Безопасность, аутентификация и авторизация
Безопасность имеет решающее значение для подключения устройств Интернета вещей и обмена данными между подключенными устройствами с использованием брокеров MQTT (основные уязвимости в IoT связаны с отсутствием аутентификации и авторизации). Все сравниваемые брокеры поддерживают безопасные соединения на основе протокола TLS / SSL, а также простой механизм аутентификации и авторизации по логину и паролю, аутентификацию по JWT, сертификаты X.509 и спискам контроля доступа.
EMQX предлагает расширенные функции безопасности, такие как интеграция с внешними базами данных (хранение аккаунтов), OCSP, политики контроля доступа, обнаружение сбоев и поддержка авторизации по протоколу OAuth 2.0.
|
EMQX |
Mosquitto |
NanoMQ |
VerneMQ |
TLS/SSL |
Yes |
Yes |
Yes |
Yes |
Сшивание OCSP |
ДА |
ДА |
НЕТ |
НЕТ |
Аутентификация по имени пользователя / паролю |
ДА |
ДА |
ДА |
ДА |
Аутентификация по сертификатам X.509 |
ДА |
ДА |
ДА |
ДА |
Аутентификация JWT |
ДА |
Да (через плагин аутентификации) |
НЕТ |
? |
Аутентификация LDAP |
ДА |
Да (через плагин аутентификации) |
НЕТ |
Да (через плагин) |
Детализированный контроль доступа |
ДА |
ДА |
ДА |
ДА |
Авторизация с использованием баз данных |
Да (встроенный) |
Да (через плагины аутентификации) |
НЕТ |
Да (через плагины аутентификации) |
Обнаружение взмахов |
ДА |
НЕТ |
НЕТ |
НЕТ |
Журналы аудита |
ДА |
НЕТ |
НЕТ |
НЕТ |
Интеграция с хранилищами данных
Все брокеры поддерживают интеграцию с внешними сервисами с использованием REST API и веб-хуки. Как легковесные брокеры, Mosquitto и NanoMQ не поддерживают интеграцию с хранилищами данных. Разработчики могут писать код с использованием брокера Mosquitto и самим передавать их во внешние базы данных или облачные сервисы.
EMQX реализует встроенный механизм правил на основе SQL, помогающий извлекать, фильтровать, обогащать и преобразовывать сообщения MQTT в брокере в режиме реального времени. И корпоративной версии EMQX могут легко интегрироваться с Kafka, базами данных и облачными сервисами с использованием готовых мостов передачи данных.
Таблица сравнения с поддерживаемыми провайдерами хранения данных:
|
EMQX |
Mosquitto |
NanoMQ |
VerneMQ |
Веб-хуки |
ДА |
ДА |
ДА |
ДА |
Механизм правил |
ДА |
НЕТ |
Да (ограничено) |
НЕТ |
Кодирование сообщений |
ДА |
НЕТ |
НЕТ |
НЕТ |
Реестр схем (моделей данных) |
ДА |
НЕТ |
НЕТ |
НЕТ |
Поддержка сетевого моста |
ДА |
НЕТ |
НЕТ |
НЕТ |
Confluent/Kafka |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
SAP Event Mesh |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
Apache Pulsar |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
RabbitMQ |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
MySQL |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
PostgreSQL |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
SQL Server |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
MongoDB |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
AWS DynamoDB |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
ClickHouse |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
InfluxDB |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
TimescaleDB |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
Oracle |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
Redis |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
Cassandra |
Да (Корпоративная версия) |
НЕТ |
НЕТ |
НЕТ |
Работоспособность, мониторинг и совместимость
Каждый брокер удобен в использовании и оснащен необходимыми функциями ведения журнала и отладки для мониторинга их состояния и эффективного устранения неполадок. Они могут работать в различных операционных системах и общедоступных облачных платформах. Кроме того, EMQX обладает отличной поддержкой Kubernetes Operator и Terraform.
Кроме того, EMQX предоставляет широкие возможности визуального мониторинга через HTTP API и панель мониторинга, упрощая мониторинг и управление. Кроме того, EMQX поддерживает интеграцию с Prometheus и Grafana, позволяя командам легко использовать платформы мониторинга сторонних производителей.
|
EMQX |
Mosquitto |
NanoMQ |
VerneMQ |
Информационная панель |
ДА |
НЕТ |
НЕТ |
НЕТ |
Конфигуратор |
Формат HOCON |
Формат Ключ-значение |
Формат HOCON |
Формат Ключ-значение |
Горячее обновление конфигурации |
ДА |
НЕТ |
Да (Ограничено) |
НЕТ |
REST API |
ДА |
ДА |
ДА |
ДА |
Утилиты командной строки (cli) |
ДА |
ДА |
ДА |
ДА |
Удаленная консоль |
ДА |
НЕТ |
НЕТ |
ДА |
Метрики |
ДА |
ДА |
ДА |
ДА |
Интеграция с Grafana |
ДА |
ДА |
ДА |
ДА |
Мониторинг Prometheus |
ДА |
ДА |
ДА |
ДА |
Контейнеры Docker |
ДА |
ДА |
ДА |
ДА |
Kubernetes |
Да (EMQX Kubernetes) |
НЕТ |
НЕТ |
НЕТ |
Terraform |
Да (EMQX Terraform) |
НЕТ |
НЕТ |
НЕТ |
Финальное сравнение
Сводная таблица сравниваемых брокеров MQTT по всем критериям:
|
EMQX |
Mosquitto |
NanoMQ |
VerneMQ |
Масштабируемость |
Отлично |
Умеренно |
Хорошо |
Хорошо |
Доступность |
Отлично |
Умеренно |
Умеренно |
Хорошо |
Производительность |
Отлично |
Отлично |
Отлично |
Хорошо |
Задержка (latency) |
Отлично |
Хорошо |
Отлично |
Хорошо |
Надежность |
Хорошо |
Хорошо |
Хорошо |
Умеренно |
Безопасность |
Отлично |
Отлично |
Хорошо |
Хорошо |
Аутентификация и авторизация |
Отлично |
Хорошо |
Умеренно |
Хорошо |
Возможность подключения |
Отлично |
Хорошо |
Хорошо |
Хорошо |
Интеграция |
Отлично |
Умеренно |
Умеренно |
Умеренно |
Работоспособность |
Хорошо |
Отлично |
Хорошо |
Умеренно |
Мониторинг |
Отлично |
Умеренно |
Умеренно |
Хорошо |
Совместимость |
Хорошо |
Отлично |
Отлично |
Хорошо |
Простота использования |
Хорошо |
Отлично |
Хорошо |
Хорошо |
Поддержка сообществом |
Отлично |
Отлично |
Хорошо |
Умеренно |
Заключение
За последнее десятилетие брокеры MQTT с открытым исходным стали основным инструментом для построения Интернета вещей. Эти брокеры сыграли значительную роль в улучшении функциональности, масштабируемости и переносимости протокола обмена сообщениями MQTT. Без этого вклада MQTT, возможно, не стал бы таким широко распространенным и универсальным, как сегодня.
Выбор брокера MQTT зависит от различных факторов, таких как количество подключенных устройств, пропускная способность сообщений и требования к интеграции. Из сравнения мы можем сделать вывод, что EMQX - это высокомасштабируемый брокер корпоративного уровня для крупномасштабных критически важных развертываний в облаке. Mosquitto и NanoMQ быстрые и легкие, что делает их подходящими для развертывания на встраиваемом оборудовании с ограниченными ресурсами, промышленных шлюзах и Edge- серверах Интернета вещей.
Будущее IoT
C быстрым расширением Интернета вещей количество подключенных устройств, по различным прогнозам, превысит 100 миллиардов к 2030 году. В результате протокол MQTT может стать еще более незаменимым и потенциально может стать нервной системой Интернета вещей.
В настоящее время в разработке находится несколько технологий, такие как MQTT over QUIC, MQTT Serverless, MQTT Unified Namespace и многие другие.
Ссылки
[2] Comparsion of MQTT implementations
[3] Stress-Testing MQTT Brokers: A Comparative Analysis of Performance Measurements
Комментарии (10)
Indemsys
22.12.2023 19:16Про Mosquitto несправедливо сказано об ограничении в 100 тыс. соединений. Там есть макрос WITH_EPOLL и соединений в таком случае можно сделать не меньше чем в EMQX.
И база данный в Mosquitto есть и работает в памяти, а не через файлы. В файл база сохраняется, когда Mosquitto выключают.
Про время реакции Mosquitto тоже явное искажение. В моей реализации клиента через Mosquitto в реальном времени перекачиваются целые файлы с логами и прошивками. Но если операционная система нагружена, то любой брокер станет лагать и многозадачность не поможет. Масштабироваться Mosquitto тоже способен через шлюзы с другими брокерами и через создание слушателей на разных портах.ryo_oh_ki
22.12.2023 19:16Более того, Mosquitto сам написан на C, т.е. он про производительность и неприхотливость, соответственно не требует докера, родной и под виндой, и под линуксом. А так же идёт вместе с библиотекой mqtt, которую легко использовать в любом встраиваемом решении, попробуйте тоже самое сделать с эрлангом...
baldr
22.12.2023 19:16Примерно то же самое и написано в статье. А также упомянуто что он однопоточный и что это его главный минус.
Для встраиваемых систем - да, на роутер не поставишь всякие RabbitMQ. Но, во-первых, не так много причин вообще иметь брокер на слабом роутере, а во-вторых при мало-мальски серьезной нагрузке на брокер его сразу лучше поставить на отдельный сервер, а там уже и выбор сразу больше.
Насчет "не требует докера" - тут вы неправы в выводе. Это совершенно не следует не из чего. Запускать бинарник можно и в контейнере - для этого тоже достаточно причин. А также и собирать на целевой платформе тоже можно в контейнере.
baldr
Я, конечно, понимаю что это перевод и вопросы к автору тут не задашь..
Однако я, например, ожидал хотя бы упоминания RabbitMQ с его MQTT-плагином. Проверен, развивается, масштабируется, опенсорс, мало памяти, много звезд... Я его на очень больших нагрузках не проверял, конечно, но думаю, может вытянуть тоже.
EntityFX Автор
Да, мне RabbitMQ тоже понравился, но я его использовал как брокер очередей с протоколом AMQP для коммуникации между микросервисами. Недавно смотрел Apache ActiveMQ брокер и он предоставляет MQTT протокол и небольшой мониторинг из коробки.
baldr
У меня тоже все построено на RabbitMQ/AMQP, но когда понадобилось принимать телеметрию с десятка устойств - я не захотел добавлять еще один брокер и дружить его с остальными зверями, так что все льется сразу в общую шину, почти из коробки.
Я сделал авторизацию по клиентским сертификатам и TLS через nginx streams, так что на RabbitMQ приходит чистый трафик и отсекаются всякие боты. Заодно, думаю, можно балансировать так же через nginx если понадобится (мне - вряд ли).
dph
Хм, он по производительности совсем в другой лиге, там и 50k сообщений в секунду - уже проблема, да и с надежностью и кластеризацией не очень хочется. Его можно разве что с Mosquito сравнивать, но будет примерно то же - сплошные "нет" и "умеренно".
EntityFX Автор
Надо, по возможности, его (RabbitMQ) исследовать нагрузочными тестами. Я не помню, требуется ли для этого точный тюнинг настроек и как он полетит в Docker контейнере.
baldr
Случайные цитаты из поиска гугла (простите, без пруфов):
...
Ну и т.п. Я не уверен что однопоточный Mosquitto на одном CPU может те же 50к/сек нормально тащить. И что он с ними потом будет делать.. Впрочем на 50k для одного сервера RabbitMQ я тоже скептически смотрю. У меня не было таких больших нагрузок никогда и даже кластер я только пару раз использовал, наверное.
Надо, опять же, смотреть не только на одну цифру. У RabbitMQ его киллер-фича - это роутинг сообщений через каскад exchange/queue. Kafka тоже заявляет пропускную способность в сотни раз выше RabbitMQ, но работать с ней - надо знать особенности, а администрировать - тоже надо любителей поискать. А сообщения - их мало принимать на определённой скорости - их надо ещё хранить и отдавать потребителям (тоже на такой же скорости).
Правильным масштабированием можно решить проблему пропускной способности для любого брокера. Можно, например, поставить load balancer и перенаправлять клиентов в разные кластеры и т.п.
У меня больше опыта именно с RabbitMQ и я предпочту использовать именно его, до тех пор, пока совсем уж не упрётся в лимиты или будет не хватать фич.