网关轻量化传输协议——MQTT
自1999年由IBM的(de)(de)(de)Andy Stanford-Clark与Arlen Nipper(当(dang)时(shi)(shi)为Arcom成员,后归入Cirrus Link)共同发(fa)布以来,MQTT这(zhei)一(yi)轻量级消息传输(shu)协议,凭借其简洁与高效(xiao)的(de)(de)(de)特点,赢得了业界的(de)(de)(de)广(guang)泛关注与认可。MQTT的(de)(de)(de)设计初衷在于解决(jue)低带(dai)宽与不稳定网络环境下物(wu)联网应用的(de)(de)(de)通信(xin)难题,采用发(fa)布/订(ding)阅(yue)模式,能(neng)以极(ji)少的(de)(de)(de)代码(ma)量为联网设备提供实时(shi)(shi)可靠的(de)(de)(de)消息服务。
MQTT的起源
全称“MQ Telemetry Transport”与(yu)Arlen Nipper的(de)背景紧密相(xiang)关。九十年(nian)代初期,Nipper在参与(yu)Conoco Phillips公司的(de)原油管道(dao)数据采集(ji)监控(kong)系(xi)统(pipeline SCADA system)项(xiang)目时,为(wei)实现(xian)传感器与(yu)IBM MQ Integrator之间(jian)的(de)实时数据传输,开发了该协议(yi)。鉴于当时带宽(kuan)资源有限且成本(ben)高昂,MQTT的(de)设计(ji)特(te)别(bie)注重轻量化和带宽(kuan)节约,这也是其(qi)“轻量级”称号的(de)由来。
MQTT协议的优势
首先,MQTT协(xie)议实(shi)现(xian)简单,便于部署与维(wei)护(hu)。其(qi)次(ci),它支持三种消(xiao)息(xi)服务质(zhi)量(liang)等级(QoS),能(neng)够根据(ju)网络环境的(de)不(bu)同(tong)需求(qiu),提供(gong)不(bu)同(tong)级别的(de)消(xiao)息(xi)传(chuan)递可(ke)靠性保障。此外,MQTT协(xie)议轻(qing)量(liang)且节省带宽,消(xiao)息(xi)头部最小仅需2个字(zi)节,非(fei)常适合在带宽受限(xian)的(de)网络环境中运行。同(tong)时(shi),MQTT协(xie)议与数据(ju)格式(shi)无关,这为其(qi)在多种应用(yong)场景下的(de)灵活性提供(gong)了(le)可(ke)能(neng)。最后(hou),MQTT协(xie)议具(ju)备持续的(de)会(hui)话感知能(neng)力,能(neng)够实(shi)时(shi)感知设(she)备的(de)在线(xian)状(zhuang)态,确保消(xiao)息(xi)的(de)有效传(chuan)递。
与其他通信协议的对比
HTTP协议
MQTT报文(wen)体积更(geng)小,网(wang)络开(kai)销更(geng)低;同时,MQTT基于发布/订阅模型(xing),支持双工通信,能够实时推(tui)送消息,而HTTP则需通过(guo)轮(lun)询(xun)获取数据更(geng)新。此外(wai),MQTT是有状态(tai)的协议(yi),能够从连接异常中(zhong)断中(zhong)恢(hui)复,而HTTP则无此功能。与XMPP协议(yi)相比(bi),MQTT设计(ji)更(geng)为简单轻(qing)量,路由灵活,报文(wen)体积小且编解码简便,更(geng)适合在移动(dong)互联网(wang)和(he)物联网(wang)消息领域应用。
MQTT为什么是物联网的首选协议
据IoT Analytics发布的(de)(de)《2022年春(chun)季物联网状(zhuang)况》研(yan)究报告显示,物联网市场预(yu)计到(dao)2022年将增长(zhang)18%,达到(dao)144亿活(huo)跃连接(jie)(jie)。面对如此(ci)庞大的(de)(de)物联网设备接(jie)(jie)入和管理需(xu)求,MQTT协(xie)议凭借其轻量高效、可靠的(de)(de)消(xiao)息传递(di)、海量连接(jie)(jie)支持以及安全的(de)(de)双(shuang)向通信等优(you)势,成为物联网行(xing)业的(de)(de)优(you)选。
轻量高效
MQTT协(xie)议(yi)将协(xie)议(yi)本(ben)身的(de)(de)额外消耗降至最低,能够在带宽受(shou)限的(de)(de)网(wang)络环境中稳定(ding)运行(xing)。同时,MQTT客户(hu)端(duan)所需硬件资源(yuan)极少,能够运行(xing)于各(ge)种资源(yuan)受(shou)限的(de)(de)边缘端(duan)设备上。在可靠的(de)(de)消息(xi)(xi)传(chuan)递方面,MQTT协(xie)议(yi)提供了三种QoS等级,确保消息(xi)(xi)在不同网(wang)络环境下(xia)的(de)(de)可靠传(chuan)递。此外,MQTT协(xie)议(yi)还支(zhi)持清除会(hui)(hui)话机制,对于希望(wang)在重新连(lian)接(jie)(jie)后接(jie)(jie)收离(li)线期(qi)间遗漏(lou)消息(xi)(xi)的(de)(de)客户(hu)端(duan),可在连(lian)接(jie)(jie)时设置关闭清除会(hui)(hui)话,服务(wu)端(duan)将为客户(hu)端(duan)存(cun)储订阅关系(xi)及离(li)线消息(xi)(xi),并(bing)在客户(hu)端(duan)再次上线后发送(song)。
海量连接支持
MQTT协议自诞(dan)生之(zhi)初便考虑了日益增长的(de)物联网设(she)(she)备(bei)数量。得益于其卓(zhuo)越的(de)设(she)(she)计,基(ji)于MQTT的(de)物联网应用及(ji)服(fu)务(wu)能(neng)够轻(qing)松(song)实(shi)现(xian)高(gao)(gao)并发、高(gao)(gao)吞(tun)吐、高(gao)(gao)可扩展(zhan)性。目前,支持并发连(lian)接数最多的(de)MQTT服(fu)务(wu)器是(shi)EMQX。最近发布的(de)EMQX 5.0通过23节点的(de)集(ji)群(qun)实(shi)现(xian)了1亿(yi)MQTT连(lian)接及(ji)每(mei)秒100万消息吞(tun)吐,成(cheng)为全球最具扩展(zhan)性的(de)MQTT服(fu)务(wu)器。
安全的双向通信
MQTT协议依赖于发布/订阅模式,允许网关设备与云之间进行双向消息通信。同时,MQTT协(xie)议(yi)支持通过TLS/SSL实现(xian)安全的(de)(de)双向通信,并提供客户端ID、用(yong)户名和(he)密码等应用(yong)层的(de)(de)身份验证(zheng)与授权机(ji)制(zhi)。此外,MQTT协(xie)议(yi)还具备心跳保活机(ji)制(zhi)和(he)遗(yi)愿消息功(gong)能,以应对网络不(bu)稳定和(he)客户端异常下线的(de)(de)情(qing)况。
注(zhu)意(yi):MQTT协议(yi)在不断发展中持(chi)续升级(ji)。MQTT 5.0在3.1.1版本的(de)基础上增加(jia)了会话(hua)/消息延时(shi)、原(yuan)因码、主题别名(ming)、用户属性、共享订阅(yue)等(deng)特性,更符合现代物(wu)联网应用需求,提高(gao)了大型系(xi)统(tong)的(de)性能(neng)、稳(wen)定性与(yu)可扩展性。因此,对于初次接触MQTT的(de)开发者(zhe),建议(yi)使用MQTT 5.0版本。
MQTT协议的应用
MQTT服(fu)务器和(he)客户(hu)端(duan)(duan)(duan)的(de)(de)(de)(de)选择同样重(zhong)要。一个(ge)成熟(shu)(shu)的(de)(de)(de)(de)MQTT服(fu)务器能(neng)(neng)够(gou)支持海量客户(hu)端(duan)(duan)(duan)连接(jie)及百万级消息吞吐,帮助(zhu)物联网(wang)业(ye)务提(ti)供商专(zhuan)注于(yu)业(ye)务功能(neng)(neng),并快速构(gou)建(jian)可靠的(de)(de)(de)(de)MQTT应用。而MQTT客户(hu)端(duan)(duan)(duan)库的(de)(de)(de)(de)选择则(ze)取(qu)决于(yu)开(kai)发(fa)者的(de)(de)(de)(de)编程(cheng)语言和(he)业(ye)务需(xu)求,目前(qian)几乎所有编程(cheng)语言都(dou)有成熟(shu)(shu)的(de)(de)(de)(de)开(kai)源(yuan)(yuan)MQTT客户(hu)端(duan)(duan)(duan)库可供选择。此外,一款易(yi)用且(qie)功能(neng)(neng)强(qiang)大的(de)(de)(de)(de)MQTT测试(shi)工具(ju)也是MQTT应用开(kai)发(fa)的(de)(de)(de)(de)关键。MQTT X作(zuo)为一款开(kai)源(yuan)(yuan)的(de)(de)(de)(de)跨(kua)平台桌面(mian)客户(hu)端(duan)(duan)(duan),提(ti)供了全(quan)面(mian)的(de)(de)(de)(de)MQTT 5.0功能(neng)(neng)测试(shi),并支持多种操作(zuo)系(xi)统和(he)场(chang)景下的(de)(de)(de)(de)MQTT测试(shi)需(xu)求。