Протокол MQTT для устройств Интернета вещей

Протокол обмена данными MQTT существует более двадцати лет и широко используется в сетях связи различных типов. Интернет вещей – одна из областей, в которой MQTT стал наиболее востребованным.
Рынок Интернета вещей растет поразительными темпами. Ожидается, что к 2030 году количество подключенных устройств увеличится в четыре раза по сравнению с 2019 годом до 29,5 миллионов единиц.

В нашей статье мы расскажем об MQTT и его использовании в сфере Интернета вещей. Поговорим о сильных и слабых сторонах протокола и сравним его с другими конкурирующими технологиями.

MQTT – это высокопроизводительная технология, которая изначально применялась для создания соединений в сетях спутниковой связи. Упрощенный протокол эффективно использовал канал связи с низкой пропускной способностью и обеспечивал низкое энергопотребление.

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

Так что же такое протокол MQTT? Есть ли у него какие-либо преимущества при работе с устройствами IoT по сравнению с другими протоколами? Каковы эти преимущества? В нашей статье постараемся ответить на эти вопросы.

Что такое MQTT?

В 1999 году разработчики IBM и Eurotech создали первую версию Message Queuing Telemetry Transport, или MQTT. Это открытый протокол на основе TCP/IP, который обеспечивает обмен данными в сети устройств.

В 2014 году этот стандарт клиент-серверной связи перешел под эгиду Oasis. Международная организация по стандартизации выпустила версию MQTT 3.1.1. В 2016 ISO опубликовала ISO/IEC 20922:2016.

Как работает MQTT? Протокол использует шаблон публикации-подписки и включает в себя следующие компоненты:
  • Сервер или брокер, который взаимодействует с клиентами (издателями и подписчиками) через интернет-соединение или локальную сеть;
  • Издатель, который создает сообщения и публикует их в определенной теме;
  • Подписчик, получающий сообщения по теме, на которую он подписан.
Схема взаимодействия в протоколе MQTT.
Процесс взаимодействия в протоколе MQTT.
Издатели и подписчики могут меняться ролями, а иногда клиенты MQTT берут на себя роль и того, и другого. Сервер определяет клиентов по их идентификаторам. Количество издателей и подписчиков ограничено только емкостью сервера.

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

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

MQTT передает сообщения пакетами. Пакет состоит из следующих частей:
  • Фиксированный заголовок – обязательная часть сообщения, включающая служебный заголовок и размер пакета. Минимальный размер – 2 байта, максимальный – 5 байт.
  • Изменяемый заголовок – необязательная часть сообщения, которая предоставляет дополнительную информацию. Ее размер может варьироваться в зависимости от типа сообщения.
  • Поле данных – необязательная часть сообщения с максимальным размером 256 МБ. Она может включать различные команды, такие как включение/выключение, обмен данными и считывание данных с датчика.
Схема демонстрирует компоненты сообщения MQTT.
Структура сообщения в протоколе MQTT.
В зависимости от возможностей процессора, с помощью MQTT можно подключать тысячи или даже миллионы устройств. Помимо масштабируемости, протокол прост в использовании. Он имеет низкие системные требования и высокую совместимость с приложениями, требующими подключения к Интернету.

Вот почему эта сетевая технология так популярна в сфере IoT. Она также находит широкое применение в потребительской электронике, автомобилестроении и промышленности.

MQTT для IoT

Система Интернета вещей – это сеть подключенных устройств, взаимодействующих друг с другом. MQTT хорошо вписывается в эту концепцию. Это упрощенный протокол с быстрым временем отклика. Он обеспечивает эффективное взаимодействие между устройствами, независимо от их количества. Согласно опросу, проведенному HiveMQ и IIoT World в октябре 2022 года, MQTT является вторым по популярности протоколом подключения оборудования среди компаний, преуспевших в создании систем промышленного Интернета вещей.

Еще одной особенностью архитектуры MQTT, которая делает его очень востребованным, являются минимальные издержки. Протокол обеспечивает плавную передачу данных при низкой пропускной способности и снижает нагрузку на процессор и ОЗУ.

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

