張朝蘭 姜孝均 易大江



摘要:MQTT協議作為一種即時通信協議,在未來物聯網技術的建設與發展中,將會成為其最為重要的組成部分,基于搭建完成的平臺連接外部和聯網的設備,充當通信橋梁的作用。本文從MQTT協議角度出發,從物模型與主題模型設計、設備狀態管理設計、消息路由模塊設計、系統安全模塊設計、系統集群模塊設計等五個角度,系統分析了基于MQTT協議的物聯網文件傳輸系統,探究物聯網文件傳輸的實現路徑。
關鍵詞:MQTT協議;物聯網文件;消息傳輸
引言
在智能電網、智能家居、智慧農業、智慧交通、智慧城市、智慧醫療和智能電網等領域中,物聯網終端設備利用多種多樣的連接方式實現連接,提高設備和云服務器之間的聯系強度。基于云平臺提供的通信服務、設備管理、分析服務和數據存儲功能,實現不同網絡范圍內、不同區域范圍內的各類終端設備信息交互和數據共享,基于“云+端”架構的物聯網體系逐漸成為現代互聯網體系的經典架構[1]。目前,物聯網技術仍舊處于發展的初期階段,很多物聯網技術存在的問題尚未獲得解決,網絡數據傳輸實施規范還缺乏統一性。IBM開發的MQTT輕量級信息傳輸協議,憑借其傳輸可靠、高及時性、小成本支出優勢在各類物聯網場景中廣泛應用,成為物聯網通信協議標準的競爭者[2][3]。
1. MQTT協議實現方式
1.1 MQTT協議特點
MQTT協議作為一種傳輸消息的協議類型,是以主題訂閱模型和消息發布模型為基礎的,通信功能的實現則憑借客戶端/服務器架構,秉承輕量級、開放性和簡單性原則,在有限設備資源、低帶寬和不穩定網絡環境下都具有適應性,可以為物聯網應用提供支持。在對各種類型的信息進行組織和傳輸時,必須要以實現主題結構層次作為依據。作為信息的發布人員,要在信息傳輸的過程中將新數據信息進行分發,在代理中高效地連接數據信息。在此之后,借助使用代理的方式將獲得的信息分發給已經訂閱該主題的全部客戶端[4]。MQTT協議特點表現在以下五個方面:
第一,MQTT協議具有比較小的開銷,在固定頭部的位置處,僅僅有兩個字節存在,同時還可以使得協議交換最小化處理,大幅度降低網絡流量的消耗量。
第二,在網絡中傳輸MQTT消息,可以屏蔽負載內容,實現不同類型的信息傳輸目標。
第三,MQTT協議以消息訂閱和發布模式作為基礎,可以比較方便地實現消息一對多發布與傳輸,將通信訂閱方和通信發布方之間的耦合解除。
第四,MQTT協議交付的信息質量可以分為三種級別,一次正好、一次至少、一次至多。可以以消息的實際傳輸需求作為依據,將信息的訂閱者和發布者信息按照其需求傳輸到目的地[5]。
第五,MQTT協議可提供Testament機制,又被稱作為Last Will機制,在運行服務期間若是出現了客戶端異常斷開現象,此時服務器將會把相關通知到相關終端完成信息傳輸。
1.2 MQTT協議通信原理
MQTT協議在發布和訂閱信息時是以主題作為依據的。發揮主題的作用構建完成發布信息方和訂閱信息方之間的信息傳輸路徑。主題主要是指在應用消息上的附加標簽,MQTT客戶端和MQTT消息代理服務器組合形成MQTT協議,在圖1中展示的是MQTT協議基本結構。
在圖1中,MQTT客戶端既可以是消息的訂閱者,又可以是消息的發布者,是MQTT設備或者程序。消息的發布者可以將應用消息發布到消息代理中,消息的訂閱者可以面向消息代理訂閱請求接受感興趣的消息,或者將不需要的訂閱內容取消。在請求訂閱消息客戶端和發送消息客戶端之間,MQTT消息代理服務器發揮著中介作用,將客戶端發布的應用消息和客戶端連接請求予以接收,將訂閱的請求取消和將客戶端的訂閱信息做出處理,除此之外還可將應用信息或者符合條件的信息轉發到客戶端。
2. MQTT協議中的功能
2.1 訂閱功能
訂閱(Subscription)功能主要包括最大服務質量(QoS)和主題篩選器,訂閱功能會與會話功能形成關聯。
2.2 會話功能
將服務器和客戶端之間構建連接以后,將會得到會話(Session)。服務器和客戶端之間存在狀態交互現象,在網絡之中必然會存在會話功能,同時在服務器和客戶端相互之間連接,可以跨越多個連續網絡實現[6]。
當Clean Session處于0的位置時,代理服務器此時就必須要以當前會話狀態作為基礎,將與客戶端之間的通信路徑予以恢復。若是服務器端所保存的會話出現丟失,那么要在最短時間完成新的會話構建,從而可以確保將會話信息進行保存。當斷開會話的時間段內,服務器設備要客戶端定遠的交付質量級別為QoS 1和 QoS 2的消息作為狀態信息予以保存,當客戶端再次登錄上線之后,保存的信息將會通過服務器傳輸到客戶端。再者,當消息在傳輸的過程中出現信息中斷現象,此時會話的信息也會被保存,一直持續到客戶端重新與服務器完成連接。當Clean Session處于1的位置時,代理服務器必須要將保存的客戶端信息全部丟棄,等待客戶端重新連接上線之后,也不會再將舊有的消息進行接收,而是要重新訂閱。設置這樣的標志位主要是為了保證QoS 1和 QoS 2消息具有良好的服務質量,同時當標志位為0的時候,客戶端不會將所有交付質量為QoS 1和 QoS 2的信息漏接。
2.3 主題名功能
與應用程序消息的標簽進行連接,合理地匹配服務器訂閱和標簽。服務器可以將信息傳輸到訂閱地匹配標簽的全部客戶終端[7]。系統主題名(Topic Name):通過定義開頭主題得到系統的客戶端連接數量等多種系統信息。
2.4 主題篩選功能
一個主題命名通配符篩選器,即主題篩選器(Topic Fiter),可以應用在訂閱表達式中,用以完成所匹配的多個主題訂閱。多級匹配符#單級匹配符+更多主題討論。
2.5 負載功能
消息訂閱者所具體接收的內容。
3. 基于MQTT協議的物聯網文件傳輸系統設計
3.1 物模型與主題模型設計
使用物聯網消息系統對復合設備進行描述時,定義設備可選擇使用物模型實現。根據物模型的定義,其本質是JSON格式類型的文件。物模型屬于物理空間中的實體,在云端可以利用數字化的方式將工廠、樓宇、車載裝置、傳感器等表示出來,從事件、服務和屬性三個角度對實體的定義、功能、價值做出描述。
3.2 設備狀態管理設計
請求處理訂閱、推動和取消訂閱等業務、使用系統完成其他類型業務的時候,必須要以長期構建穩定的系統和物聯網設備連接作為基礎。當設備處于運行環節中,將會憑借與系統搭建完成的聯系將合法的信息傳輸到系統中,并且還會建立合法的連接實現請求的發送與接收。在上述環節中,系統首先會詳細地驗證與處理MQTT協議版本的信息,同時以處理得到的結果作為依據,應用設備認證接口系統性的驗證和處理設備的身份信息,利用合理的分析結果和處理數據,科學化地規避非法設備在連接過程中出現的不良現象[8]。
倘若系統處于運行的時候伴隨著clientid會話信息的出現,按照系統的服務需求要將建立完成的clientid連接斷開,同時還應該徹底清理之前的會話信息,釋放出服務器資源,建立完成與之前請求的連接。若是設備在運行的時候出現離線消息,憑借MQTT協議還能夠實現離線消息推動。
與Redis存儲會話數據的優勢和系統開發進行結合,選擇應用Redis完成Session信息存儲架構設計。所有的客戶端在與系統進行連接的時候,按照系統的服務要求,必須要設計、構建并使用具有唯一性的客戶端標識,以標識作為基礎區別化地處理在系統中的全部連接。在全部的服務器內部完成連接信息和設備標識的對應關系存儲,其中連接信息主要包含有MQTT協議的Netty中上下文信息、Clean Session標志位信息等。
3.3 消息路由模塊設計
HBase本身不會為系統提供消息列隊功能,但是在實際應用期間可以憑借其所具有的特性將虛擬隊列的概念予以實現。在離線信息接收模塊設計期間,需要為所有的客戶端完成唯一ID分配,由此可保證組合單調遞增ID和QUEUE ID形具有唯一性的Roekey。與此同時,為了確保能夠均勻地寫入,規避出現任何數據熱點方面的問題,與設計優化Rowkey原理進行結合,對唯一的ID前綴做出合理的設計,在不同的Region中均勻地分布完成Rowkey。
為了確保有序地寫入消息,需要將唯一的ID分配給所有設備所有離線消息,例如設備sitech第208條信息分配的ID為sitech_208。以批量的方式寫入消息,首先要使用枷鎖操作對每個隊列做出處理,其次為所有的消息分配ID,在HBase中寫入離線消息,隨后將所有隊列的鎖釋放。這種方法在實際應用期間可以確保多個服務節點在并發地將寫入的消息傳輸到設備離線消息隊列的時候不再出現數據方面的沖突[9]。
當QoS為0的時候,消息在進行分發的時候需要以基層網絡能力作為依據,但是信息的發布人員只能夠發布一次消息,并且信息的接收人員不能對接收的信息進行回答,信息的發布人員不會存儲信息,也不會再次發布。當QoS為1的時候,可以確保消息至少可以發送一次,利用簡單的ACK機制將消息系統保證QoS 1。此時,設備在傳輸各類信息的過程中,將會等待PUBACK報文的影帶,倘若設備在規定的時間范圍內沒有接收到PUBACK報文的回答,此時設備將會將信息的DUP設置為1,并且將消息重新發送。當QoS為2的時候,消息的訂閱者和發布者可以利用兩次會話的機會保證消息完成一次傳輸,這種方法是MQTT協議里面消息質量等級最高的[10]。
結語
物聯網發展是以物聯網網絡通信技術為基礎而實現的。隨著物聯網應用和物聯網技術的發展,物與物之間的數據信息傳輸已經難以滿足系統中網絡數據傳輸需求,越來越多的應用系統需要實現文件數據傳輸。本文基于MQTT協議,分析該協議的特點和應用原理,與文件傳輸需求相結合,思考基于MQTT協議的物聯網文件傳輸系統設計要點,為相關研究人員提供理論和實踐參考。
參考文獻:
[1]呂元,夏振華,肖一帆.基于MQTT的2物聯網終端的PLC遠程工業監控[J].電腦知識與技術:學術交流,2022,18 (10):113-115.
[2]郭翠娟,暴寧,榮鋒.基于MQTT的物聯網平臺研究與設計[J].計算機工程與設計, 2022,43(8):2378-2384.
[3]沈剛華.基于MQTT物聯網協議的室內小區自動化監測系統[J].通信電源技術,2022, 39(3):5.
[4]陳文藝,梁寧寧,楊輝.基于MQTT的物聯網網關雙向通信系統設計[J].傳感器與微系統, 2022,41(8):100-103.
[5]葉康林,鐘瑾瑞,焦冠文,等.基于MQTT協議的生產實時數據傳輸技術應用研究[J].信息系統工程,2021,(11):65-68.
[6]林楷焱,鐘俊健,陶銘.基于物聯網技術的智能停車場系統設計與實現[J].物聯網技術, 2022,12(6):93-95.
[7]施昕昕,顧宇揚.基于MQTT協議的工業物聯網數據采集和控制系統[J].南京工程學院學報:自然科學版,2022,20(2):31-37.
[8]張狀狀,蔣偉,胡靜,等.MQTT大塊數據安全傳輸方案的設計與實現[J].信息與電腦, 2022, 34(9):218-222.
[9]Clissa Luca,Lassnig Mario,Rinaldi Lorenzo.Analyzing WLCG File Transfer Errors Through Machine Learning[J].Computing and Software for Big Science,2022,6(1):19-20.
[10]曾灶榮,陳德基,肖楊.基于區塊鏈和MQTT的物聯網通信協議[J].電子技術(上海),2022,51(5):15-19.
作者簡介:張朝蘭,本科,副教授,研究方向:電子信息和電氣控制類教育教學與項目管理;姜孝均,本科,副教授,研究方向:電子信息和電氣控制類教育教學與項目管理;易大江,本科,高級工程師,研究方向:軟件物聯網通信項目開發及管理。
基金項目:物聯網電梯應急救援系統應用研究(編號:遵市科合HZ字〔2022〕38號);遵義市配電智能運維創新人才團隊(編號:遵市科人才〔2022〕4號)。