请选择 进入手机版 | 继续访问电脑版

默认
打赏 发表评论 6
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
IBM技术经理访谈:MQTT协议的制定历程、发展现状等
微信扫一扫关注!

MQTT简介


MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。

MQTT是轻量级基于代理的发布/订阅的消息传输协议,它可以通过很少的代码和带宽和远程设备连接。例如通过卫星和代理连接,通过拨号和医疗保健提供者连接,以及在一些自动化或小型设备上,而且由于小巧,省电,协议开销小和能高效的向一和多个接收者传递信息,故同样适用于称动应用设备上。

早在1999年,IBM的Andy Stanford-Clark博士以及Arcom公司ArlenNipper博士发明了MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)技术 。

MQTT的话题是他们在谈论开源物联网平台Pachube时提到的。Stanford-Clark认为Pachube很酷,其不足之处是不具备真正的推送功能。你需要不断的进行轮询才能得到即时数据。这正是MQTT能够实现的,他提到了使用推送通信系统的石油管道检测系统。

MQTT标准化


MQTT协议v3.1.1版已于2014年7月被OASIS组织接纳为国际标准(官方通告详见此处)。

OASIS组织(结构化信息标准促进组织(Organization for the Advancement of Structured Information Standards))成立于1993年,是一个推进电子商务标准的发展、融合与采纳的非盈利性国际化组织。OASIS在软件开发领域影响力很大,制定了著名的XML和Web Services标准。(OASIS官网点此进入

更多MQTT资料


扫盲贴:认识MQTT通信协议
android消息推送:GCM、XMPP、MQTT三种方案的优劣
MQTT官方网站:http://mqtt.org/
MQTT标准化文档:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
更多消息推送资料:http://www.52im.net/forum.php?mod=collection&action=view&ctid=11
更多协议选择资料:http://www.52im.net/forum.php?mod=collection&action=view&ctid=18

本次访谈对象


QQ20160913-0.png 金千里IBM消息传递产品和解决方案的高级开发经理。
在企业消息传递基础构架,物联网,移动通讯和数据转换以及SOA业务集成领域拥有超过十年的专业知识和经验。 其经验领域包括丰富的银行、零售等行业企业消息传递基础构架开发; 移动消息传递解决方案、移动推送和企业即时消息平台开发;物联网,云,设备联接解决方案开发,以及成熟的管理软件和解决方案,如敏捷 和 Dev Opts的开发经验。他还拥有3项专利和20余项技术出版物和文章。

访谈内容摘录


Q感谢金经理参加这次采访,我们知道MQTT是IBM在物联网方面的一个标准协议,已经被国际标准化组织所采用,那么您能先给我们介绍一下,MQTT到底是什么?


MQTT其实是一个缩写,中文翻译过来呢,就是消息队列遥测传输协议,在1999年物联网可能刚刚起步的时候,IBM跟一些合作伙伴一起分析了一些我们在互联网上传输数据的特征,专门针对物联网的一些应用场景来制订的一个异步的轻量级双向消息传输协议,它主要是为了解决物联化的设备,或者物联网上使用到的设备的互相通信的问题,以及这些设备与后端应用系统之间通信的问题。

Q应该说IBM参与制订的相关的协议也是挺多的,包括工作流方面有BPMN,这个IBM也参与过,那么为什么不对已有的协议进行修改,而去创建一种新的协议呢?


因为在物联网的应用场景当中有一个非常大的挑战,就是智能设备,或者说是物联网的传感器设备的种类非常多,并且它传输的网络也非常多。换句话说,各种网络的有效范围,带宽,以及网络特性都不一样,这样就会给我们真正物联网场景上,具体要做的开发,运维,带来比较大的挑战,并且往往会导致成本也非常的高昂。

在这样的情况下,IBM和合作伙伴一起希望用一种统一,或者说是开放而统一的形式,来适用于各种类型的网络,并且能够使得各种设备都有可能以一种统一的形式能够连接在一起。物联网协议发展到今天,也已经有15年了,刚才你也讲到,刚刚到去年,它才被国际标准化组织定义为物联网的推荐协议,我们也特别希望这个协议能够在物联网场景,或者说在不同的网络与设备接入的时候给大家提供一个很好的选择。

Q在传输协议方面,应用在物联网上的还有ATTP,TCM还有我们的MQTT,那么相对于这些协议,MQTT它的优势在哪?


首先从网络层面来讲,由于它从定制的一开始就是为物联网这个场景所特别经过了一些优化的。所以在各个方面,包括网络的可达性,消息的连通性,以及使用的过程中的能耗等等方面,都是会有优势的。

具体有几个方面:

  • 第一点:是它本身是特别轻量级的,我们知道嵌入式设备的计算能力,往往会比我们传统意义上的像PC要弱很多,那么在一个八位的系统当中,可能我只要30K的空间,就能把相应的MQTT的客户端给跑起来,就可以传输信息了。
  • 第二点:就是它本身是为预定义不稳定的网络而设计的一个传输协议。因为我们通常意义上的传输协议都是基于稳定网络的传输的,会专门为了这种稳定的网络去做一些优化,以使传输的效率最高,但是MQTT是正好相反过来,它是预定义为不稳定的网络,这个网络会频繁中断,在这样的情况下设计一个协议,它的最小的传输字节只有两个,以此来保证在非常恶劣的网络条件下,仍然有很好的消息可达率。
  • 第三点:是它的消息的交互模式跟传统意义上不太一样,它采用了发布和订阅的模式。这种模式有什么好处呢?就是它除了可以做一对一的消息传输以外也可以做一对多的消息传输,也就是说当数据源发布一条消息的时候,可以有多个接收端同时能收到这个消息,这样对于很多的物联网场景来说,就会变得比较灵活。
  • 第四点:就是安全性,虽然它是一个非常轻量级的协议,但是它在客户端到服务器端的JAAS认证,包括在通讯传输层的SSL的加密过程当中,是完全能支持这些安全的特性的,以保证有一些场景如果需要安全的数据传输的话,它也能提供非常好的支持。
  • 第五点:就是它提供了多种消息质量的服务,也就是说可以根据场景定义消息或者数据,是最多一次传输,还是最少一次传输,还是只保证有一次传输。那各种不同类型的消息服务有不同的网络开销,在每一个场景下面,MQTT传输和传统的别的通讯方式的传输对比起来,它的能耗一般只是1/4,或者更低。

Q从开发的角度讲,一个协议诞生之后,它的学习成本是相对比较高的,为了方便开发人员去入手,我们有没有开发相关的工具,或者集成开发环境去帮助开发人员更快的用我们的协议开发产品了?或者应用到我们的产品里?


是有的,因为MQTT这个协议已经经过了15年的发展,大家也可以看到,最新的版本是3.1和3.1.1了,也就是它在这个过程当中已经经过了大量的优化,以及落地实际案例的考验。

MQTT它有一个网站是http://mtqq.org,这个网站包含了绝大多数的MQTT相关的资源。这其中就包含了几部分内容,一部分内容是MQTT协议本身,它是开源的,第二部分,就是目前它有80多个客户端,适用于不同类型的设备平台,对于某些比较热的类型的平台,它甚至有超过一种的实现,都是开源的。它也有一些比客户端更大一层的,更贴近于解决方案的一些资产,代码,可以从网站下载到开发人员的开发板上,或者硬件设备上尝试MQTT的链接,这些都是有。

Q也就是我们的开发相对是比较容易的,您刚才提到了MQTT实际上经过了一个很长的发展,中间有3.1,现在都是3.1.1了,可以给大家介绍一下主要的发展历程,中间各个协议在制订过程中,都遇到了一些什么样的比较难解决的问题?


其实MQTT协议从1999年刚刚诞生的时候,只是IBM和几个合作伙伴一起来做事情,大概经过了5年以后,到了2005年,随着互联网的发展,物联网才真正更多的进入了大家的视野。到04年,05年的时候,我们认为MQTT这个协议,可能更多的要以一种更开放的态度来迎接大家的考验,同时也有更大规模的推广,所以在那个时候开放了整个MQTT协议本身的内容,也开放了一个论坛让大家能够参与进来,提供各自的意见,一起帮助这个协议往前。大概又过了五到六年的时间,在11年的时候,我们觉得这个开放程度还不够,我们的故事可能要讲的更公开,更开放一点,所以在那个时间点我们就把手里的所有已经做过的MQTT客户端,所有的内容全部开源了。

在这个过程当中,您刚才问到了,会有什么样的一些技术上的挑战,最主要的还是刚才讲到的就是对于这个协议的在不停的做修正,这些修正最最重要的因素,就是保证它在带宽非常低而且网络特别不稳定的情况下,怎么样能提高它的连接能力,以及提高它数据传输的能力。第二部分,就是对于物联网这样的场景来说,是不是对协议能有进一步的优化。

我可以举个例子,在目前新版MQTT协议里边,有一个功能叫做遗嘱和遗愿,大家听这个名字就觉得还是蛮新鲜的,因为在IT世界里面我们很少有这样一个概念,但是它理解起来也蛮直观的,在协议里面加入这个功能,主要就是因为我们是一个物联化的世界,我们所有设备是成千上万的,并且很多的设备工作在非常不稳定的环境当中,甚至有很多可能都工作在野外环境当中,所以一个设备它连不上网络,或者连不上背后的系统是一个常态,遗嘱和遗愿的机制就是为了保证当一个设备连不上的时候,服务器端有一个专门的机制能够保证马上能够收到消息,这个设备出了什么状况,从而可以有非常快的反馈,这个反馈可以是人工的,也可以是系统自动做出的,对某一个结点做出一些补偿。这些内容,其实就是这个协议适应物联网场景所做出的一些特别挑战。

Q一个协议它的多版本一般来说,并不是说用最新的版本就一定好,要根据自己的场景选择合适的产本,那我们MQTT是不是也需要针对这些不同的场景去选择版本呢?


其实是这样子,目前来说比较稳定,或者说大家用的比较多的还是3.1和3.1.1这两个版本。这两个版本的区别不是特别大,但是今年OASIS认证为国际标准协议的3.1.1版本,相对来说可能更稳定一些,使用的人也比较多,所以我们也推荐使用3.1.1的版本。

除此以外,MQTT还有一个比较大的和其他协议不太一样的区别在于,通常意义上,我们在网络上讲一个协议,它基本上都是基于TCP/IP这样的网络来做得,MQTT的标准协议也是基于TCPIP的,但是MQTT同时也包含了一系列的扩展协议,以适应扩展的网络,比方说在UDP网络里边它有一个扩展协议叫MQTT-SN,它有自己的一条支线,把UDP网络当中的设备也可以接入,比方说在一些电力线载波的网络PLC的里边,它也有一些自己的扩展协议,比如说MQTT-P。之所以这样设计,就是为了在非标准的TCP/IP网络当中的设备也能通过这样一种统一的方式能把它都接入到物联网的场景中来。

Q刚才你也有提到,我们最近已经把我们内部的一些基于MQTT的工具也开源出来了,现在市场上有哪些产品,是基于我们这些开放的工具,或者说协议做的?


MQTT这个协议的适用的范围还是特别广泛的,从最传统的物联网,就是把传感器的数据采集上来,那是最经典的物联网场景,一直到现在比较火的,经常被大家提到的,比方说像车联网,像智能家居,智慧的能源,智慧的水利,等等的,都是适用于MQTT的应用场景的。从IBM角度来讲,我们也和很多合作伙伴在很多领域进行过一些合作,也有很多落地的案例。

我可以举几个例子,比方说在传统的传感器领域,IBM和万创公司有比较紧密的合作,这是在全球范围内的一个合作,万创是一个非常重要的各类传感器的生产厂商,我们和他们合作也是希望在工业领域能够更多的推广MQTT协议。

另外举一个关于车联网的案例,IBM跟福特是全球战略合作伙伴,在福特新出品的几款车上,都安装了一些基于MQTT的车载设备,在先装市场上,IBM和福特一起来提供这样的一个汽车车载信息服务。

包括在国内我们跟北大千方的全国货运管理平台一起合作,来构建生态系统,这部分可能属于车联网的后装市场的一个基于位置信息的服务,使用MQTT来做消息流的传输。

除此以外,MQTT包括物联网和移动方面也有很多的应用场景,比如我们知道Facebook就是用MQTT来做他所有的移动应用的消息传输。在国内我们也在各个行业,包括像电信,交通等等行业都有企业的即时通讯系统的落地的案例,这些企业即时通讯的案例也是基于MQTT的技术或者平台来做的。这里面帮助这些企业主要是来做像移动办公,消息推送,还有在线客服等等的一些服务,帮助他们在移动端打造垂直的生态系统,做一个技术的支撑。

访谈视频




(原文链接:点此进入

更多推荐文章


[1] 有关IM/推送的通信格式、协议的选择:
为什么QQ用的是UDP协议而不是TCP协议?
移动端即时通讯协议选择:UDP还是TCP?
如何选择即时通讯应用的数据传输格式
强列建议将Protobuf作为你的即时通讯应用数据传输格式
移动端IM开发需要面对的技术问题(含通信协议选择)
简述移动端IM开发的那些坑:架构设计、通信协议和客户端
理论联系实际:一套典型的IM通信协议设计详解
58到家实时消息系统的协议设计等技术实践分享
>> 更多同类文章 ……

[2] 有关推送技术的文章:
iOS的推送服务APNs详解:设计思路、技术原理及缺陷等
Android端消息推送总结:实现原理、心跳保活、遇到的问题等
扫盲贴:认识MQTT通信协议
一个基于MQTT通信协议的完整Android推送Demo
求教android消息推送:GCM、XMPP、MQTT三种方案的优劣
移动端实时消息推送技术浅析
扫盲贴:浅谈iOS和Android后台实时消息推送的原理和区别
绝对干货:基于Netty实现海量接入的推送服务技术要点
移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)
为何微信、QQ这样的IM工具不使用GCM服务推送消息?
>> 更多同类文章 ……

[3] 更多即时通讯技术好文分类:
http://www.52im.net/forum.php?mod=collection&op=all

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:[推荐] MPush开源消息推送系统:简洁、安全、支持集群下一篇:极光推送系统大规模高并发架构的技术实践分享

本帖已收录至以下技术专辑

推荐方案
评论 6
MQTT是一个完整的数据传输协议,跟Protobuf这种数据拆装格式有本质区别,MQTT没有好的服务端和客户端方案的话,是用不起来的。个人看好MQTT,毕竟现在针对物联网的协议就它了,而物联网显然是未来的趋势。
签名: 国庆长假还没有缓过来,请让我静一静,产品狗死远点...
学习了,感谢分享!
MQTT目前来说国内的资料并不是很多,这篇包含的内容可以做参考,多谢楼主
学习了,感谢分享
学习了,不错
很好的资料了,收藏
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部