Въведение в протокола MQTT

Преглед

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

MQTT е създаден от Andy Stanford-Clark от IBM и Arlen Nipper (тогава от Arcom Systems, по-късно CTO от Eurotech). Според Nipper MQTT трябва да има следните характеристики:

  • Прост и лесен за изпълнение
  • Поддръжка на QoS (сложна мрежова среда на устройството)
  • Лек и спестяващ честотна лента (тъй като тогава честотната лента беше скъпа)
  • Данните са без значение (форматът на данните за полезния товар няма значение)
  • Информираност за непрекъсната сесия (винаги знае дали устройството е онлайн)

Според Арлен Нипър в IBM Podcast, MQTT първоначално е наречен MQ TT. Обърнете внимание на интервала между MQ и TT. Пълното име е MQ Telemetry Transport. Това е протокол за предаване на данни в реално време, който той разработи, докато работи върху SCADA система за тръбопровод за суров нефт за Conoco Phillips в началото на 90-те години. Целта му беше да позволи на сензорите да комуникират с MQ Integrator на IBM чрез VSAT, който има ограничена честотна лента. Името MQ TT е избрано в съответствие с индустриалната практика, тъй като Nipper е професионалист в областта на дистанционното наблюдение и събирането на данни и мониторинга.

Сравнение между MQTT и други протоколи

MQTT срещу HTTP

  • С минимален размер на съобщението от 2 байта, MQTT заема по-малко мрежови разходи от HTTP.
  • И MQTT, и HTTP могат да използват TCP връзки и да постигнат стабилни и надеждни мрежови връзки.
  • MQTT се основава на модел публикуване-абониране, а HTTP се основава на заявка-отговор, така че MQTT поддържа дуплексна комуникация.
  • MQTT може да изпраща съобщения в реално време, но HTTP се нуждае от запитване за актуализации на данни.
  • MQTT е със състояние, но HTTP е без състояние.
  • MQTT може да възстанови връзките от необичайни прекъсвания, които HTTP не може да постигне.

MQTT срещу XMPP

Протоколът MQTT е прост и лек като дизайн и гъвкав при маршрутизиране. Той напълно ще замени XMPP протокола от ерата на компютъра в областта на мобилния интернет и IoT съобщенията.

  • MQTT съобщенията са малки и лесни за кодиране и декодиране, докато XMPP е базиран на тежък XML и съобщенията са големи и тромави за взаимодействие.
  • MQTT се основава на модел публикуване-абониране, който е по-гъвкав от базираното на JID на XMPP маршрутизиране на съобщения от точка до точка.
  • MQTT поддържа различни типове съобщения като JSON, двоични и т.н. XMPP използва XML за пренасяне на съобщения, а двоичните трябва да бъдат кодирани в Base64 и обработени с други методи.
  • MQTT гарантира надеждно предаване на съобщения чрез QoS; протоколът XMPP не дефинира подобен механизъм.

Защо MQTT е най-добрият протокол за IoT?

Според последния изследователски доклад „Status of the IoT Spring 2022“ от IoT Analytics се очаква пазарът на IoT да нарасне с 18% и да достигне 14,4 милиарда активни връзки до 2022 г.

При такова широкомащабно търсене на IoT масовият достъп до устройства и управлението на устройства поставят огромни предизвикателства пред честотната лента на мрежата, комуникационните протоколи и архитектурата на платформените услуги. За IoT протоколите няколко ключови проблема в комуникацията на IoT устройства трябва да бъдат адресирани по целенасочен начин: сложна и ненадеждна мрежова среда, малък капацитет на паметта и флаш паметта и ограничен капацитет на процесора.

MQTT протоколът е създаден за справяне с тези проблеми. След много години на разработка, той се превърна в предпочитания протокол за IoT индустрията със своите предимства на лекота, ефективност, надеждни съобщения, масова поддръжка на връзка, сигурна двупосочна комуникация и т.н.

Лек и ефективен

MQTT минимизира допълнителната консумация, заета от самия протокол, а минималното заглавие на съобщението трябва да заема само 2 байта. Може да работи стабилно в мрежови среди с ограничена честотна лента. В същото време MQTT клиентите се нуждаят от много малки хардуерни ресурси и могат да работят на различни крайни устройства с ограничени ресурси.

Надеждна доставка на съобщения

Протоколът MQTT осигурява 3 нива на качество на услугата за съобщения, осигурявайки надеждни съобщения в различни мрежови среди.

  • QoS 0: Съобщението се предава най-много веднъж.

Ако клиентът не е наличен по това време, съобщението се губи. След като издателят изпрати съобщение, той вече не се интересува дали е изпратено до другата страна или не и не се настройва механизъм за препредаване.

  • QoS 1: Съобщението се предава поне веднъж.

Той съдържа прост механизъм за препредаване: издателят изпраща съобщение, след това изчаква ACK от получателя и изпраща повторно съобщението, ако ACK не бъде получено. Този модел гарантира, че съобщението ще пристигне поне веднъж, но не гарантира, че съобщението ще се повтори.

  • QoS 2: Съобщението се предава само веднъж.

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

Повече за MQTT QoS можете да намерите в блога: Въведение в MQTT QoS.

В допълнение към QoS, MQTT предоставя механизъм на Чиста сесия. За клиенти, които искат да получават съобщения, които са били пропуснати по време на офлайн периода след повторно свързване, можете да зададете Чиста сесия на false по време на свързване. По това време сървърът ще съхранява абонаментната връзка и офлайн съобщенията за клиента и ще ги изпраща на клиента, когато клиентът отново е онлайн.

Свързване на масивни IoT устройства