Протокол MQTT может передавать данные даже при нестабильном соединении. Он предоставляет три варианта качества обслуживания (Quality of Service, или QoS), отвечающего за доставку сообщений. Выбор варианта зависит от критичности данных и стабильности подключения.

  • QoS 0 (установлено по умолчанию): Издатель отправляет сообщение, не запрашивая подтверждения доставки. Используется, когда передаваемая информация не критична, а соединение стабильно.
  • QoS 1: Издатель отправляет сообщение, пока не получит подтверждение доставки. Используется, когда передаваемая информация очень важна, а соединение нестабильно. При QoS 1 подписчик гарантированно получит сообщение.
  • QoS 2: Издатель отправляет сообщение только один раз с гарантированной доставкой. Используется, когда передаваемая информация критична, а соединение нестабильно. QoS 2 гарантирует, что подписчик получит сообщение только один раз без его дубликатов и издержек.

Исследование IIoT World, проведенное в начале 2024 года, показывает, что MQTT– это один из наиболее популярных протоколов для реализации проектов IIoT.

MQTT представляет собой открытый протокол со стандартной документацией. Он имеет набор готовых библиотек для C/C++, Java, JavaScript, Python и других языков программирования.
Благодаря библиотекам MQTT с открытым исходным кодом и публичным брокерам можно ускорить процесс разработки и минимизировать затраты.

Наличие документации в свободном доступе и большое сообщество разработчиков делают реализацию протокола MQTT простой независимо от того, используются ли стандартные или кастомные библиотеки.

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

Защищенность MQTT

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

MQTT входит в число наиболее безопасных протоколов, так как его безопасность основана на криптографических протоколах TLS/SSL и довольно слабой аутентификации. Необходимо ввести дополнительные функции, чтобы сделать протокол надежно защищенным и обезопасить систему Интернета вещей от уязвимостей.

Можно добавлять механизмы безопасности на разных уровнях. Например, можно использовать межсетевой экран для безопасности брокера на сетевом уровне. Или можно использовать алгоритмы шифрования, чтобы сделать MQTT безопасным на уровне приложений. Реализация сквозного шифрования обеспечивает конфиденциальный обмен сообщениями между клиентами.

Также можно использовать токен доступа для идентификации клиентов и предотвращения нежелательного доступа к системе.

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

IoT -приложения, использующие MQTT

MQTT – это гибкая и простая в использовании технология, которая обеспечивает эффективную связь в системе Интернета вещей. Поэтому неудивительно, что множество популярных приложений IoT используют протокол MQTT.

Так, например, IBM Watson IoT Platform выбрала MQTT основным протоколом связи.

Веб-сервисы Amazon используют MQTT в качестве основы для сервисов AWS IoT. AWS IoT Core имеет брокер сообщений на основе MQTT и поддерживает два уровня MQTT QoS.

В одном из наших проектов Интернета вещей мы разработали облачное решение AWS для системы мониторинга солнечной энергии. Мы использовали MQTT для отправки данных солнечной батареи на облачную панель управления.

Microsoft Azure предлагает сервис Azure IoT Hub для создания приложений IoT с использованием протокола MQTT.

McAfee, Red Hat, Cisco и IECC и многие другие компании также выбирают MQTT для своих проектов.

Но является ли MQTT лучшим протоколом Интернета вещей? Другие протоколы связи, такие как HTTP, CoAP, AMQP, имеют схожую функциональность и их также можно использовать в приложениях IoT.

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

Альтернативы MQTT и их сравнительный анализ

Бесперебойная связь – одна из важных составляющих хорошо функционирующей системы Интернета вещей. Добиться этого можно, выбрав подходящий протокол связи. MQTT может стать отличным выбором для продукта IoT, но есть и альтернативы.

HTTP в сравнении с MQTT

Протокол передачи гипертекста (HTTP) создан в 1989 году, а в 1997 году определен IETF и W3C как открытый стандарт IETF. Технология использует TCP/IP в качестве транспортных протоколов, а последняя версия HTTP/3 основана на UDP.

HTTP – это веб-протокол, и он часто используется вместе с HTML для взаимодействия с веб-браузерами.

HTTP представляет собой текстовый протокол, который работает по модели запрос/ответ и использует URI или URL в качестве топиков сообщений. Клиент отправляет запрос на сервер, а сервер отправляет ответ. Размер сообщения ограничен только возможностями сервера.

Издержки
В отличие от MQTT, HTTP тяжеловесен, так как является текстовым протоколом. Это подразумевает передачу сообщений большого размера и высокие издержки.

Потребление памяти/энергии
HTTP требует больше энергии и памяти, чем MQTT и любой другой упрощенный протокол.

Лицензирование
HTTP – открытый стандарт.

Документация
В свободном доступе.

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

Надежность
HTTP не имеет опций QoS или других служб, поэтому для гарантии доставки сообщений он полагается только на TCP.

