Что такое MQTT?
MQTT – это основанный на стандартах протокол, или набор правил, обмена сообщениями, используемый для взаимодействия между компьютерами. Интеллектуальные датчики, носимые устройства и другие устройства Интернета вещей (IoT) обычно передают и получают данные по сетям с ограниченными ресурсами и пропускной способностью. Эти устройства IoT используют MQTT для передачи данных, поскольку он прост в реализации и может эффективно передавать данные IoT. MQTT поддерживает передачу сообщений от устройств в облако и в обратном направлении.
Почему протокол MQTT так важен?
Протокол MQTT стал стандартом для передачи данных IoT благодаря перечисленным ниже преимуществам.
Легкость и эффективность
Реализация MQTT на устройстве IoT требует минимальных ресурсов и поэтому может использоваться на маленьких микроконтроллерах. Например, минимальное управляющее сообщение MQTT может состоять всего лишь из двух байтов данных. Заголовки сообщений MQTT также малы, поэтому вы можете оптимизировать пропускную способность сети.
Масштабируемость
Для реализации MQTT требуется минимальное количество кода, для работы которого требуется совсем немного энергии. Также в протокол встроены функции для обеспечения взаимодействия с большим количеством устройств IoT. Поэтому вы можете реализовать протокол MQTT для подключения миллионов таких устройств.
Надежность
Многие устройства IoT подключаются по ненадежным сотовым сетям с низкой пропускной способностью и высокой задержкой. В MQTT встроены функции, сокращающие время, которое требуется устройству IoT для возобновления подключения к облаку. Также он определяет три разных уровня качества обслуживания, чтобы обеспечить надежность примеров использования IoT: максимум один раз (0), минимум один раз (1) и ровно один раз (2).
Безопасность
MQTT упрощает для разработчиков задачу шифрования сообщений и аутентификации устройств и пользователей с помощью современных протоколов аутентификации, таких как OAuth, TLS1.3, управляемых клиентами сертификатов и других протоколов.
Хорошая поддержка
Некоторые языки, например Python, обеспечивают хорошую поддержку протокола MQTT. Поэтому разработчики могут быстро реализовать его с минимальным количеством кода в приложении любого типа.
Какова история протокола MQTT?
Протокол MQTT изобретен в 1999 году для использования в нефтегазовой промышленности. Инженерам понадобился протокол с минимальной пропускной способностью и минимальной разрядкой аккумулятора для отслеживания нефтепровода со спутника. Вначале протокол назывался телеметрическим транспортом очереди сообщений по названию продукта IBM MQ Series, который поддерживал начальную фазу. В 2010 г. IBM выпустила MQTT 3.1 как бесплатный и открытый протокол, который может реализовать любой клиент. В 2013 г. он был отправлен в подразделение по спецификациям Организации по усовершенствованию стандартов структурной информации (OASIS) на доработку. В 2019 г. OASIS выпустила улучшенную версию MQTT 5. MQTT больше не является аббревиатурой, но считается официальным названием протокола.
Каков принцип работы MQTT?
Протокол MQTT работает по модели «издатель-подписчик». При традиционном взаимодействии по сети клиенты и серверы связываются между собой напрямую. Клиенты запрашивают у сервера ресурсы или данные, сервер обрабатывает запрос и возвращает ответ. Но MQTT использует шаблон «издатель-подписчик», чтобы отделить отправителя сообщения (издателя) от получателя (подписчика). Взаимодействием между издателями и подписчиками управляет третий компонент – брокер сообщений. Задача брокера – отфильтровать все входящие сообщения от издателей и отправить их соответствующим подписчикам. Брокер отделяет издателей от подписчиков следующим образом.
Разделение в пространстве
Издатель и подписчик не знают о местоположении друг друга в сети и не обмениваются такой информацией, как IP-адрес и номер порта.
Разделение во времени
Издатель и подписчик не действуют и не подключаются к сети одновременно.
Раздельная синхронизация
Издатели и подписчики могут отправлять и получать сообщения, не прерывая работу друг друга. Например, от подписчика не требуется ожидать, когда издатель отправит сообщение.
Каковы компоненты MQTT?
MQTT реализует модель «издатель-подписчик», определяя клиентов и брокеров, как описано ниже.
Клиент MQTT
Клиентом MQTT является любое устройство, от сервера до микроконтроллера, с библиотекой MQTT. Если клиент отправляет сообщения, то он работает как издатель, а если получает их, то – как подписчик. В принципе, любое устройство, которое использует для сетевого взаимодействия протокол MQTT, можно назвать клиентским устройством MQTT.
Брокер MQTT
Брокер MQTT – это серверная система, которая координирует сообщения между разными клиентами. Брокер отвечает, в частности, за получение и фильтрацию сообщений, идентификацию клиентов, подписанных на каждое сообщение, и отправку им сообщений. Также он отвечает за выполнение некоторых других задач, например:
- авторизацию и аутентификацию клиентов MQTT;
- передачу сообщений другим системам для дальнейшего анализа;
- обработку пропущенных сообщений и клиентских сеансов.
Подключение по протоколу MQTT
Клиенты и брокеры начинают взаимодействие с помощью подключения MQTT. Клиент инициирует подключение, отправляя сообщение CONNECT брокеру MQTT. Брокер подтверждает, что подключение установлено, отвечая сообщением CONNACK. Для взаимодействия между клиентом и брокером MQTT нужен стек TCP/IP. Клиенты связываются друг с другом не напрямую, а только через брокера.
Как работает MQTT?
Ниже описан принцип работы MQTT.
- Клиент MQTT устанавливает соединение с брокером MQTT.
- После подключения клиент может публиковать сообщения и (или) подписываться на определенные сообщения.
- Когда брокер MQTT получает сообщение, он пересылает его заинтересованным подписчикам.
Давайте углубимся в детали для лучшего понимания.
Тема MQTT
Термин «тема» относится к словам, используемым MQTT для фильтрации сообщений для клиентов MQTT. Темы представлены в виде иерархии, как файлы и папки. Рассмотрим, например, систему умного дома в многоэтажном доме с различными интеллектуальными устройствами на каждом этаже. В этом случае брокер MQTT может упорядочить темы в таком виде:
ourhome/groundfloor/livingroom/light
ourhome/firstfloor/kitchen/temperature
Публикация сообщения MQTT
Клиенты MQTT публикуют сообщения, содержащие тему и данные в байтовом формате. Клиент определяет формат файловых данных: текстовые, двоичные, XML или JSON. Например, лампа в умном доме может опубликовать сообщение вкл. в теме livingroom/light.
Подписка на сообщения MQTT
Клиент MQTT отправляет сообщение SUBSCRIBE брокеру MQTT, чтобы получать уведомления на интересующую тему. Это сообщение содержит уникальный идентификатор и список подписчиков. Например, приложение умного дома в телефоне хочет отобразить количество ламп в жилье. Оно подпишется на тему light и будет увеличивать счетчик при каждом сообщении вкл.
Что такое MQTT по протоколу WSS?
MQTT по протоколу WebSocket (WSS) – это реализация MQTT для получения данных непосредственно в интернет-браузере. Протокол MQTT определяет клиент JavaScript для поддержки WSS в браузерах. В таком случае протокол действует, как обычно, но добавляет дополнительные заголовки в сообщения MQTT для поддержки протокола WSS. Это можно представить как сообщение MQTT в конверте WSS.
Безопасен ли MQTT?
Взаимодействие с применением MQTT использует протокол SSL для защиты конфиденциальных данных, которые передаются устройствами IoT. Вы можете реализовать идентификацию, аутентификацию и авторизацию между клиентами и брокерами с использованием сертификатов SSL и (или) паролей. Брокер MQTT обычно аутентифицирует клиентов с использованием паролей, а также уникальных идентификаторов, назначаемых каждому клиенту. В большинстве реализаций клиент аутентифицирует сервер с использованием сертификатов или поиска DNS. Кроме того, с использованием MQTT можно реализовать протоколы шифрования.
Поддерживает ли MQTT REST?
MQTT не является RESTful. Передача репрезентативного состояния (REST) – это архитектурный подход к сетевому взаимодействию с использованием шаблона связи «запрос-ответ» между отправителями и получателями. MQTT, напротив, использует модель взаимодействия «издатель-подписчик» на уровне приложения и требует устойчивого подключения TCP для передачи push-уведомлений. Однако в MQTT версии 5 добавлен новый метод «запрос-ответ», который действует подобно REST и позволяет издателю прикрепить специальную тему ответа, которую подписчик обрабатывает, а затем генерирует соответствующие ответ.
Как AWS может поддержать внедрение MQTT?
AWS IoT Core – это полностью управляемый сервис, с помощью которого можно подключать миллиарды устройств IoT и направлять триллионы сообщений IoT в сервисы AWS. Получите описанные далее возможности.
- Легко и надежно подключайте и масштабируйте свои парки устройств, а также управляйте ими, не заботясь о предоставлении или контроле серверов.
- Выбирайте предпочитаемый протокол связи, в том числе MQTT, HTTPS, MQTT через WSS и LoRaWAN.
- Обеспечьте безопасность подключений устройств и данных благодаря взаимной аутентификации и сквозному шифрованию.
- Фильтруйте данные устройств, преобразовывайте их на лету и выполняйте с ними действия на основе определенных правил работы.
Начните работу с MQTT на AWS, создав бесплатный аккаунт уже сегодня.
MQTT в AWS: дальнейшие шаги
Получите мгновенный доступ к уровню бесплатного пользования AWS.