От раждането си протоколът MQTT е взел предвид нарастващата маса на IoT устройства. Благодарение на отличния си дизайн, базираните на MQTT IoT приложения и услуги могат лесно да имат възможностите за висока едновременност, висока пропускателна способност и висока мащабируемост.

Поддръжката на MQTT broker е незаменима за свързването на масивни IoT устройства. Понастоящем MQTT брокерът, който поддържа най-голям брой едновременни връзки, е EMQX. Наскоро пуснатият EMQX 5.0 постигна 100 милиона MQTT връзки + 1 милион съобщения в секунда чрез клъстер от 23 възела, превръщайки се в най-мащабируемия MQTT брокер в света до момента.

Сигурна двупосочна комуникация

Разчитайки на модела публикуване-абониране, MQTT позволява двупосочни съобщения между устройствата и облака. Предимството на модела публикуване-абониране е, че издателите и абонатите не трябва да установяват директна връзка или да бъдат онлайн едновременно. Вместо това сървърът за съобщения е отговорен за маршрутизирането и разпространението на всички съобщения.

Сигурността е крайъгълният камък на всички IoT приложения. MQTT поддържа защитена двупосочна комуникация чрез TLS/SSL, докато клиентският идентификатор, потребителското име и паролата, предоставени в протокола MQTT, позволяват на потребителите да реализират удостоверяване и оторизация на приложния слой.

Поддържайте живи и поддържащи сесии

За да се справи с нестабилността на мрежата, MQTT предоставя механизъм „Keep Alive“. В случай на дълъг период на липса на взаимодействие между клиента и сървъра, Keep Alive предпазва връзката от прекъсване. Ако връзката е прекъсната, клиентът може незабавно да я усети и незабавно да се свърже отново.

В същото време MQTT е проектиран с Last Will, което позволява на сървъра да помогне на клиента да публикува съобщение за завещание в определена MQTT тема, ако се установи, че клиентът е офлайн необичайно.

В допълнение, някои MQTT брокери, като EMQX, също предоставят онлайн и офлайн известия за събития. Когато бекенд услугата се абонира за конкретна тема, тя може да получава всички онлайн и офлайн събития на клиентите, което помага на бекенд услугата да обедини обработката на онлайн и офлайн събитията на клиента.

MQTT 5.0 и MQTT 3.1.1

Четири години след като MQTT 3.1.1 беше пуснат и стана стандарт на OASIS, беше пуснат MQTT 5.0. Това е голямо подобрение и надстройка. Той е предназначен не само да отговори на текущите нужди на индустрията, но и да направи адекватна подготовка за бъдещото развитие на индустрията.

Базиран на версия 3.1.1, MQTT 5.0 добавя функциите на забавяне на сесия/съобщение, кодове на причини, псевдоними на теми, потребителски свойства, споделени абонаменти и т.н., които по-добре отговарят на нуждите на съвременните IoT приложения. Той подобрява производителността, стабилността и скалируемостта на големи системи. Понастоящем MQTT 5.0 се е превърнал в предпочитания протокол за повечето IoT предприятия и ние препоръчваме на разработчиците, които са нови в MQTT, да използват тази версия директно.

Ако искате да научите повече за MQTT 5.0, можете да опитате да прочетете нашата серия от статии MQTT 5.0 Explore, която ще ви запознае с важните характеристики на MQTT 5.0 по лесен за разбиране начин.

MQTT брокер

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

EMQX е широко използван широкомащабен разпределен MQTT брокер за IoT. От пускането му с отворен код в GitHub през 2013 г., той е изтеглен от повече от 10 милиона пъти по целия свят, а кумулативният брой свързани IoT ключови устройства надхвърля 100 милиона.

Можете да инсталирате версията с отворен код на EMQX 5.0 със следната команда Docker, за да я изпитате.

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest

Можете също така да създавате напълно хоствани MQTT услуги директно в EMQX Cloud. Предлага се „Безплатна пробна версия на EMQX Cloud“, без да се изисква кредитна карта.

MQTT клиент

MQTT приложенията обикновено трябва да реализират MQTT комуникация, базирана на MQTT клиентски библиотеки. Понастоящем почти всички езици за програмиране имат развити MQTT клиентски библиотеки с отворен код. Така че можете да се обърнете към Изчерпателния списък на MQTT клиентски библиотеки, събран от EMQ, за да изберете подходяща клиентска библиотека за изграждане на MQTT клиент, който отговаря на техните бизнес нужди. Можете също да посетите поредицата блогове MQTT програмиране, предоставена от EMQ, за да научите как да използвате MQTT в Java, Python, PHP, Node.js и други езици за програмиране.

Разработката на приложения на MQTT също е неделима от поддръжката на инструмента за тестване на MQTT. Лесен за използване и мощен инструмент за тестване на MQTT може да помогне на разработчиците да съкратят цикъла на разработка и да създадат стабилно IoT приложение.

MQTT X е междуплатформен десктоп клиент с отворен код. Той е лесен за използване и предоставя цялостна MQTT 5.0 функционалност, тестване на функции и работи на macOS, Linux и Windows. Той също така предоставя версии на команден ред и браузър, за да отговори на нуждите от тестване на MQTT в различни сценарии. Можете да посетите уебсайта на MQTT X, за да го изтеглите и изпробвате: https://mqttx.app/.

Бърз старт с MQTT

На този етап вярвам, че имате предварителна представа за протокола MQTT. След това можете да посетите блога The Easiest Guide to Getting Started with MQTT, за да научите как да започнете да използвате MQTT, или да разгледате поредицата от статии Learn MQTT, за да научите за функциите на протокола MQTT, да изследвате по-разширени приложения на MQTT и започнете разработка на приложения и услуги на MQTT.

Първоначално публикувано на https://www.emqx.com.