Защищенность
Первоначально HTTP был разработан без защитных механизмов. Новая версия – HTTPS – это зашифрованный HTTP, который имеет тот же уровень безопасности, что и MQTT. Он использует TLS/SSL для аутентификации клиентов и шифрования передаваемых данных.
MQTT лучше подходит для решений Интернета вещей, чем HTTP, поскольку он совместим с большим количеством сценариев. Протокол HTTP можно использовать при подключении устройств с установленным HTTP-клиентом к провайдеру с опцией HTTP. В этом случае можно передавать небольшие объемы данных без отправки команд управления на устройство.

CoAP в сравнении с MQTT

Протокол передачи гипертекста (HTTP) создан в 1989 году, а в 1997 году определен IETF и W3C как открытый стандарт IETF. Технология использует TCP/IP в качестве транспортных протоколов, а последняя версия HTTP/3 основана на UDP.

HTTP – это веб-протокол, и он часто используется вместе с HTML для взаимодействия с веб-браузерами.

HTTP представляет собой текстовый протокол, который работает по модели запрос/ответ и использует URI или URL в качестве топиков сообщений. Клиент отправляет запрос на сервер, а сервер отправляет ответ. Размер сообщения ограничен только возможностями сервера.

Издержки
В отличие от MQTT, HTTP тяжеловесен, так как является текстовым протоколом. Это подразумевает передачу сообщений большого размера и высокие издержки.

Потребление памяти/энергии
HTTP требует больше энергии и памяти, чем MQTT и любой другой упрощенный протокол.

Лицензирование
HTTP – открытый стандарт.

Документация
В свободном доступе.

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

Надежность
HTTP не имеет опций QoS или других служб, поэтому для гарантии доставки сообщений он полагается только на TCP.

Защищенность
Первоначально HTTP был разработан без защитных механизмов. Новая версия – HTTPS – это зашифрованный HTTP, который имеет тот же уровень безопасности, что и MQTT. Он использует TLS/SSL для аутентификации клиентов и шифрования передаваемых данных.
MQTT лучше подходит для решений Интернета вещей, чем HTTP, поскольку он совместим с большим количеством сценариев. Протокол HTTP можно использовать при подключении устройств с установленным HTTP-клиентом к провайдеру с опцией HTTP. В этом случае можно передавать небольшие объемы данных без отправки команд управления на устройство.

AMQP в сравнении с MQTT

Advanced Message Queuing Protocol (AMQP) был разработан компанией JPMorgan Chase & Co. в 2003 году как открытый протокол обмена сообщениями для банковских систем. AMQP – это бинарный протокол на основе TCP, который может использовать либо модель публикации/подписки, либо шаблон запроса/ответа.

Компонент обмена протокола получает сообщение от издателя и направляет его в очередь. Очередь хранит сообщение до тех пор, пока клиент не сможет его обработать.

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

Потребление памяти/энергии
AMQP потребляет не слишком много ресурсов оперативной памяти и процессора, но все-таки больше, чем MQTT, из-за более сложной системы обмена сообщениями.

Лицензирование
AMQP – открытый стандарт.

Документация
В свободном доступе.

Масштабируемость
AMQP масштабируется и позволяет использовать несколько подключений.

Надежность
AMQP, как и MQTT, имеет средства и возможности для обеспечения надежного обмена сообщениями. Оба эти протокола работают на TCP и применяют QoS для обеспечения стабильной и гарантированной передачи данных. AMQP обеспечивает два уровня QoS, а MQTT – три. Кроме того, MQTT имеет так называемую «последнюю волю» – опцию, которая гарантирует доставку сообщения клиенту в случае разъединения.

Защищенность
AMQP имеет преимущество перед MQTT с точки зрения безопасности. Он использует различные расширения TLS, включая SNI и SASL для аутентификации клиента и шифрования данных.

MQTT – лучший выбор для IoT, поскольку он был разработан для Интернета вещей и является одновременно простым и эффективным. AMQP менее подходит для Интернета вещей из-за его сложности и более высоких издержек.

Сравнительный анализ пропускной способности и задержки MQTT, HTTP, CoAP и AMQP

Для того чтобы выявить, отличается ли производительность MQTT от аналогичных протоколов, мы провели собственный сравнительный анализ. Мы создали тестовую среду для измерения задержки и пропускной способности – параметров, которые характеризуют производительность протокола.

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

