MQTT:跑在全球15亿设备上的轻量协议,现在到底卡在了哪?

上个月跑江北新区智能制造产业园,跟一个做光伏电站运维的老伙计蹲在园区门口的大排档啃鸭脖。

他吐槽去年踩的大坑。
之前给3000个点位的山地光伏电站做数据采集,选了HTTP传传感器读数。结果一到下雨天基站信号飘,断网一次重传能把边缘网关直接干死机。他连续在山上的板房住了12天,头发掉了一大撮,最后咬咬牙把整个传输层换成MQTT。
从那之后,告警没断过,人没上过山。

先把MQTT的边界划清楚:它真不是万能药


很多人第一次听MQTT,是从物联网的科普文里。但真要让他说清楚MQTT到底能干嘛,十有八九会说“就是物联网用的协议呗”。

说白了,MQTT是给那些“穷得叮当响”的小设备设计的传输规则。
你想啊,那些装在智能电表、共享单车锁、土壤湿度传感器上的芯片,算力可能只有几十KB,内存还没你微信里存的表情包大。你让它用HTTP那种每次连接要来回握三次手、每次请求要带一堆冗余头部的重协议,根本跑不动。

它的核心逻辑其实特别简单:发布订阅模式。不需要设备直接点对点找对方传消息,只要把数据丢给中间的Broker服务器,告诉它这个数据属于哪个主题,所有订阅了这个主题的设备/平台,就能自动收到消息。

这里面最容易被忽略的设计细节,是三个等级的QoS服务质量。
QoS 0就是发了就不管,跟你在楼下喊外卖员一样,喊完就走,对方听没听见全看运气;QoS 1就是必须确保对方收到,没收到就重发,代价是可能会重复收到消息;QoS 2就是必须保证对方收到且只收到一次,代价是传输的开销最大。

我见过太多团队,上线前连这三个等级的区别都没搞清楚,就敢把MQTT往生产环境塞。

MQTT发布订阅模式消息流转示意图
MQTT发布订阅模式消息流转示意图


当然,必须说清楚它的能力边界。MQTT从来不是用来传大文件的。你要是想传4K监控视频、高清固件升级包,别用它,纯纯瞎折腾。去年在软博会碰到个做智能门锁的创业团队,非要用MQTT传门锁的开门抓拍视频,最后延迟干到3秒,用户站在门口等视频加载完才敢确认是自己家的门,差点把产品做死。

对,它的定位就是传小体积、高频次的状态数据,不是传输大文件的管道。拿它干超出边界的事,再好的协议也救不了。

现在的MQTT,早就不是20年前的实验室玩具了


很多人对MQTT的印象,还停留在1999年那个为了石油管道监控设计的初代版本。

但实际上,现在整个行业的主流版本已经迭代到MQTT 5.0了。
之前老版本的痛点,比如订阅消息的时候没法做权限过滤、消息过期了还会在队列里堆着、多个设备订阅同一个主题的时候流量没法分摊,在5.0版本里基本都补全了。甚至加了消息过期间隔、主题别名、共享订阅这些功能,专门解决大规模设备连接下的性能问题。

据行业不完全统计,目前全球跑在MQTT协议上的物联网设备规模,已经突破15亿台。
你现在用的共享单车锁、家里的智能电表、马路上的智能路灯、甚至你开的新能源汽车的车机系统,背后大概率都有MQTT在跑。

说个跟南京有关的事:现在全球市占率排前列的开源MQTT Broker产品EMQX,研发团队就在南京。从最开始的开源项目,到现在能支持单集群千万级设备连接,服务了国内大半的光伏电站、车企、智能制造工厂,算是南京本地技术圈拿得出手的硬货。

EMQX MQTT Broker 南京研发中心办公场景
EMQX MQTT Broker 南京研发中心办公场景


当然,现在的生态也有乱的地方。
很多小团队做项目,连最基本的鉴权都不做,就把Broker直接暴露在公网上。之前有安全团队做过公开扫描,能在互联网上找到几万个没有任何访问限制的MQTT节点,里面传的有智能水表的读数、门禁的开门记录、甚至工厂的生产线运行参数。

