MQTT — легковесный протокол обмена сообщениями для устройств с ограниченными ресурсами. Изначально создан для спутниковых каналов с высокой задержкой, позднее получил широкое распространение в IoT, промышленной автоматизации и мобильных платформах (см. MQTT протокол: устройство, описание, принцип работы).

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

MQTT

Модель Pub/Sub

Устройства публикуют данные в тематические каналы — topics. Подписчики объявляют интерес к каналам и получают новые сообщения без прямого соединения с источником. Иерархия тем поддерживает символы-подстановки для групповой подписки.

Каждое сообщение включает код качества обслуживания QoS. Выбор уровня зависит от требований к достоверности и задержке.

Качество сервиса

QoS 0 передаёт данные без подтверждения, дубликаты отсутствуют, пропуск возможен. QoS 1 гарантирует доставку минимум один раз, брокер подтверждает приём, принимающая сторона устраняет дубликаты. Os 2 обеспечивает получение точно один раз через двухфазный handshake, повышая трафик, но исключая дубли и потерю.

Флаг retain сохраняет последнее сообщение в канале, так что новый подписчик сразу получает актуальное состояние. Механизм Last Will and Testament уведомляет подписчиков об аварийном разрыве соединения клиента.

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

TLS шифрует транспорт, сертификаты и токены применяются для аутентификации. Дополнительно конфигурируются списки разрешённых тем, лимиты подключений, защита от DoS.

Практика внедрения

Популярные брокеры: Eclipse Mosquito, EMQX, Hivemc, VerneMQ, RabbitMQ с плагином. Клиенты доступны для широкого спектра языков, включая C, C++, Java, Python, Rust, Go. Высоконагруженные инсталляции достигают миллионов одновременных соединений при грамотной горизонтальной компоновке.

MQTT применяют для телеметрии датчиков, управления умными объектами, транспортной логистики, удалённой энергетики, чатов в мобильных приложениях. Для облачной интеграции выпускаются шлюзы и bridge-модули, которые пересылают трафик между кластерами или переводят протокол в HTTP/AMQP.

Среди ограничений отмечаются базовая авторизация без сложных политик, отсутствие потоковой мультимедиа-оптимизации, размер сообщения до 256 МБ и зависимость от центрального брокера. Для отказоустойчивости разворачивают кластеры с репликацией, балансировщиками и газораспределением.

Эволюция семейства охватывает MQTT v5 с расширенными свойствами пакета, потоками причинно-следственной связности, улучшенным маршрутизатором ошибок. Для беспроводных сетей датчиков разрабатывается MQTT-SN, а внутри корпоративных шин вводится разведённая модель bridge-forwarding.

MQTT возник в 1999 году как легковесный транспортный протокол для телеметрии с ограниченными каналами связи. Главная цель — сократить накладные расходы на передаваемые данные и сохранить надёжность доставки при нестабильных сетях.

Работа строится вокруг трёх сущностей: издатель формирует сообщения, брокер принимает трафик и маршрутизирует его, подписчик получает интересующие топики. Механизм pub/sub устраняет прямое соединение между конечными узлами.

Структура протокола

Сообщение состоит из фиксированной части с флагами, переменной области со служебной информацией и полезной нагрузки. Ключевой элемент — строковый идентификатор темы, брокер сравнивает её с фильтрами подписчиков. Флаги QoS указывают уровень подтверждений, retain закрепляет последнее состояние, dup сообщает о повторной передаче.

MQTT использует TCP на портах 1883 либо 8883 при TLS. Заголовок протокола занимает минимум 2 байта, поэтому подходит для каналов с ограниченным бюджетом трафика. Документ спецификации описывает контроль длительности соединения через keep alive и ping-запросы.

Механизм доставки

Уровень 0 передаёт пакет без подтверждения. Уровень 1 просит брокер квитировать приём (PUBACK). Уровень 2 гарантирует единожды-точно: обмен пакетами PUBLIC, PUBLIC, PUB REL, PUB COMP исключает дублирование. Выбор уровня зависит от критичности данных и стоимости трафика.

Сеанс стартует с пакета CONNECT, где клиент объявляет идентификатор, параметры keep alive и сообщение завещания. При флаге clean session — новое состояние, иначе брокер удерживает непрочитанную очередь и отправляет её при возвращении клиента.

Безопасность и масштабирование

Аутентификация реализуется через пару пользователь-пароль либо X.509-сертификаты. Шифрование достигается TLS. Контроль доступа детализируется списками тем. Для высокой нагрузки брокеры выстраиваются в кластеры, организуют балансировку либо мосты между экземплярами.

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

Грамотная иерархия топиков задаёт масштабируемость: region/site/device/metric. Подстановочные символы «+» и «#» упрощают групповые подписки. Retain сохраняет актуальные показатели для новых клиентов. Мониторинг задержек, глубины очередей и потерь пакетов поддерживает стабильность.