Аппаратное обеспечение издателя работало на одноядерном процессоре с рабочей частотой 700 МГц и 512 МБ ОЗУ. Аппаратное обеспечение сервера использовало одноядерный процессор с 2 ГБ ОЗУ. Размер полезной нагрузки каждого сообщения, которое мы отправляли с использованием протоколов, составлял 64 КБ.

В нашем сравнительном анализе мы рассматривали MQTT с различными уровнями QoS.
В таблице сравниваются показатели пропускной способности и задержки различных протоколов связи.
Сравнительная таблица пропускной способности и задержки.
По результатам нашего сравнительного анализа, CoAP продемонстрировал отличные показатели пропускной способности. Он смог отправить вдвое больше сообщений, чем MQTT с QoS 0. HTTP и MQTT с QoS 1 и QoS 2 были примерно на одном уровне с самой низкой пропускной способностью.

Эти же протоколы (HTTP и MQTT с QoS 1 и 2) – аутсайдеры и по задержке времени ответа сервера. MQTT с QoS 0, CoAP и AMQP показали нулевую задержку.

Альтернативы MQTT и их сравнительный анализ

Существуют десятки протоколов связи, разработанных для различных нужд и целей. Многие из них могут быть использованы для проектов Интернета вещей. Кратко перечислим заслуживающие внимания:
  • STOMP (Simple/Streaming Text Oriented Message Protocol), текстовый протокол на основе TCP, очень похожий на HTTP. STOMP использует брокера, который отправляет сообщения клиентам. Протокол поддерживает широкий спектр языков и платформ. Прост и удобен в реализации.
  • DDS (Data Distribution Service), протокол публикации/подписки, который может использоваться в крупномасштабных, высокопроизводительных и работающих в режиме реального времени системах. DDS контролирует доставку сообщений с помощью QoS. Протокол имеет библиотеки для самых популярных языков программирования. Доступен как в версии с открытым исходным кодом, так и в коммерческой.
  • XMPP (Extensible Messaging and Presence Protocol), открытый клиент-серверный стандарт на основе XML. XMPP использует механизм публикации/подписки и работает поверх TCP и HTTP. Имеет большой выбор бесплатных библиотек и серверов.
  • SSE (Server-Sent Events), часть HTML5. SSE использует HTTP в качестве транспортного протокола и обеспечивает одностороннюю связь от сервера к клиенту. Клиент отправляет запрос, а сервер отправляет данные после открытия соединения.
  • LwM2M, или Lightweight M2M, открытый протокол для управления устройствами Интернета вещей. LwM2M взаимодействует с CoAP, поскольку он легкий и энергоэффективный, и часто используется для встраиваемых устройств. Для LwM2M существует множество доступных спецификаций, SDK и реализаций.

Перспективы MQTT

Востребованность MQTT связана с ростом рынка Интернета вещей и устойчивой тенденцией к простоте и ресурсоэффективности технологий.

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

Самая свежая версия протокола MQTT 5.0 выпущена консорциумом OASIS в марте 2019 года. Новые функции, добавленные в v5.0, – это истечение срока действия сообщения, общая подписка и псевдоним топика. Новинки способствовали оптимизации производительности MQTT и сделали протокол еще более привлекательным для разработчиков Интернета вещей.

Среди инноваций можно выделить использование MQTT поверх нового транспортного протокола QUIC, который обеспечивает более быструю установку соединения и скорость передачи данных.

Еще одним трендом MQTT обещает стать брокер без сервера из-за его быстрого развертывания и гибкости в масштабировании и использовании.

Инновационная структура геораспределения MQTT также заслуживает внимания. Геораспределение позволяет брокерам MQTT, где бы они ни находились, работать как единая система.

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

Заключение

Протокол MQTT – серьезный конкурент в области передачи данных и сетевой коммуникации, хотя он не является номером один во всех отношениях. Например, CoAP превосходит MQTT по пропускной способности и низким издержкам, а AMQP лучше защищен.

Однако есть несколько ключевых преимуществ, которые MQTT предоставляет своим пользователям:
  • надежность;
  • быстрое время отклика;
  • возможность поддержки неограниченного количества устройств;
  • публикация/подписка сообщений, которая идеально подходит для коммуникации «многие ко многим»;
  • исчерпывающая документация в свободном доступе и сильное сообщество разработчиков, которые упрощают реализацию протокола MQTT.

Все это делает MQTT отличным выбором для устройств Интернета вещей. При разработке решений IoT мы в КЕДР Solutions используем MQTT как часть стека протоколов. Это один из наиболее предпочтительных вариантов для беспроводных устройств малой мощности с нестабильным подключением.
Другие статьи