Что такое MQTT-сервер
Давайте погрузимся в мир интернета вещей и разберемся с ключевым элементом его коммуникаций ― MQTT-сервером. Как организовать поток данных от датчика к компьютеру, который управляет системой умного дома или целого завода, так чтобы это было эффективно и надежно? Именно здесь на помощь приходит MQTT.
Что такое MQTT-сервер на примере
Представьте себе огромный почтовый офис в цифровом мире. Отправители, например, датчики температуры, приносят свои письма (данные о температуре) в этот офис, не зная точно, кто их будет читать. Получатели, например, приложение на вашем телефоне или система управления климатом, приходят в тот же офис и говорят: Я хочу получать все письма на тему «температура в гостиной». Почтовый офис принимает письма от отправителей, сортирует их по темам и доставляет тем, кто на эти темы подписан.
MQTT-server (MQTT Broker) ― это и есть такой цифровой почтовый офис. То есть ПО, которое является посредником при обмене информацией между разными устройствами и приложениями.
MQTT (Message Queuing Telemetry Transport) ― это сам протокол, а точнее, набор правил, по которым устройства взаимодействуют. Это очень легковесный протокол обмена данными по принципу публикация-подписка (publish-subscribe), созданный специально для работы с сетью с ограниченной пропускной способностью и устройствами с малыми вычислительными ресурсами, что типично для мира интернета вещей.
Хотите сосредоточиться на коде, а не на инфраструктуре? Reg.ru предлагает мощные облачные решения с автомасштабированием и удобным управлением данными. Разворачивайте MQTT-серверы и другие сервисы в пару кликов и автомасштабируйте их под нагрузку без ручных настроек.
Для чего нужен MQTT-сервер
Зачем нужен этот посредник и почему бы устройствам не общаться напрямую? MQTT-брокер решает несколько ключевых задач, особенно важных в мире IoT и распределенных систем:
Разделение отправителей и получателей
Издатель может не знать IP-адреса или местоположение подписчиков, а только адрес брокера. Устройства не обязаны быть онлайн одновременно. Также важно, что операции не блокируют друг друга.
Эффективность и масштабируемость
MQTT ― очень легкий протокол, он серьезно снижает нагрузку на сети и экономит заряд батареи датчиков. Брокер оптимизирован для обработки огромного количества одновременных подключений и большого количества сообщений.
Надежность доставки
Протокол MQTT дает возможность выбрать один из трех уровней обслуживания:
- QoS 0: Не более одного раза (доставка не гарантирована).
- QoS 1: Не менее одного раза (сообщение будет доставлено хотя бы раз, возможны дубликаты).
- QoS 2: Ровно один раз (самый надежный уровень, гарантирует доставку без дубликатов).
Фильтрация и маршрутизация
Брокер отвечает за то, чтобы сообщения доставлялись только тем подписчикам, которые на них подписаны. Это достигается с помощью механизма тем (topics).
Управление состоянием
Брокер может хранить последнее сообщение, отправленное в определенный топик с флагом retained. Когда новый клиент подписывается на эту тему, он немедленно получает это последнее сохраненное сообщение. Весьма полезно для получения последнего известного состояния устройства, например, включен свет или выключен.

Как работает MQTT-сервер
Принцип работы MQTT базируется на модели Издатель-Подписчик, где брокер выступает центральным звеном. Он может подключать клиентов, создавать темы и публиковать данные, которые затем получат подписчики.
Любое устройство или приложение, желающее обмениваться сообщениями, сначала устанавливает TCP/IP соединение с MQTT-брокером. Клиент может быть как издателем, так и подписчиком, или и тем, и другим одновременно.
Вся коммуникация строится вокруг тем. Тема ― это строка в иерархическом формате, похожая на путь к файлу (например, myhome/livingroom/light/status). Темы позволяют структурировать поток сообщений.
Клиент, который хочет отправить данные, например, датчик температуры, становится издателем. Он отправляет сообщение брокеру, указывая тему, к какой теме относится это сообщение, и само сообщение, содержащее данные.
Клиент, который хочет получать данные, например, мобильное приложение для отображения температуры, становится подписчиком. Он отправляет брокеру сообщение, указывая темы, на которые он хочет подписаться.
Брокер принимает все опубликованные сообщения от издателей. Он проверяет, какие клиенты подписаны на тему, в которую пришло сообщение. А затем пересылает копию сообщения каждому подходящему подписчику.

Протокол MQTT
Правила работы сервера ― это и есть протокол MQTT. Представьте его как универсальный язык, который понимают все клиенты и брокер, например, Mosquitto, HiveMQ, VerneMQ, которые помогают эффективно обмениваться сообщениями.
Модель Публикация-Подписка ― это основа протокола. Вместо того, чтобы отправлять сообщение конкретному получателю, отправитель просто публикует сообщение на определенную тему через брокера. Получатели заранее подписываются на интересующие их темы у того же брокера. Брокер сам разбирается, кому доставить сообщение.
Темы ― это как адрес или метка для сообщений. Темы имеют иерархическую структуру, разделенную слешами (/), например: умныйдом/гостиная/датчиктемпературы/значение.
MQTT был разработан с упором на минимальное использование сетевого трафика и ресурсов устройства. Заголовки сообщений очень маленькие, что идеально для сетей с низкой пропускной способностью.

Преимущества и недостатки MQTT-сервера
Как и любая технология, использование MQTT-сервера (брокера) имеет свои сильные и слабые стороны. Давайте их рассмотрим.
Преимущества
MQTT ― это минимальная нагрузка на сеть и устройства. Идеально для IoT, мобильных приложений и любых сценариев с нестабильной связью или ограниченными ресурсами. Кроме того, у этого протокола есть дополнительные преимущества:
- Брокеры спроектированы для обработки тысяч и даже миллионов одновременных подключений и большого объема сообщений.
- Гибкие уровни QoS позволяют выбрать нужный баланс между скоростью и гарантией доставки для разных типов данных.
- Издатели и подписчики не зависят друг от друга напрямую. Это упрощает разработку, тестирование и модификацию системы. Можно заменять или обновлять компоненты независимо.
- Клиенты могут быть одновременно и издателями, и подписчиками, что позволяет легко реализовывать сценарии запроса-ответа или удаленного управления устройствами.
- MQTT-брокеры могут использовать механизмы аутентификации (имя пользователя/пароль, токены) и шифрование (TLS/SSL), что повышает уровень безопасности, критически важный для IoT.
Недостатки
Сам брокер является центральным элементом, и если он выходит из строя, вся коммуникация останавливается. Для критически важных систем требуется настройка кластеризации и высокой доступности брокера, что усложняет всю инфраструктуру. Кроме этих основных, есть и дополнительные недостатки:
- Управление MQTT-брокером требует определенных знаний и усилий. Это сложнее, чем просто соединить два устройства напрямую.
- Нет прямого обмена сообщениями между клиентами. Весь трафик всегда идет через брокера, что может добавлять небольшую задержку.
- MQTT оптимизирован для небольших сообщений ― телеметрии и команд.
MQTT-сервер ― мощный инструмент, особенно для IoT и распределенных систем обмена сообщениями. Его преимущества в эффективности, масштабируемости и гибкости часто перевешивают недостатки. Однако важно понимать, что его использование не такое простое, как кажется на первый взгляд, и понадобится углубиться в мануалы, чтобы правильно его настроить.
А если вам нужно быстро развернуть MQTT-сервер без сложных настроек, можно воспользоваться облачными решениями от Reg.ru
Андрей Лебедев