上个月碰到个做智能水表的客户,之前找的外包团队做传输,把QoS设成了最低的0级,一个月下来丢了8%的抄表数据,水厂算水费的时候对不上账,差点把外包公司告了。

落地的坑,比大部分人预想的要深


很多人觉得MQTT这么成熟的协议,落地还能有什么问题?

真的,你去跑一圈现场就知道了。

首先是安全的硬伤。现在大部分的MQTT部署,根本没有做全链路加密。设备到Broker的传输是明文,Broker到业务平台的传输也是明文,甚至开着匿名访问的权限。之前有个做智慧水务的项目,攻击者只要扫到对应的Broker地址,就能直接篡改供水管网的压力参数,严重的时候能把整个片区的供水管网搞爆。

这种事真不是危言耸听。

然后是生态的碎片化。
现在很多厂商做自己的物联网平台,都是基于MQTT改的。比如在消息头里加个自己的私有字段,把主题的命名规则改成自己的一套,最后不同厂商的设备哪怕都用MQTT,也根本没法互通。你想做个统一的智能家居控制APP,把小米的灯、海尔的空调、美的的冰箱连到一起,最后发现每个设备的MQTT消息格式都不一样,光适配就能把团队耗死。

还有边缘场景的适配问题。
很多设备装在没有稳定网络的地方,比如深山的气象站、地下的停车场、偏远的农场地块。MQTT虽然设计的时候就考虑了弱网适配,但如果参数配错,比如心跳时间设成了300秒,设备断网了5分钟,Broker都还以为设备在线,等设备重连的时候,一下子堆了几千条积压的消息,直接把设备的内存干爆。

我上次去安徽的一个山区基站测气象传感器,就是因为之前的运维人员把心跳参数设错,连续三次重启网关,最后把守站的大爷搞的要拿锄头把传感器刨了。

山区光伏电站现场MQTT网关部署实物图
山区光伏电站现场MQTT网关部署实物图


聊到最后,那个做光伏运维的老伙计问我,现在MQTT这么火,未来几年会不会被新的协议替代?

我给的判断其实很明确。

第一,MQTT不会被替代,反而会向更下沉的场景渗透。现在已经有了专门给没有IP栈的设备用的MQTT-SN版本,未来3年,这种轻量版本会进到更多的低功耗设备里,比如智能服装里的心率传感器、农业大棚里的土壤探针,这些设备根本跑不起复杂的协议,MQTT的轻量属性刚好能匹配。

第二,生态的竞争逻辑会变。之前大家拼的是单机能支持多少万连接,现在客户根本不关心你能扛100万还是1000万连接,大家关心的是你能不能直接对接光伏的运维系统,能不能直接做设备数据的实时清洗,能不能在断网的时候自动在边缘端存好数据,等网络恢复了再传上来。说白了,从拼管道能力,转到拼场景解决方案的能力。

第三,安全会变成硬门槛。不管是国内的等保要求,还是欧盟的数据合规规则,未来2年都会对物联网传输的安全提出强制要求。那些还在开匿名访问、跑明文传输的MQTT部署方案,会被直接淘汰,尤其是涉及公共设施的项目,根本不会给你留整改的机会。

那天大排档散场的时候,老伙计说,现在整个产业园里的光伏项目,基本都换了MQTT。不是因为这个协议有多高大上,是它真的靠谱,不会在你半夜赶报告的时候,弹个告警说所有数据全断了。

对了,最近南京本地的几个技术社区在攒MQTT的线下沙龙,要是你也踩过相关的坑,去聊聊,比看十篇干巴巴的教程有用。

作者|大讲堂

排版|大讲堂

审核|乐乐

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:MQTT:跑在全球15亿设备上的轻量协议,现在到底卡在了哪?
文章链接:https://m.lfdjt.com/info_23_30448.html