IoT -- (八)MQTT优缺点
物聯(lián)網(wǎng)并不僅僅是一種網(wǎng)絡(luò),而是一個新的生態(tài)環(huán)境,它描述的本質(zhì)是越來越多的使用物品通過網(wǎng)絡(luò)連接在一起并可使用單個或者多個的終端設(shè)備對它們進(jìn)行各種控制和使用—當(dāng)然,工業(yè)上的物聯(lián)網(wǎng)通常連接到的石鼓傳感器或者其他數(shù)據(jù)采集儀器以及行為單位。思科曾經(jīng)預(yù)測過,物聯(lián)網(wǎng)市場的規(guī)模可能在14萬億美金左右,前景極為光明。
眾所周知,物聯(lián)網(wǎng)是在傳統(tǒng)互聯(lián)網(wǎng)基礎(chǔ)上延伸和擴(kuò)展而出的概念,用戶端從傳統(tǒng)的計(jì)算機(jī)延伸和擴(kuò)展到了任何物品與物品之間,而物品則通過各種傳感器進(jìn)行信息采集,然后通過計(jì)算設(shè)備進(jìn)行網(wǎng)絡(luò)信息交換與 通信。但是當(dāng)前移動互聯(lián)網(wǎng)正處于起步階段,很多時候無法提供可靠的網(wǎng)絡(luò)保障,因此,IBM主導(dǎo)并提出了MQTT協(xié)議,致力于解決這一方面的問題。
什么是MQTT協(xié)議?
MQTT是一個由IBM主導(dǎo)開發(fā)的物聯(lián)網(wǎng)傳輸協(xié)議,它被設(shè)計(jì)用于輕量級的發(fā)布/訂閱式消息傳輸,旨在為低帶寬和不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中的物聯(lián)網(wǎng)設(shè)備提供可靠的網(wǎng)絡(luò)服務(wù)。它的核心設(shè)計(jì)思想是開源、可靠、輕巧、簡單,具有以下主要的幾項(xiàng)特性:
\1. 非常小的通信開銷(最小的消息大小為 2 字節(jié));
\2. 支持各種流行編程語言(包括C,Java,Ruby,Python 等等)且易于使用的客戶端;
\3. 支持發(fā)布 / 預(yù)定模型,簡化應(yīng)用程序的開發(fā);
\4. 提供三種不同消息傳遞等級,讓消息能按需到達(dá)目的地,適應(yīng)在不穩(wěn)定工作的網(wǎng)絡(luò)傳輸需求
對于傳統(tǒng)的HTTP和MQ協(xié)議,MQTT的優(yōu)勢在哪里呢?這有一張表格能清楚的展示這一點(diǎn)
低協(xié)議開銷
MQTT 的獨(dú)特之處在于,它的每消息標(biāo)題可以短至 2 個字節(jié)。MQ 和 HTTP 都擁有高得多的每消息開銷。對于 HTTP,為每個新請求消息重新建立 HTTP 連接會導(dǎo)致重大的開銷。MQ 和 MQTT 所使用的永久連接顯著減少了這一開銷。
對不穩(wěn)定網(wǎng)絡(luò)的容忍
MQTT 和 MQ 能夠從斷開等故障中恢復(fù),而且沒有進(jìn)一步的代碼需求。但是,HTTP 無法原生地實(shí)現(xiàn)此目的,需要客戶端重試編碼,這可能增加冪等性問題。
低功耗
MQTT 是專門針對低功耗目標(biāo)而設(shè)計(jì)的。HTTP 的設(shè)計(jì)沒有考慮此因素,因此增加了功耗。
數(shù)百萬個連接的客戶端
在 HTTP 堆棧上,維護(hù)數(shù)百萬個并發(fā)連接,需要做許多的工作來提供支持。盡管可以實(shí)現(xiàn)此支持,但大多數(shù)商業(yè)產(chǎn)品都為處理這一數(shù)量級的永久連接而進(jìn)行了優(yōu)化。IBM 提供了 IBM MessageSight,這是一個單機(jī)架裝載服務(wù)器,經(jīng)過測試能處理多達(dá) 100 萬個通過 MQTT 并發(fā)連接的設(shè)備。相反,MQ 不是為大量并發(fā)客戶端而設(shè)計(jì)的。
推送通知
您需要能夠及時地將通知傳遞給客戶。為此,必須采用某種定期輪詢或推送方法;從電池、系統(tǒng)負(fù)載和帶寬角度講,推送是最佳解決方案。
我們的企業(yè)可能需要在沒有第三方中介的情況下發(fā)送敏感的信息。這降低了特定于操作系統(tǒng)的解決方案(比如 Apple iOS、Google Play 通知)作為主要傳輸機(jī)制的價值。
HTTP 只允許使用一種稱為COMET 的方法,使用持久的 HTTP 請求來執(zhí)行推送。從客戶端和服務(wù)器的角度講,此方法都很昂貴。MQ 和 MQTT 都支持推送,這是它們的一個基本特性。
客戶端平臺差異
HTTP 和 MQTT 客戶端都已在大量平臺上實(shí)現(xiàn)。MQTT 的簡單性有助于以極少的精力在額外的客戶端上實(shí)現(xiàn) MQTT。
防火墻容錯
一些企業(yè)防火墻將出站連接限制到一些已定義的端口。這些端口通常被限制為 HTTP(80 端口)、HTTPS(443 端口)等。HTTP 顯然可以在這些情況下運(yùn)行。MQTT 可 封裝在一個 WebSockets 連接中,顯示為一個 HTTP 升級請求,從而允許在這些情況下運(yùn)行。MQ 不允許采用這種模式。
事實(shí)上,MQTT的應(yīng)用非常之廣泛,幾乎現(xiàn)在隨便找一家大型的硬件、互聯(lián)網(wǎng)企業(yè),都可以找到MQTT的身影,例如Facebook、BP、alibaba、baidu等等
MQTT 協(xié)議的缺陷以及MQTT+概念的提出
由于MQTT本身的各項(xiàng)技術(shù)優(yōu)勢,越來越多的企業(yè)傾向于選用MQTT作為物聯(lián)網(wǎng)產(chǎn)品通訊的標(biāo)準(zhǔn)協(xié)議,也因此,工程師們漸漸發(fā)現(xiàn)MQTT協(xié)議要想大規(guī)模商用,也有一些有待完善的功能。比如:
——沒有齊備的SDK,不同的異構(gòu)終端,需要有對應(yīng)的與MQTT服務(wù)器通信的軟件SDK包,比如MCU、Linux、Android、IOS、WEB等之間要實(shí)現(xiàn)互聯(lián)互通必然需要不同的SDK包
——不支持File和AV,有些應(yīng)用場景,需要傳輸?shù)男畔⒖赡懿粌H僅限于指令,比如聲音信號和視頻信號,這些需要通過File和AV來實(shí)現(xiàn)通信。
——不支持與第三方HTTP的集成,雖然MQTT協(xié)議優(yōu)于普通的HTTP協(xié)議,但是基于傳統(tǒng)的HTTP協(xié)議的WEB服務(wù)器仍然占主流市場,那么這些服務(wù)器要實(shí)現(xiàn)與MQTT協(xié)議的互聯(lián)互通,以降低升級成本也尤為關(guān)鍵。
——不支持負(fù)載均衡,為防止高并發(fā)和惡意攻擊,負(fù)載均衡服務(wù)器也必不可少。
——不支持用戶管理接口,用戶在進(jìn)行設(shè)備的行為數(shù)據(jù)分析的時候,顯得尤為重要,這又是工業(yè)4.0、大數(shù)據(jù)時代的必然需求。
——不支持離線消息,彌補(bǔ)設(shè)備離線以后,MQTT服務(wù)器對設(shè)備的控制信息丟失的問題。
——不支持點(diǎn)對點(diǎn)通信,采用標(biāo)準(zhǔn)的MQTT協(xié)議,理論上可以通過相互訂閱的方式實(shí)現(xiàn)點(diǎn)對點(diǎn)通信,但是邏輯相對復(fù)雜,并且對設(shè)備的安全性方面存在擔(dān)憂。當(dāng)設(shè)備B和設(shè)備C在同一主題的情況下,設(shè)備A無法知道是設(shè)備B還是設(shè)備C發(fā)送的消息,也有可能消息被設(shè)備D竊聽。
——不支持群通信和群管理,實(shí)現(xiàn)了對群組成員的管理,群組成員之間能互通消息,這在一個設(shè)備被多人控制,或者多個設(shè)備被一人控制的這種場景下,尤為有用。
這些問題阻礙了MQTT技術(shù)在國內(nèi)市場的進(jìn)一步發(fā)展,畢竟對于單個的公司或者工程師而言,想要解決它們需要耗費(fèi)大量的資源和時間,并且穩(wěn)定性的驗(yàn)證也需要一個較長的時間周期。但近期,國內(nèi)的一支物聯(lián)網(wǎng)開發(fā)團(tuán)隊(duì)經(jīng)過兩年艱苦的研發(fā)和商業(yè)化驗(yàn)證,在MQTT協(xié)議的基礎(chǔ)上,正式提出了一套新的解決方案,稱之為ET-iLink MQTT+物聯(lián)網(wǎng)解決方案,團(tuán)隊(duì)同步公布了其中的一些細(xì)節(jié)和技術(shù)指標(biāo),引起了業(yè)界的關(guān)注。
MQTT+ 連接云是什么?
ET-iLink MQTT+物聯(lián)網(wǎng)解決方案是一套綜合性的方案,下圖是使用MQTT+作為設(shè)備接入?yún)f(xié)議的整體解決方案框圖。
設(shè)備使用MQTT+客戶端可以在特定的主題上發(fā)布消息,也可以通過訂閱特定的主題以接收其他設(shè)備或者用戶發(fā)布的消息,從而實(shí)現(xiàn)M2M,M2P,P2M的通信。
云網(wǎng)關(guān)LB Sever負(fù)責(zé)設(shè)備的接入,協(xié)議適配,消息轉(zhuǎn)發(fā)等功能,如果要支持海量設(shè)備的接入,LB Sever集群是必須的。
設(shè)備管理負(fù)責(zé)設(shè)備接入認(rèn)證,設(shè)備與用戶綁定,操作授權(quán)等相關(guān)的功能。
賬號管理負(fù)責(zé)用戶賬號安全認(rèn)證,授權(quán)認(rèn)證等相關(guān)的功能,同時也支持第三方賬號安全認(rèn)證。
云服務(wù)負(fù)責(zé)設(shè)備業(yè)務(wù)邏輯。不同的設(shè)備廠商都有一套自己的業(yè)務(wù)邏輯和服務(wù),這種服務(wù)可以和容易的運(yùn)行在云端提供的容器中,使用基于容器的微服務(wù)使得應(yīng)用程序能夠更快地進(jìn)行創(chuàng)建,并且更易于維護(hù),同時又能夠得到更高的質(zhì)量。而數(shù)據(jù)的存儲和分析使用云平臺提供的通用的存儲服務(wù)和大數(shù)據(jù)分析引擎。
用戶只要注冊賬號,綁定設(shè)備,就可以通過 手機(jī)APP,微信或者web等終端輕松查看設(shè)備信息,與設(shè)備進(jìn)行交互操作。
此解決方案具有的優(yōu)勢有:
·移動設(shè)備
能在 8bit 位處理器上很好的運(yùn)行 C /JavaScript/Java 的 client 庫分別只有 30/75/100KB
在移動設(shè)備上耗電率低,大約只需要 HTTP 的一半
·很好的適應(yīng)各種復(fù)雜網(wǎng)絡(luò),特別是受限網(wǎng)絡(luò)
預(yù)期并適應(yīng)頻繁的網(wǎng)絡(luò)中斷,能應(yīng)對低速、低質(zhì)量的網(wǎng)絡(luò)
壓縮優(yōu)化過后的協(xié)議,可以有效降低網(wǎng)絡(luò)流量,從而節(jié)約網(wǎng)絡(luò)成本
完成同樣的數(shù)據(jù)通信,MQTT只需要 HTTP 約 1/4 得數(shù)據(jù)流量
·發(fā)布 - 訂閱的消息通信協(xié)議,允許一條消息只發(fā)布一次,便可被多個消費(fèi)端(應(yīng)用程序 / 設(shè)備)所接收
·能夠?qū)崿F(xiàn)設(shè)備與設(shè)備之間的點(diǎn)對點(diǎn)的雙向通信。
·對HTTP接口的兼容,能實(shí)現(xiàn)系統(tǒng)間松耦合,簡化開發(fā),方便擴(kuò)展,整合。
·提供靈活便捷的系統(tǒng)整合能力
使用微服務(wù)+docker的方式,快速部署高效運(yùn)行云端服務(wù)
提供可靠的設(shè)備管理和賬號管理體系,您只需要關(guān)注核心業(yè)務(wù)
提供通用的數(shù)據(jù)存儲和數(shù)據(jù)分析服務(wù)
提供與第三方云平臺的對接功能
提供協(xié)議適配功能,客戶端可以使用多種通信協(xié)議與設(shè)備進(jìn)行通信。
·提供豐富的安全性
使用 SSL 提供的認(rèn)證和加密來保證傳輸安全性
采用賬號安全認(rèn)證+設(shè)備安全認(rèn)證結(jié)合的方式保證內(nèi)容安全
·強(qiáng)大的性能提高系統(tǒng)的高可靠性
高連接數(shù)下系統(tǒng)低計(jì)算資源使用
高連接數(shù)下系統(tǒng)高信息處理速度
·提供多種消息服務(wù)質(zhì)量,滿足不同場景需求
0 :消息最多被傳遞一次,比如一般類廣告,通知
1 :消息會被傳遞但可能會重復(fù)傳遞,比如賬戶余額通知
2 :消息保證傳遞且僅有一次傳遞,比如交易支付批復(fù)通知
硬件+軟件+私有云平臺開發(fā)套件/免費(fèi)的公有云平臺支持
小e MQTT系列全功能 開發(fā)板是為了幫助工程師們快速實(shí)現(xiàn)物聯(lián)網(wǎng)項(xiàng)目的開發(fā)而提供一款配套開發(fā)板。考慮到實(shí)際的項(xiàng)目應(yīng)用環(huán)境,它有兩個不同的版本:
小e1Wi-Fi全功能開發(fā)板采用ESP8266 WiFi SOC 芯片,采用Free RTOS實(shí)時操作系統(tǒng),主頻可達(dá)160MHZ。支持標(biāo)準(zhǔn)的 IEEE802.11 b/g/n 協(xié)議,完整的 TCP/IP 協(xié)議棧,具有豐富的硬件接口,并配備OLED屏,溫濕度傳感器,大氣壓傳感器,RGB,IR等,利用微信進(jìn)行遠(yuǎn)程控制與語音互動,代碼開源。
小e2 2G透明串口開發(fā)板,是利用SIM卡和運(yùn)營商的GPRS網(wǎng)絡(luò)提供無線數(shù)據(jù)傳輸功能的開發(fā)板,通過此開發(fā)板的2G模塊,可以提供各種設(shè)備(PC、手機(jī)、服務(wù)器)到模塊間的透明的數(shù)據(jù)交互
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的IoT -- (八)MQTT优缺点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工业用微型计算机(16)-指令系统(11
- 下一篇: SpringAop @Pointcut(