王風(fēng)碩,曾麗
(成都錦城學(xué)院計(jì)算機(jī)與軟件學(xué)院,四川成都 610000)
隨著物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,萬物互聯(lián)在不斷改變著人們的生活,越來越多的感知設(shè)備連接到互聯(lián)網(wǎng)上,形成了龐大的物聯(lián)網(wǎng)[1]?;谖锫?lián)網(wǎng)構(gòu)建的應(yīng)用系統(tǒng)可以有效地替代傳統(tǒng)人工成本高、高風(fēng)險(xiǎn)、高危害并需要進(jìn)行現(xiàn)場監(jiān)控和控制的場景。而如何管理物聯(lián)網(wǎng)設(shè)備、如何管理物聯(lián)網(wǎng)數(shù)據(jù)、如何快速提供穩(wěn)定的應(yīng)用服務(wù)是當(dāng)前物聯(lián)網(wǎng)及應(yīng)用需要解決的核心問題,物聯(lián)網(wǎng)平臺就是為了滿足這些需求而產(chǎn)生的[2]?,F(xiàn)有的物聯(lián)網(wǎng)平臺大多是針對特定場景進(jìn)行開發(fā),開發(fā)周期長,適配性和穩(wěn)定性等方面略顯不足。本文結(jié)合Web2.0 的最新發(fā)展技術(shù),研究并設(shè)計(jì)實(shí)現(xiàn)了基于MQTT 協(xié)議的物聯(lián)網(wǎng)平臺,和傳統(tǒng)的物聯(lián)網(wǎng)平臺相比具有如下特點(diǎn)。
1)平臺采用前后端分離的分布式架構(gòu),便于平臺服務(wù)器資源水平擴(kuò)展。
2)平臺采用基于拓?fù)浣Y(jié)構(gòu)的組態(tài)化設(shè)計(jì),方便根據(jù)場景快速設(shè)計(jì)并實(shí)現(xiàn)一套物聯(lián)網(wǎng)應(yīng)用或服務(wù)。
3)兼容主流無線通信技術(shù),統(tǒng)一數(shù)據(jù)傳輸格式,基于MQTT協(xié)議實(shí)現(xiàn)平臺和多端進(jìn)行通信[3]。
4)構(gòu)建統(tǒng)一的接口管理平臺,基于RESTful 標(biāo)準(zhǔn)對外提供接口認(rèn)證及接口調(diào)用服務(wù),方便三方應(yīng)用系統(tǒng)的接入。
MQTT(Message Queuing Telemetry Transport) 是一種基于發(fā)布-訂閱模式的“輕量級”消息協(xié)議,它由IBM公司在1999年開發(fā)并發(fā)布,并廣泛用在物聯(lián)網(wǎng)、工業(yè)互聯(lián)網(wǎng)等場景,進(jìn)行低開銷、窄帶寬、低延時(shí)的消息通信[4]。其基本設(shè)計(jì)理念是開放性、簡單性、輕量性和易于性。主要用于連接大量的遠(yuǎn)端傳感器和執(zhí)行設(shè)備,保證在低帶寬和不可靠的通信環(huán)境下,應(yīng)用程序端可采用MQTT 協(xié)議,在占用較少硬件資源的設(shè)備上保持穩(wěn)定的消息通信。
客戶端連接到代理服務(wù)器:MQTT 協(xié)議是使用代理服務(wù)器方式來處理通信消息的發(fā)布和訂閱。MQTT客戶端需要連接到MQTT 代理服務(wù)器之后才能進(jìn)行消息通信。
發(fā)布消息:當(dāng)一個(gè)MQTT 客戶端需要發(fā)布一個(gè)消息時(shí),它僅需將消息發(fā)送給MQTT 代理服務(wù)器的主題。代理再將消息發(fā)送給所有已訂閱該主題的客戶端。在這個(gè)過消息通信程中,MQTT協(xié)議使用發(fā)布-訂閱模型,即一個(gè)消息被發(fā)布到一個(gè)或多個(gè)主題之上,而訂閱該主題的客戶端都可以接收到該消息。
訂閱主題:當(dāng)一個(gè)客戶端已連接到MQTT 代理服務(wù)器,并訂閱了對應(yīng)指定的主題。當(dāng)該客戶端收到來自代理服務(wù)器的新消息時(shí),它將接收代理發(fā)送的新消息,即已訂閱的主題消息。
斷開連接:當(dāng)客戶端已不再需要與MQTT 代理服務(wù)器進(jìn)行通信時(shí),它可以主動斷開與MQTT 代理服務(wù)器的連接。斷開連接后,客戶端無法再向MQTT 代理服務(wù)器發(fā)送消息,但仍然可以從MQTT 代理服務(wù)器接收消息。
輕量級:MQTT 協(xié)議包含協(xié)議頭信息和消息體信息,協(xié)議頭信息共包含協(xié)議的版本號和消息類型,消息體可以為空,也可包含一個(gè)消息主題及消息內(nèi)容[5]。MQTT協(xié)議本身比較簡單、輕量級,比較適合資源有限的設(shè)備、傳感器、執(zhí)行器、移動設(shè)備等。
易用性:MQTT 協(xié)議采用客戶端/服務(wù)器模式,通信過程是基于完全松耦合的通信方式,所以客戶端在發(fā)布和訂閱主題時(shí),就不需要知道消息主題的發(fā)布方或訂閱方的詳細(xì)信息。這就使MQTT 協(xié)議非常適合用在主流的分布式系統(tǒng)中。
擴(kuò)展性:MQTT 協(xié)議還支持多種擴(kuò)展,如SSL/TLS協(xié)議擴(kuò)展、QoS 多等級服務(wù)質(zhì)量、盲訂閱等,這些擴(kuò)展保證了MQTT協(xié)議可以適配更多的應(yīng)用場景。
可靠性高:MQTT協(xié)議還支持QoS等級為1和2的服務(wù)質(zhì)量,QoS 等級為2 的MQTT 消息在傳輸中會得到更高的可靠性保證,在保證傳輸速度的基礎(chǔ)之上也保證了消息的可靠性。
使用場景:得益于MQTT 協(xié)議的輕量級及較小的協(xié)議頭,它非常適合低功耗和傳統(tǒng)電池供電的設(shè)備使用。這類設(shè)備通常不需要實(shí)時(shí)通信,就可以將節(jié)省下更多的資源用于數(shù)據(jù)處理等重要環(huán)節(jié),當(dāng)然也可以根據(jù)具體場景選擇QoS[6]。
MQTT協(xié)議提供了三個(gè)Level的服務(wù)質(zhì)量(QoS):
QoS 0(等級0):發(fā)布的消息最多一次交付,無需進(jìn)行發(fā)布確認(rèn),不保證成功。
QoS 1(等級1):發(fā)布的消息至少一次交付,并且需要發(fā)布確認(rèn),可能會多傳。
QoS 2(等級2):發(fā)布的消息只有一次交付,并且需要發(fā)布確認(rèn),保證只傳送一次,需要多次握手保證只傳送一次消息,開銷較大。
本平臺采用MQTT 作為物聯(lián)網(wǎng)通信協(xié)議標(biāo)準(zhǔn),采用了分層的體系架構(gòu),從上到下分為應(yīng)用層、管理層、集成層、網(wǎng)關(guān)層,感知層,體系架構(gòu)如圖1所示。應(yīng)用層主要用來對接入平臺的應(yīng)用、項(xiàng)目的設(shè)備進(jìn)行數(shù)據(jù)展示和交互,結(jié)合管理層對設(shè)備進(jìn)行管理。集成層主要集成管理層、網(wǎng)關(guān)層以及三方的數(shù)據(jù),進(jìn)行數(shù)據(jù)的解析,并結(jié)合定制的業(yè)務(wù)場景對外提供標(biāo)準(zhǔn)的RESTful接口。網(wǎng)關(guān)層負(fù)責(zé)整合感知層的感知器和執(zhí)行器,對常見的無線通信技術(shù)提供支持。另平臺涉及的應(yīng)用服務(wù)器和中間件都部署在云服務(wù)商的ECS 之上,方便應(yīng)對后期業(yè)務(wù)的水平擴(kuò)展。
圖1 物聯(lián)網(wǎng)平臺體系架構(gòu)
整個(gè)物聯(lián)網(wǎng)平臺主要分為管理平臺和智能網(wǎng)關(guān)兩個(gè)接入端,涉及以下的業(yè)務(wù)模塊,如圖2所示。
圖2 物聯(lián)網(wǎng)平臺業(yè)務(wù)模塊
場景管理模塊:主要用來創(chuàng)建物聯(lián)網(wǎng)場景,涉及場景名稱、描述、圖標(biāo)、背景圖片等。
設(shè)備注冊模塊:該模塊主要用來注冊物聯(lián)網(wǎng)設(shè)備。在該模塊維護(hù)設(shè)備的基本信息,并生成設(shè)備全球唯一的UUID 信息,該UUID 會貫穿設(shè)備整個(gè)生命周期,從通信模塊一直到數(shù)據(jù)的可視化及控制指令的下達(dá)。UUID 一共八位16 進(jìn)制組成,UUID 組成規(guī)則如下:大類、設(shè)備類型編號、組織ID、序列號。如一個(gè)光敏傳感器的UUID為04010301。
系統(tǒng)管理模塊:該模塊主要用來管理系統(tǒng)菜單、角色、用戶、權(quán)限、網(wǎng)關(guān)端口、資源路徑、熱更新地址等。
項(xiàng)目管理模塊:該模塊主要用來管理物聯(lián)網(wǎng)項(xiàng)目,通過該模塊可以靈活根據(jù)物聯(lián)網(wǎng)場景創(chuàng)建項(xiàng)目,并進(jìn)行設(shè)備管理,組態(tài)化設(shè)計(jì)等,并通過狀態(tài)管理實(shí)現(xiàn)對該項(xiàng)目的全流程跟蹤。
接口管理模塊:該模塊主要用來管理系統(tǒng)對外的所有API,需要進(jìn)行注冊及授權(quán)才能使用API,以便第三方應(yīng)用和服務(wù)的安全接入。
數(shù)據(jù)解析模塊:該模塊主要負(fù)責(zé)解析組態(tài)設(shè)計(jì)的規(guī)則數(shù)據(jù)和設(shè)備通過通信模塊傳送的傳感數(shù)據(jù),解析之后,緩存到智能網(wǎng)關(guān)的存儲系統(tǒng)。
通信模塊:該模塊主要用來監(jiān)聽硬件網(wǎng)關(guān)的TCP連接,實(shí)現(xiàn)傳感數(shù)據(jù)的接收及發(fā)送到數(shù)據(jù)解析模塊,并把控制指令轉(zhuǎn)發(fā)給硬件網(wǎng)關(guān)。
聯(lián)機(jī)調(diào)試模塊:該模塊主要用來進(jìn)行軟硬件的聯(lián)機(jī)調(diào)試,當(dāng)設(shè)備連接并上電后,通過點(diǎn)擊調(diào)試按鈕向硬件網(wǎng)關(guān)發(fā)送調(diào)試指令,通信模塊接收到聯(lián)通指令代表該設(shè)備聯(lián)調(diào)通過。
數(shù)據(jù)同步模塊:該模塊主要用來實(shí)現(xiàn)從云端下載項(xiàng)目數(shù)據(jù)和配置數(shù)據(jù)。并把解析后的傳感數(shù)據(jù)通過MQTT協(xié)議上傳到云端。
平臺的業(yè)務(wù)流程如圖3所示,平臺分為兩個(gè)角色,管理員和業(yè)務(wù)用戶。管理員登錄系統(tǒng)后進(jìn)行系統(tǒng)參數(shù)的維護(hù)、場景基礎(chǔ)數(shù)據(jù)維護(hù),并進(jìn)行物聯(lián)網(wǎng)設(shè)備的注冊、設(shè)備參數(shù)的維護(hù)。業(yè)務(wù)人員登錄賬戶后進(jìn)行物聯(lián)網(wǎng)項(xiàng)目的創(chuàng)建,通過組態(tài)設(shè)計(jì)器進(jìn)行設(shè)備的添加、關(guān)聯(lián)關(guān)系創(chuàng)建、參數(shù)配置,設(shè)計(jì)完成后進(jìn)行設(shè)備上電聯(lián)機(jī)調(diào)試,所有設(shè)備完成調(diào)試后項(xiàng)目進(jìn)入完成狀態(tài),完成之后可以在管理平臺和智能網(wǎng)關(guān)端進(jìn)行可視化及交互控制。
圖3 平臺業(yè)務(wù)流程
結(jié)合物聯(lián)網(wǎng)平臺業(yè)務(wù)特點(diǎn),可擴(kuò)展性是一個(gè)至關(guān)重要的設(shè)計(jì)考慮因素。因?yàn)殡S著物聯(lián)網(wǎng)項(xiàng)目的增加,涉及的物聯(lián)網(wǎng)場景和行業(yè)需要進(jìn)行擴(kuò)充,設(shè)備接入和傳感數(shù)據(jù)也會出現(xiàn)激增,因此本平臺需要進(jìn)行擴(kuò)展性設(shè)計(jì),以便能夠進(jìn)行業(yè)務(wù)功能和容量的水平擴(kuò)展。
本平臺劃分為多個(gè)解耦的模塊,每個(gè)模塊負(fù)責(zé)特定的業(yè)務(wù)功能,未來需要進(jìn)行擴(kuò)展功能時(shí),僅需要增加新的模塊或微調(diào)現(xiàn)有模塊,而不會影響整個(gè)平臺的穩(wěn)定性。并通過分布式架構(gòu),可以將不同獨(dú)立功能模塊分布到不同的節(jié)點(diǎn)上,從而實(shí)現(xiàn)更好的擴(kuò)展性和容錯性。
針對一些計(jì)算密集型的功能,如果拓?fù)鋽?shù)據(jù)和協(xié)議數(shù)據(jù),采用云計(jì)算提供的彈性計(jì)算和自動伸縮功能,在業(yè)務(wù)高峰時(shí)段,平臺根據(jù)實(shí)際負(fù)載動態(tài)調(diào)整資源分配,確保對外能夠提供穩(wěn)定的性能。
在本平臺中,針對首頁項(xiàng)目、設(shè)備的可視化頁面,需要頻繁的訪問,通過使用Redis 緩存和內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN),以減輕實(shí)時(shí)計(jì)算對后端服務(wù)器的壓力,以提高首頁的響應(yīng)速度。
平臺設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)穩(wěn)定易用的API 管理系統(tǒng),方便第三方開發(fā)人員和生態(tài)合作伙伴可以快速構(gòu)建基于本平臺的應(yīng)用和服務(wù)。第三方應(yīng)用集成API需要進(jìn)行注冊及授權(quán)才能使用。
為了方便快速構(gòu)建基于平臺的三方應(yīng)用或服務(wù),用戶可以基于平臺的組態(tài)化設(shè)計(jì)器在線設(shè)計(jì)自己的應(yīng)用,并同步配置網(wǎng)絡(luò)和設(shè)備參數(shù),當(dāng)所有設(shè)備通過聯(lián)機(jī)調(diào)試后,在智能網(wǎng)關(guān)的支持下,可以實(shí)現(xiàn)數(shù)據(jù)的可視化和控制設(shè)備的交互,如圖4所示。
圖4 組態(tài)化設(shè)計(jì)器案例
本平臺采用了基于SSL協(xié)議的加密傳輸方式,保障平臺的數(shù)據(jù)傳輸和存儲安全,另外平臺增加了身份認(rèn)證和訪問控制策略,確保只有經(jīng)過身份認(rèn)證的設(shè)備、用戶或應(yīng)用程序能夠訪問平臺,通過授權(quán)機(jī)制限制其操作權(quán)限,防止未經(jīng)授權(quán)的訪問和操作,三方應(yīng)用通過注冊的AppID 和AppSecre 才可訪問指定的API。自動定期備份平臺的數(shù)據(jù)和配置信息,以防止數(shù)據(jù)丟失,同時(shí)建立快速的恢復(fù)機(jī)制以應(yīng)對安全事件。
通過平臺創(chuàng)建一個(gè)基于智慧農(nóng)業(yè)場景的項(xiàng)目,通過設(shè)計(jì)器選擇了光敏傳感器、光照傳感器和輸出多路控制器,設(shè)計(jì)完成后提交系統(tǒng)進(jìn)行規(guī)則解析。設(shè)備上電后,通過智能網(wǎng)關(guān)進(jìn)行聯(lián)機(jī)調(diào)試,所有設(shè)備調(diào)試通過后,打開項(xiàng)目可以實(shí)時(shí)看到該項(xiàng)目的可視化信息,通過控制按鈕可以進(jìn)行多路控制操作,如圖5所示。
圖5 系統(tǒng)測試場景
本文基于MQTT 協(xié)議,構(gòu)建了一個(gè)通用穩(wěn)定的物聯(lián)網(wǎng)平臺。本平臺集成了ZigBee、NB-IOT、LoRa、藍(lán)牙通信模塊,支持常見的無線通信技術(shù)。滿足了智慧工業(yè)、智慧農(nóng)業(yè)、智慧城市、智慧家居、智慧醫(yī)療等場景對物聯(lián)網(wǎng)應(yīng)用的需求。平臺采用了支持高并發(fā)的可擴(kuò)展Web 架構(gòu),保證了后期隨著業(yè)務(wù)的發(fā)展,集成設(shè)備的快速增加。平臺還使用了大數(shù)據(jù)處理技術(shù)、多端編程技術(shù)、Docker 技術(shù)、數(shù)據(jù)庫技術(shù)、緩存技術(shù)、安全加密等技術(shù),為通用的物聯(lián)網(wǎng)設(shè)備提供了安全可靠的通信及交互能力,支撐感知數(shù)據(jù)本地采集和集中上云。并對外提供授權(quán)認(rèn)證的接口管理平臺,以便平臺應(yīng)用App 及三方接入App 可以進(jìn)行數(shù)據(jù)可視化及控制指令的下發(fā)。未來,平臺還要結(jié)合云計(jì)算、人工智能等技術(shù)對外提供更強(qiáng)大能力,實(shí)現(xiàn)邊緣計(jì)算、智能語音、智能規(guī)則、智能數(shù)據(jù)分析等,以支持更多業(yè)務(wù)場景和行業(yè)應(yīng)用,并為用戶提供更便捷更智能的物聯(lián)網(wǎng)接入能力。