Как стать автором
Обновить

Сравнение популярных брокеров MQTT с открытым исходным кодом

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров31K
Всего голосов 19: ↑16 и ↓3+15
Комментарии11

Комментарии 11

Я, конечно, понимаю что это перевод и вопросы к автору тут не задашь..

Однако я, например, ожидал хотя бы упоминания RabbitMQ с его MQTT-плагином. Проверен, развивается, масштабируется, опенсорс, мало памяти, много звезд... Я его на очень больших нагрузках не проверял, конечно, но думаю, может вытянуть тоже.

Да, мне RabbitMQ тоже понравился, но я его использовал как брокер очередей с протоколом AMQP для коммуникации между микросервисами. Недавно смотрел Apache ActiveMQ брокер и он предоставляет MQTT протокол и небольшой мониторинг из коробки.

У меня тоже все построено на RabbitMQ/AMQP, но когда понадобилось принимать телеметрию с десятка устойств - я не захотел добавлять еще один брокер и дружить его с остальными зверями, так что все льется сразу в общую шину, почти из коробки.

Я сделал авторизацию по клиентским сертификатам и TLS через nginx streams, так что на RabbitMQ приходит чистый трафик и отсекаются всякие боты. Заодно, думаю, можно балансировать так же через nginx если понадобится (мне - вряд ли).

Хм, он по производительности совсем в другой лиге, там и 50k сообщений в секунду - уже проблема, да и с надежностью и кластеризацией не очень хочется. Его можно разве что с Mosquito сравнивать, но будет примерно то же - сплошные "нет" и "умеренно".

Надо, по возможности, его (RabbitMQ) исследовать нагрузочными тестами. Я не помню, требуется ли для этого точный тюнинг настроек и как он полетит в Docker контейнере.

Случайные цитаты из поиска гугла (простите, без пруфов):

As per RabbitMQ documentation, the TPS a single queue can handle is 50000 TPS.

...

RabbitMQ can also process a million messages per second but requires more resources (around 30 nodes).

Ну и т.п. Я не уверен что однопоточный Mosquitto на одном CPU может те же 50к/сек нормально тащить. И что он с ними потом будет делать.. Впрочем на 50k для одного сервера RabbitMQ я тоже скептически смотрю. У меня не было таких больших нагрузок никогда и даже кластер я только пару раз использовал, наверное.

Надо, опять же, смотреть не только на одну цифру. У RabbitMQ его киллер-фича - это роутинг сообщений через каскад exchange/queue. Kafka тоже заявляет пропускную способность в сотни раз выше RabbitMQ, но работать с ней - надо знать особенности, а администрировать - тоже надо любителей поискать. А сообщения - их мало принимать на определённой скорости - их надо ещё хранить и отдавать потребителям (тоже на такой же скорости).

Правильным масштабированием можно решить проблему пропускной способности для любого брокера. Можно, например, поставить load balancer и перенаправлять клиентов в разные кластеры и т.п.

У меня больше опыта именно с RabbitMQ и я предпочту использовать именно его, до тех пор, пока совсем уж не упрётся в лимиты или будет не хватать фич.

Про Mosquitto несправедливо сказано об ограничении в 100 тыс. соединений. Там есть макрос WITH_EPOLL и соединений в таком случае можно сделать не меньше чем в EMQX.
И база данный в Mosquitto есть и работает в памяти, а не через файлы. В файл база сохраняется, когда Mosquitto выключают.
Про время реакции Mosquitto тоже явное искажение. В моей реализации клиента через Mosquitto в реальном времени перекачиваются целые файлы с логами и прошивками. Но если операционная система нагружена, то любой брокер станет лагать и многозадачность не поможет. Масштабироваться Mosquitto тоже способен через шлюзы с другими брокерами и через создание слушателей на разных портах.

Добавил вашу статью в закладки, ознакомлюсь, большое спасибо.

Более того, Mosquitto сам написан на C, т.е. он про производительность и неприхотливость, соответственно не требует докера, родной и под виндой, и под линуксом. А так же идёт вместе с библиотекой mqtt, которую легко использовать в любом встраиваемом решении, попробуйте тоже самое сделать с эрлангом...

Примерно то же самое и написано в статье. А также упомянуто что он однопоточный и что это его главный минус.

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

Насчет "не требует докера" - тут вы неправы в выводе. Это совершенно не следует не из чего. Запускать бинарник можно и в контейнере - для этого тоже достаточно причин. А также и собирать на целевой платформе тоже можно в контейнере.

У меня периодически, раз в пару месяцев вешается один из Mosquitto из поставки Дебиана, причём что из 9го что из 10го. Сообщений по не несколько штук в секунду всего, считай нет нагрузки. Процесс может работать месяцами потом внезапно распухает по памяти.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий