Открыть сервис

Брокер MQTT

MQTT-брокер — это серверное программное обеспечение, реализующее протокол MQTT (Message Queuing Telemetry Transport) и выступающее в роли центрального узла для обмена сообщениями между клиентами (издателями и подписчиками). Брокер принимает сообщения от устройств-издателей, фильтрует их по темам (topics) и рассылает всем подписчикам, которые оформили подписку на соответствующие темы. Является ключевым компонентом архитектуры MQTT, обеспечивая асинхронную, слабосвязанную и масштабируемую коммуникацию в системах Интернета вещей (IoT), промышленной автоматизации и мобильных приложениях.

История

Протокол MQTT был разработан в конце 1990-х годов компанией IBM (совместно с Cirrus Link) для мониторинга нефтепроводов. Первая версия спецификации (MQTT v3.1) была опубликована в 2010 году. В 2014 году протокол был стандартизирован консорциумом OASIS. С ростом популярности IoT в 2010-х годах появилось множество реализаций брокеров, как коммерческих, так и с открытым исходным кодом. Ключевым событием стало появление в 2015 году протокола MQTT 5.0, который значительно расширил возможности брокеров (например, ввёл метаданные, улучшенное управление сессиями и более гибкие механизмы авторизации).

Архитектура и принцип работы

MQTT-брокер работает по модели «издатель-подписчик» (publish-subscribe). В отличие от клиент-серверных протоколов (например, HTTP), где клиент напрямую запрашивает данные у сервера, в MQTT клиенты общаются через брокера, не зная друг о друге.

Основные компоненты

  • Издатель (Publisher): Отправляет сообщения брокеру с указанием темы (topic). Издатель не знает, кто и когда будет читать это сообщение.
  • Подписчик (Subscriber): Регистрирует у брокера интерес к определённым темам (подписка). Брокер отправляет подписчику все сообщения, опубликованные по этим темам.
  • Брокер (Broker): Центральный сервер, который:
  • Принимает соединения от клиентов.
  • Принимает сообщения от издателей.
  • Фильтрует сообщения по темам.
  • Распределяет сообщения подписчикам.
  • Управляет сессиями и качеством обслуживания (QoS).

Механизм тем (Topics)

Тема — это иерархическая строка (например, home/kitchen/temperature), которая служит адресом сообщения. Брокер использует темы для маршрутизации. Подписчики могут использовать подстановочные знаки (wildcards):

  • + — заменяет один уровень иерархии (например, home/+/temperature подпишет на температуру в любой комнате).
  • # — заменяет все последующие уровни (например, home/# подпишет на все сообщения, начинающиеся с home/).

Качество обслуживания (QoS)

Протокол MQTT определяет три уровня QoS, которые брокер обязан поддерживать:

  • QoS 0 (At most once): Сообщение доставляется не более одного раза, без подтверждения. Надёжность минимальна, скорость максимальна.
  • QoS 1 (At least once): Сообщение гарантированно доставляется хотя бы один раз. Возможны дубликаты.
  • QoS 2 (Exactly once): Сообщение доставляется ровно один раз, без дубликатов. Самый надёжный, но и самый медленный уровень.

Брокер управляет очередями и подтверждениями для каждого уровня QoS.

Классификация MQTT-брокеров

Брокеры можно классифицировать по нескольким признакам.

По лицензии и стоимости

  • С открытым исходным кодом (Open Source): Бесплатны, часто имеют активное сообщество. Примеры: Mosquitto, EMQX (версия Community), VerneMQ, NanoMQ.
  • Коммерческие (Enterprise): Предлагают расширенные функции (кластеризация, мониторинг, безопасность, интеграция с облаками), техническую поддержку и SLA. Примеры: HiveMQ, EMQX Enterprise, IBM Watson IoT Platform (исторически), AWS IoT Core, Azure IoT Hub.

По архитектуре развёртывания

  • Локальные (On-premise): Устанавливаются на собственные серверы организации. Обеспечивают полный контроль над данными и сетью. Пример: Mosquitto на Raspberry Pi.
  • Облачные (Cloud): Предоставляются как услуга (SaaS) от облачных провайдеров. Не требуют управления инфраструктурой, легко масштабируются. Пример: AWS IoT Core, HiveMQ Cloud.
  • Гибридные: Комбинация локального и облачного брокеров, часто через мосты (bridging).

По масштабу и производительности

  • Лёгкие (Embedded): Оптимизированы для работы на устройствах с ограниченными ресурсами (ESP32, Raspberry Pi). Пример: Mosquitto, NanoMQ.
  • Корпоративные (Enterprise): Рассчитаны на миллионы одновременных подключений и высокую пропускную способность. Используют кластеризацию и распределённые архитектуры. Пример: EMQX, HiveMQ, VerneMQ.

Основные функции и возможности

Современные MQTT-брокеры выходят за рамки простой маршрутизации сообщений.

Безопасность

  • Аутентификация: Проверка имени пользователя и пароля (на основе файлов, LDAP, базы данных), использование сертификатов X.509 (TLS/SSL), токенов (JWT).
  • Авторизация: Управление доступом на уровне тем (Access Control Lists, ACL). Определение, какие клиенты могут публиковать или подписываться на определённые темы.
  • Шифрование: Поддержка TLS/SSL для шифрования трафика между клиентом и брокером.

Управление сессиями и постоянство

  • Clean Session / Clean Start: Определяет, будет ли брокер хранить состояние сессии (подписки, неотправленные сообщения) после отключения клиента.
  • Persistent Session: Брокер сохраняет все подписки и сообщения QoS 1/2 для клиента, который временно отключился. При повторном подключении клиент получает все накопленные сообщения.
  • Last Will and Testament (LWT): Сообщение, которое брокер публикует от имени клиента, если тот неожиданно отключается (например, из-за потери питания). Используется для оповещения других устройств о сбое.

Кластеризация и высокая доступность (HA)

  • Кластеризация: Объединение нескольких экземпляров брокера в единый логический узел. Это обеспечивает горизонтальное масштабирование (увеличение пропускной способности) и отказоустойчивость (выход из строя одного узла не останавливает систему).
  • Мосты (Bridging): Соединение двух или более независимых брокеров для обмена сообщениями между ними. Используется для объединения локальных и облачных систем.

Расширенные возможности

  • Правила и обработка сообщений (Rule Engine): Возможность модифицировать, фильтровать или перенаправлять сообщения на основе их содержимого (например, преобразование JSON в SQL-запрос для записи в базу данных).
  • Интеграция с внешними системами: Встроенные коннекторы к базам данных (InfluxDB, PostgreSQL, MongoDB), системам очередей (Kafka, RabbitMQ), веб-сервисам (HTTP API) и облачным платформам.
  • Веб-сокеты (WebSocket): Поддержка MQTT через WebSocket позволяет веб-браузерам и другим клиентам, работающим через HTTP, подключаться к брокеру.
  • Мониторинг и статистика: Предоставление метрик (количество подключений, сообщений в секунду, использование памяти) через API, Prometheus, Grafana.

Применение

MQTT-брокеры являются основой для множества приложений, где требуется лёгкая, надёжная и масштабируемая передача данных.

  • Интернет вещей (IoT): Сбор данных с датчиков (температура, влажность, давление) и управление исполнительными механизмами (реле, моторы) в системах «умный дом», промышленный IoT (IIoT), сельское хозяйство.
  • Промышленная автоматизация (SCADA): Обмен данными между программируемыми логическими контроллерами (ПЛК), человеко-машинными интерфейсами (HMI) и системами управления производством (MES).
  • Автомобильная телематика: Сбор данных с автомобилей (скорость, расход топлива, местоположение) и передача команд (блокировка дверей, вызов экстренных служб).
  • Мобильные приложения: Обмен сообщениями в реальном времени (чат, push-уведомления), отслеживание местоположения.
  • Логистика и управление цепочками поставок: Мониторинг состояния грузов (температура, вибрация) и местоположения транспортных средств.

Примеры популярных MQTT-брокеров

НазваниеЛицензияЯзыкКлючевые особенности
Eclipse MosquittoOpen Source (EPL/EDL)CЛёгкий, простой в настройке, подходит для встраиваемых систем и небольших проектов.
EMQXOpen Source (Apache 2.0) + EnterpriseErlangВысокая масштабируемость (миллионы подключений), мощный движок правил, кластеризация.
HiveMQКоммерческая (Community Edition)JavaНадёжность, корпоративные функции (расширения, мониторинг), поддержка MQTT 5.0.
VerneMQOpen Source (Apache 2.0)ErlangВысокая доступность, распределённая архитектура, ориентирован на кластеризацию.
NanoMQOpen Source (MIT)CУльтралёгкий, низкая задержка, оптимизирован для edge-вычислений и IoT-шлюзов.

Критика и ограничения

Несмотря на широкое распространение, MQTT-брокеры имеют ряд недостатков.

  • Централизация: Единая точка отказа (SPOF). Если брокер выходит из строя, вся система коммуникации останавливается. Решается кластеризацией, но это усложняет инфраструктуру.
  • Сложность управления темами: При большом количестве устройств иерархия тем может стать запутанной и трудной для администрирования.
  • Задержки при высокой нагрузке: При очень большом количестве сообщений (миллионы в секунду) брокер может стать узким местом, требуя мощного аппаратного обеспечения.
  • Отсутствие встроенного хранения данных: Брокер не предназначен для долговременного хранения истории сообщений. Для этого требуются внешние системы (базы данных, системы очередей).
  • Безопасность по умолчанию: Базовая конфигурация многих брокеров (особенно Mosquitto) не включает шифрование и аутентификацию, что требует обязательной настройки для производственного использования.

Источники

  1. Спецификация MQTT v3.1.1 и v5.0, OASIS.
  2. Документация Eclipse Mosquitto.
  3. Документация EMQX.
  4. Книга: "MQTT Essentials: A Lightweight IoT Protocol", Gaston C. Hillar.
  5. Статья: "MQTT and the Internet of Things", IBM DeveloperWorks.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →