諶建飛,鄧 敏,唐俊龍,文勇軍 ,唐立軍
1.長沙理工大學 物理與電子科學學院,長沙 410114
2.近地空間電磁環境監測與建模湖南省普通高校重點實驗室,長沙 410114
遠程實驗是一種自動化遠程交互控制的全實物新型實驗模式,具有真實儀器控制、網絡在線操作和實驗資源共享等特點[1-2]。近年來,隨著網絡通信技術的發展,基于互聯網的遠程實驗受到越來越多人們的關注,各大高校紛紛建立了自己的遠程實驗平臺,開展了物理、化工、機械、電氣等專業課程的實驗應用[3-5],有效促進了實驗資源的共享和教學能力的提高。目前,對遠程實驗的研究工作主要注重在實驗平臺與實驗應用的開發上,因缺乏實時可靠消息傳輸、通信安全控制以及應對大規模實驗儀器與用戶并發訪問的能力,導致不能全方位對外開放[6-8]。

圖1 遠程實驗通信方案
隨著消息隊列遙測傳輸技術(Message Queuing Telemetry Transport,MQTT[9])在智能家居、智能物流、地質災害預警和工業遠程監控中的成功應用,為開放式遠程實驗的通信研究開辟了新思路。MQTT是由IBM公司于1999年開發的即時通訊協議,并于2014年成為推薦的物聯網傳輸協議標準,采用“發布/訂閱”模式,具有輕量級、快速、低延時、可擴展等特點[10]。與XMPP、SIMPLE協議相比,MQTT專門針對傳感器網絡優化設計,具有更小的通信開銷,能夠有效節省控制器的計算資源和流量,承載海量終端信息傳輸,提高通信的實時性和可靠性[11-12]。目前,基于MQTT的開源服務器實現主要有Mosquitto、HiveMQ和EMQ[13]等,EMQ基于高并發Erlang/OTP語言平臺設計,支持MQTT-SN[14]與Web-Socket協議和分布式集群部署,具有更強的并發性能,能夠承載物聯網終端的海量MQTT并發連接,成為遠程實驗通信的可靠選擇。
因此,本文以MQTT為核心,從實驗儀器與用戶并發訪問、實時可靠消息傳輸、網絡安全控制和儀器安全保障四方面開展研究,探索一種能夠實時連接大規模傳感器網絡并適用于高并發訪問的遠程實驗通信方案,為遠程實驗的對外開放和實驗通信技術的發展提供參考依據。
遠程實驗平臺對外開放需要解決并發性、實時性、可靠性和安全性問題,其通信系統需要滿足以下需求:(1)通信并發連接數達到百萬級,每秒消息傳輸能力不低于50 000條;(2)通信時延小于300 ms,消息傳輸成功率大于98%;(3)提供通信服務質量和消息順序控制保證;(4)建立用戶實名制訪問,儀器授權管理和實驗數據安全傳輸;(5)提供通信失效儀器安全保護和通信自愈。
根據以上分析,選擇MQTT技術來構建遠程實驗通信網絡。方案設計如圖1所示。系統從結構上分為儀器控制端、Web用戶端和通信服務中心。儀器控制端由實驗儀器、傳感器、致動器和控制器組成,Web用戶端由HTML5、WebSocket和教育電子身份號(E2ID)技術[15]支持,通信服務中心由通信服務器、數據庫服務器和應用服務器組成。
通過搭建基于MQTT的EMQ消息推送服務器集群來解決遠程實驗通信的并發性能問題;結合嵌入式和WebSocket技術來解決實驗儀器的接入和Web用戶的訪問問題;結合SSL/TLS和E2ID技術來解決遠程實驗通信的網絡安全控制問題;結合MQTT的通信服務質量保證機制并設計消息順序控制機制來確保消息的實時可靠傳輸;結合MQTT的遺囑機制設計儀器安全保障與通信自愈機制來解決通信失效和實驗儀器的安全保障問題。方案中將通信與實驗業務邏輯分離,解除應用程序耦合,使通信設計靈活獨立,易于擴展,并可根據需求提升通信處理能力。
實驗儀器在傳感器、致動器和控制器的協調控制下完成實驗操控和數據采集。大規模的實驗儀器借助于嵌入式設備進行網絡接入,而用戶通過Web進行高并發訪問,對實驗通信性能提出了不小的挑戰。通過進行EMQ集群設計、通信話題設計和儀器與用戶接入優化設計來解決實驗儀器與用戶并發訪問問題。
3.1.1EMQ集群設計
為使通信并發連接能力達到百萬級且每秒消息傳輸能力不低于50 000條,采用構建分布式通信集群的方法解決該問題,設計方案如圖2所示。

圖2 EMQ通信集群方案
EMQ服務器單節點在8核28 GB系統配置下,SSL單向認證穩定連接數在20~25萬,每秒消息傳輸能力不低于2萬條[13],因此集群規模設計根據實驗通信需求和單節點性能選用5較為合適。各節點之間采用EMQ自身提供的基于靜態節點列表自動集群創建方法,在EMQ配置文件中配置需要加入集群的各節點名“Name@Host”,Host為IP地址或FQDN(主機名、域名),在EMQ集群啟動時,系統根據配置文件中的節點列表,依次將各節點連接到集群,實現系統互聯與路由共享。在集群的外部添加Azure負載均衡服務器,使用5元組哈希(包括源IP、源端口、目標IP、目標端口和協議類型)分發策略將流量映射到各可用EMQ服務器上。在Azure負載均衡器上,采用動態探測與最小連接數優先算法,通過對集群各節點監聽端口進行偵聽,如果響應正常,則再根據各節點建立的連接數統計,選用具有最小連接數的節點建立通信,實現動態負載均衡。當多次偵聽響應失敗時,停止向該節點發起通信連接。
EMQ集群的設計方案能有效提高通信的并發處理能力,實現動態擴容,并解決服務器單點故障問題。
3.1.2 通信話題設計
MQTT基于話題進行消息路由,為確保每組實驗儀器與用戶間通信的獨立性,通信話題采用層次化功能劃分設計,具體如下:“commun/{institution_id}/{device_id}/{function}”。“commun”表示實驗通信業務的最高級與其他實驗業務區分;“{institution_id}”表示實驗儀器所在的單位或機構的唯一標識;“{device_id}”表示具體實驗儀器的唯一標識;“{function}”表示功能分類,包含“status”“operation”“data”,分別用于儀器的狀態監控、操作控制和實驗數據分發。
3.1.3 儀器與用戶接入優化設計
實驗儀器與Web用戶的接入直接關系到遠程實驗通信性能與交互效率。當前大多實驗平臺采用Socket和Ajax輪詢通信方案,需要自下向上對通信交換協議進行設計,并存在資源消耗過大問題。MQTT已經針對物聯網做了大量的優化工作,將協議交換最小化,報文結構緊湊,最小報文長度只有2字節,因此采用MQTT來優化儀器與用戶接入,以實現嵌入式設備和Web端的計算資源優化并降低網絡流量。
實驗儀器與用戶都通過MQTT消息通信模塊進行網絡接入,MQTT消息通信模塊包含通信連接建立、心跳維持、消息發送與消息接收功能。在儀器控制端構建MQTT通信網關,傳感器與致動器通過I/O口、串口或無線模塊與控制器連接,向上通過基于TCP的MQTT與EMQ集群通信,對不支持TCP/IP協議棧的設備使用MQTT-SN,該方法能有效降低控制器資源消耗與網絡流量。Web用戶端采用基于WebSocket技術的MQTT與EMQ集群相連,實現用戶的接入,WebSocket可以建立服務器與瀏覽器之間的持久化通信連接,與Ajax輪詢相比能大幅減少Web端的網絡流量與通信時延。
“低延時、高可靠”對實驗操作體驗至關重要,以往的遠程實驗缺乏相應的通信服務質量保證。另外,MQTT只提供了簡單的消息順序控制,在網絡不穩定的情況下連續發送多個消息時,雖然能保證消息的可靠傳輸,但并不能很好的保證消息的順序接收。因此,通過利用MQTT的通信服務質量保證和消息順序控制機制來確保消息的實時可靠傳輸。
3.2.1 通信服務質量保證設計
根據實驗數據傳輸要求與網絡狀態,MQTT提供三種不同的通信服務質量保證,分別為QoS0盡力而為、QoS1至少一次、QoS2恰好一次,針對這三種通信服務質量對實驗通信的消息傳輸進行控制。對于實驗中單次數據丟失不會影響實驗結果的情況,采用QoS0傳輸消息,消息發送者只管發送消息,不確認消息的丟失,用于實驗環境監測數據采集;對于必需可靠傳達,但收到重復的消息也不受影響的情況,采用QoS1傳輸消息,消息接收者如果沒有知會或者知會本身丟失,消息發送者會再次發送以保證消息接收者至少會收到一次,用于實驗儀器的狀態數據傳輸;對于消息的丟失和重復會造成實驗出錯的情況,采用QoS2傳輸消息,可確保接收者收到且只收到一次該消息,用于實驗參數調節與儀器的交互控制。
3.2.2消息順序控制設計
為了確保消息的順序控制,對同一會話下的所有消息添加消息序號管理。實驗儀器和用戶在建立連接時初始化并同步各自消息的序號,發送端在發送消息時對消息進行編序,并暫時保存當前信息。接收端對接收到的消息序列號進行檢查,通過對比上一條消息的序列號,確認兩條信息之間是否有消息缺失。如果發現有消息缺失,則暫存這條消息等待缺失消息的到來,當缺失的消息被接收處理后,再讀取該消息。如果等待超時,則發送一條訪問缺失消息的命令給發送端,讓發送端重新發送該消息,從而確保消息順序控制,控制流程如圖3所示。
當前遠程實驗系統僅采用簡易的匿名認證和明文數據傳輸方法,沒有進行有效的網絡安全防護。通過研究傳輸層和應用層的網絡安全設計,來解決實驗通信的網絡安全問題。
3.3.1 傳輸層網絡安全設計
傳輸層采用SSL/TLS協議實現MQTT通信的安全認證與數據加密,SSL/TLS協議采用證書進行身份校驗并對數據加密,能確保所有信息的完整性和加密傳輸。考慮用戶數量眾多和效率問題,采用SSL單向認證的方式。基于SSL/TLS協議的網絡安全設計包含證書與密鑰文件生成、證書與密鑰文件配置和通信驗證。證書文件由Openssl軟件生成,首先生成CA文件,再由該文件為服務器和客戶端簽發各自的私鑰文件和證書文件。將生成的文件拷貝到EMQ通信服務器和客戶端上,配置相應的SSL安全選項,最后建立安全加密的通信連接。

圖3 消息順序控制
3.3.2 應用層網絡安全設計
應用層采用基于E2ID實名制技術來確保對用戶的實名認證和安全控制,同時設計用戶訪問控制(ACL)機制來實現對儀器操作的授權管理。
E2ID是由單位代碼、居民身份證號碼等經過特定算法生成的唯一標識碼,用作用戶身份認證以及網絡實名制的標識,具有較強安全性,目前已有近千萬個在線用戶[16]。在用戶創建時通過調用E2ID認證接口,提交用戶真實身份信息和E2ID進行實名驗證,實現對用戶的有效控制。
EMQ采用基于話題(Topic)訂閱的訪問權限控制機制,并提供基于MongoDB方式的實現。將EMQ集群所有節點連接到同一個MongoDB數據庫(大規模布置時可考慮MongoDB集群),在MongoDB的mqtt數據庫中創建mqtt_user和mqtt_acl表,用于存儲用戶和訪問控制的信息。用戶在預約實驗時創建訪問控制信息,獲取儀器的操作權限,在實驗操作結束后失去該權限。在EMQ監控與認證應用中設計訪問EMQ用戶信息和訪問控制管理服務API,用于動態管理用戶及其訪問控制權限。用戶實名認證與訪問控制流程如圖4所示。
當實驗操作過程中發生通信服務器宕機,用戶與儀器異常掉線或儀器運作超出安全控制,將致使儀器失去控制,造成儀器損壞。因此系統必需具備及時下達安全控制指令,阻止安全事故發生,并能自動切換通信連接、嘗試通信自愈和故障報警功能。
3.4.1 儀器安全保護設計
針對實驗通信失效的安全問題,對實驗儀器進行三層保護設計。
(1)建立遺囑消息保護機制。遠程實驗是由用戶對儀器的“一對一”操作,用戶獲取到儀器訪問權限后,與EMQ集群通信系統建立連接時,設立遺囑消息(willM-essage),willMessage由topic、payload、QoS和 retain組成,分別表示遺囑消息主題、消息內容、通信服務質量和是否駐留服務器以備后來訂閱者可以接收該消息,topic由實驗儀器訂閱,payload為緊急停止實驗儀器命令,QoS等級為QoS1,retain為false表示不駐留。當已經建立連接的Web用戶端異常斷線時,通信服務器能夠主動檢測到并將該遺囑消息發送給實驗儀器控制器,及時停止實驗儀器。當用戶再次建立連接時,實驗儀器可以重新被啟用。
(2)建立通信連接檢測機制。在儀器控制器上設計MQTT通信連接斷開檢測處理事件,該事件基于MQTT的心跳機制進行實現。MQTT客戶端建立連接后會周期性(60 s)發送一個心跳包給服務器,服務器收到該心跳包后返回一個響應,客戶在規定時間內收到響應則認為當前通信連接正常。當客戶端發送心跳包出現異常或在超出1.5倍心跳周期內仍未收到響應,則認為通信連接故障,此時觸發停止實驗儀器事件及時停止實驗儀器,然后嘗試重新建立通信連接。當通信連接重建失敗時,在本地發出故障報警信息。

圖4 用戶認證與訪問控制過程
(3)建立實驗安全閾值管理。遠程實驗的儀器操作中存在較多的轉動、加熱和位移控制等。在通信失效儀器未能及時停止時,將直接或間接的影響儀器安全。在儀器控制器上設計實驗安全閾值管理事件,該事件包含3個參數(上限值、下限值和輸入值),輸入值為需要進行安全閾值檢測的數據,上限值和下限值是對該數據的閾值設定。當輸入值低于安全閾值范圍的10%或高于安全閾值范圍的90%時,該事件給出警告提示,當超出安全閾值范圍時,觸發停止實驗儀器并發出報警信息。實驗工作安全閾值管理的數據,根據實驗運作和影響儀器安全的數據關鍵性進行選取。
3.4.2 通信自愈機制設計
通信自愈機制由MQTT消息通信、負載均衡節點信息表、通信狀態存儲、故障處理模塊組成。運行流程如圖5所示。
在建立通信連接時,向EMQ監控與認證應用請求當前系統中可用的負載均衡節點信息并保存到本地,隨機選取一個節點建立通信。當通信發生連接中斷時,先進行重連,如果不成功則調用通信自愈機制,保存當前通信狀態,讀取其他節點進行通信連接;如果連接成功,則重新讀回通信狀態,否則再次讀取其他節點信息,進行通信連接。當所有節點都不可用時,在本地發通信故障報警信息。

圖5 通信自愈運行流程
按照設計方案在微軟Azure云計算平臺上搭建遠程實驗通信系統。EMQ集群規模大小為5,每個通信節點服務器配置為8核28 GB的Ubuntu 16.04.3-LTS,同時配置2個負載均衡器,1個MongoDB數據庫和1個EMQ監控與認證應用服務器,并完成相關軟件部署。系統部署完后啟動EMQ服務并開啟MQTT:SSL,MQTT:WSS端口監聽。將實驗通信的Web用戶端功能集成到遠程實驗平臺[8]。實驗儀器為已經在遠程實驗平臺開發使用的邁克爾遜干涉儀、等厚干涉儀和聲速測量儀等,儀器控制器采用基于ARM處理器的樹莓派,實驗儀器通過樹莓派連接到通信系統。
針對開放式遠程實驗通信需求,主要對系統的并發、消息傳輸和安全可靠性能進行測試。并發性能通過模擬大規模用戶在線訪問,對通信服務器性能和響應時間進行實時監測的方法進行測試。消息傳輸性能通過給系統施加不同通信壓力,然后測量不同消息負載和不同通信服務質量下的消息傳輸時延的方法進行測試。安全可靠性能通過進行相關實驗操作,實時查看實驗操作效果并對通信數據進行抓包分析的方法進行測試。
測試機與實驗儀器位于實驗室環境,網絡帶寬為10 MB。測試機系統配置為4核8 GB的Windows 10,運行遠程實驗平臺Web應用軟件。測試中所需的用戶負載模擬與通信壓力生成由負載機組完成,機組規模為20,部署于微軟Azure云計算平臺,系統配置為4核14 GB的Ubuntu 16.04.3-LTS。
在用戶負載從1萬逐漸增加到100萬的情況下對系統進行并發性能測試,每秒新增負載連接數為1 000,采用SSL單向認證方式連接。測試步驟如下:(1)由負載機組以每秒1 000條的速率向系統發起通信連接;(2)通過系統性能監測軟件對集群中單個服務器節點的CPU占用率、內存使用情況進行實時監控;(3)采用軟件計時方式測量通信連接的響應時間,并統計連接成功數;(4)對負載不斷增長的1萬、25萬、50萬、75萬、100萬階段隨機抽取不少于200組數據進行統計分析。測試結果如表1所示。

表1 并發性能測試
由表1可知,隨著用戶連接數增多,內存占用率增大,而CPU占用率、平均響應時間略有增加,但變化不太明顯。系統在與測試機開始建立連接的小段時間內,CPU占用率會迅速增長達到峰值,隨后不斷有所降低,并且CPU占用率與設定的每秒新增負載連接數大小相關,每秒新增負載連接數越大,CPU占用率越大。此外,在設置不重連的情況下,多次測試的連接成功率都達到了100%,從測試的結果來看,系統各項資源使用基本正常,基于SSL單向認證確保了系統安全,在用戶高并發訪問的環境下,系統仍具有較好的性能。
在10萬、50萬和100萬高負載背景用戶連接的情況下,分別對每個通信服務器節點設定1萬用戶以1條/s的速率發送消息給其他用戶,用于給系統施加每秒傳輸5萬消息的通信壓力。然后測量遠程實驗平臺Web用戶端與儀器控制端之間兩種不同負載大小(256 Byte、1 KB)消息傳輸時延和系統資源消耗。測試步驟如下:(1)由負載測試機組依次生成10萬、50萬和100萬背景用戶連接與5萬的通信壓力;(2)在本地測試機依次進行256 Byte、1 KB大小消息在QoS0、Qos1和QoS2下的消息傳輸;(3)采用系統性能監測軟件對集群中單個服務器節點的CPU占用率、內存使用情況進行實時監控;(4)采用軟件計時方式對18種不同情況下的消息傳輸時延進行統計分析,每組測試數據不少于200條。測試結果如表2所示。

表2 消息傳輸性能測試
由表2可知,消息負載大小對消息傳輸時延略有增加,但變化不太明顯;背景用戶連接數的增加除了會消耗更多的內存外,對系統性能影響較小;針對不同的通信服務質量,消息傳輸時延有明顯的不同。此外,在當前測試的通信壓力情況下,消息傳輸成功率都達到了100%,可以滿足遠程實驗的通信需要。在未來隨著系統消息吞吐量的增大,當CPU或內存占用率接近滿載的時候,消息傳輸時延會迅速增長,此時可以通過采取集群擴容的方法分擔系統壓力,提高系統性能。
采用黑盒測試方法對系統的通信安全控制、可靠消息傳輸和儀器安全保障等性能進行測試。測試時,按照測試用例在遠程實驗平臺進行用戶注冊登錄、儀器訪問和抓包分析;模擬不同順序消息在不同通信服務質量下的消息傳輸,然后實時查看消息執行結果;另外,人工制造不同通信失效情況,觀察儀器保護情況。測試用例及結果如表3所示。

表3 安全可靠性能測試
采用E2ID實名認證方法和儀器操作授權管理機制有效確保了系統的用戶和儀器的安全控制;消息順序控制機制在網絡不穩定的情況下,提供除QoS0以外的消息順序控制,確保消息的有序傳輸;而儀器安全保障機制能在實驗操作過程中,及時檢測到網絡故障,下達停止實驗的控制指令,確保實驗儀器安全,同時具備嘗試通信自愈,恢復實驗通信的能力。
從實驗儀器與用戶并發訪問、實時可靠消息傳輸、網絡安全控制和儀器安全保障四方面研究了遠程實驗通信的并發性、實時性、可靠性和安全性問題,設計并實現了適用于全方位對外開放的遠程實驗通信方案。測試結果表明,該方案功能完善,并發能力強,實時好,可靠性高,安全性好,能有效滿足實驗應用的消息傳輸需求。