鄭鵬怡 張振國 袁戰軍
(陜西國際商貿學院信息與工程學院 陜西 西安 712046)
隨著計算機技術的發展,現有的計算機分布式系統應用要求中間件具有實時性。實時中間件可以為大規模新型應用系統提供數據通信的平臺,在滿足數據交互及時性和正確性的同時,為應用開發提供統一的接口,使得開發人員不用考慮底層通信的實現,把更多的精力投入到應用邏輯方面,提高了開發效率,縮短了開發時間。
傳統中間件主要側重于解決異構和分布情況下的復雜問題,系統的實現細節通過抽象的方式隱藏了起來,形成了一個典型的黑箱結構[1]。它為分布式實時系統提供了開發簡單、可互操作性、靈活性、可維護性、可重用性等優勢,但卻并不適用于具有嚴格時限的應用,缺乏對實時性的支持[2]。因此,利用基于發布訂閱機制的實時中間件構筑分布式實時系統,可以降低軟件開發的費用,提高應用的可互操作性、可重用性、可擴展性、可維護性以及時間可預測性[3]。它為軟件的體系結構注入了新鮮的活力,簡化了應用程序的開發復雜性,促使軟件生產的產業化,使跨企業的分布式應用得到了推廣。
與當前通用發布訂閱中間件相比,本文采用RTX(Real Time eXtention)操作系統與RT-TCP/IP協議來保證數據處理和數據傳輸的實時性,確保提出的中間件具有較強的實時性能,可滿足分布式實時應用的需求。另外,本文基于分布式對象的發布訂閱機制將中間件的通信方式由消息封裝成類,通過對象的訪問接口實現互操作功能,結構清晰,使用方便,具有獨立性、可靠性、繼承性等優勢,更加便于中間件的實現與應用。
在分布式系統中,實時中間件可以解決異構環境下應用交互和數據傳遞,也可以實現分布式應用跨平臺互操作。同時,還可以保證分布式系統在限定的時間內完成對外部事件的響應和任務執行,提高數據傳輸的實時性、可重用性及可擴展性[4]。要想完成對以上功能的實現,需要完成以下三個方面的內容。
支持基于分布式對象的數據同步是實時中間件的一個核心功能。該功能用例是當發布端更新一個對象時,發布端對象對本地對象進行更新,中間件自發地完成對象狀態的同步到代理[5],訂閱端從代理中獲得更新后的狀態數據[6]。
基于以太網的發布訂閱通信機制可以提高實時中間件的可重用性和可擴展性,提高分布式應用開發的效率和性能[7]。該功能用例為發布端公布發布興趣[8],訂閱端公布訂閱興趣,中間件進行興趣匹配,建立連接。接著發布端發布狀態數據,中間件通過同步功能完成在訂閱端的更新,當訂閱端獲取狀態數據接口時,獲取相應的數據[9]。
發布訂閱實時中間件要為分布式實時應用的時間可預測性提供使能機制及服務,還要為應用提供表達時間約束和特性的手段,并提供多種粒度的實時控制機制,使應用能夠調節中間件的各個處理環節,從而為應用任務提供某種程度的時間可預測性[10]。該功能用例為發布端和訂閱端分別采用QoS(Quality of Service)接口,設置實時性要求,中間件對發布端和訂閱端所設置的實時性要求進行綜合,生成狀態數據的優先級,中間件根據優先級進行狀態數據的更新,完成狀態對象的實時分發。
另外,對于性能需求也有要求,如果分布式對象的大小在1 024字節以內,中間件的更新延遲應在1毫秒以下。
根據發布訂閱實時中間件的功能需求,采用基于分布式對象的數據同步技術、基于以太網的發布訂閱通信技術及基于分布式的實時性能保障技術設計實現了基于發布訂閱機制的實時中間件。
整個中間件的設計采用分層的設計思想,其軟件體系結構抽象為三層:模型層、通信層與支撐層,如圖1所示。模型層主要實現分布式對象的數據同步功能,通信層主要實現基于以太網的發布訂閱機制,支撐層主要實現基于分布式對象的實時性能保障機制。中間件的各功能模塊之間達到高內聚低耦合,使得實時中間件的業務邏輯能夠更清晰的體現。

圖1 中間件軟件體系結構圖
中間件模型層通過設置訂閱端代理對象與發布端伺服對象建立連接并維護兩者之間的會話關系[11],為分布式應用系統中的狀態對象(SO)提供狀態同步調用功能。通過訂閱端代理對象與發布端伺服進行狀態對象信息的傳遞,使對象之間相互協作,如圖2所示。模型層維護了本地代理對象與遠端對象之間的會話關系,使得本地代理對象能夠通過回調機制,感知遠端伺服對象連接、遠端伺服對象狀態更新以及遠端伺服對象撤銷。同時,在模型層中還對需要傳輸的數據進行序列化及反序列化處理,使得中間件底層通信不需要關心數據的格式,只需按照要求的傳輸方式完成傳輸即可。

圖2 模型層流程圖
具體實現為:首先通過發布端的對象維護的發布者組件將伺服對象執行狀態更新命令后的狀態信息發送出去;然后訂閱端接收到狀態信息后,查看是否有對應的代理工廠,如果沒有則由交互對象創建代理工廠,之后獲取指定的代理工廠對象,由代理工廠查看該對象的代理是否已經創建,如果沒有則根據狀態所屬對象創建指定的代理對象并獲取。
中間件通信層為模型層提供基于主題的發布訂閱通信服務,屏蔽底層傳輸細節,實現發布訂閱通信機制,并提供QoS設置,保證狀態對象處理的實時性。通信層設計為通信組件模塊和傳輸組件模塊。通信組件模塊為中間件模型層提供了統一的通信接口,并完成了發布者組件和訂閱者組件[12],使發布端的發布者和訂閱端的訂閱者能夠建立連接,進行通信。傳輸組件模塊提供了TCP傳輸組件和UDP傳輸組件,保障了數據流的可靠與盡力而為傳輸。
具體實現為首先要由主題信息匹配來確定通信雙方,其次要根據通信雙方所在節點的IP地址和端口信息來建立連接[13]。因此中間件通信層設計了主題通道服務器來為各個節點提供主題信息的分發服務[14],如圖3所示。主題是通信雙方建立連接的唯一標識,發布端和訂閱端在啟動時,都會向主題通道服務器公告帶有自身位置信息(IP和端口)的主題,之后由主題通道服務器分發至其他各個節點,應用程序在本地進行主題匹配,選擇是否建立連接。

圖3 通信層流程圖
連接建立之后,可以進行數據收發。發布者維護了與每一個訂閱者之間的連接,中間件通信層提供數據廣播通信機制,使發布者能夠將狀態數據流廣播到與之連接的所有訂閱者。從而達到發布訂閱通信服務。
中間件支撐層主要為實時中間件的通信對象提供節點級和節點間的實時性能保障機制。目前流行的操作系統(Windows、Linux等)在任務調度、定時精度都缺乏實時性的保障,需要進行實時性能擴展和改進[15]。中間件信息通信的實時性需要從運行管理、調度與通信等方面進行保障。
為了提供實時性通信機制,運行支撐層采用RTX操作系統和RT-TCP/IP協議完成數據傳輸,既避免了系統其他任務對中間件任務的干擾,又保障了中間件數據傳遞的及時性與準確性。
RTX操作系統實現整個實時性的關鍵點在于接管Windows的硬件抽象層(HAL),實現中斷管理,實現更快的定時器服務,縮減中斷延遲等。
如圖4所示,采用RTX操作系統為中間件進行支撐,可以使實時中間件的應用程序調用專用的實時API[16],進而利用RTX系統的任務管理和通信管理,實現實時中間件的通信對象節點級和節點間的實時性保障。

圖4 RTX操作系統對Windows系統的實時擴展
支撐層采用RTX實時操作系統,完成實時任務管理,從操作系統層面上克服非實時任務對中間件實時任務的干擾,斷絕內外部中斷對中間件實時任務的影響,并提供高精度的、供實時任務線程使用的定時與同步機制。
利用構建的實驗仿真場景在不同網絡負載和CPU負載下與現存的TAO中間件進行對比 ,說明本文研究的中間件(RTM)的實時性。測試場景如圖5所示,構建了基于發布訂閱實時中間件的應用集群,模擬了虛擬實驗中紅藍雙方相互獲取飛機位置信息的簡單應用場景。其中紅藍雙方雷達程序訂閱對方飛機應用的信息,而主控節點負責實時獲取所有飛機信息并顯示,評估節點在實驗結束后,完成對本次實驗的評估工作。

圖5 測試場景部署圖
從實驗場景的運行結果中可以發現,本文研究的RTM實時中間件提供了基于分布式對象的數據同步功能、基于以太網的發布訂閱通信機制和基于分布式對象的實時性能保障機制,取得了預期的效果。
另外,在上述環境中,采用乒乓法測試了TAO中間件和本文研究的RTM中間件在CPU負載和網絡負載情況下的更新延遲,測試結果如圖6、圖7所示。

圖6 不同CPU負載下的測試結果

圖7 空負載和網絡負載測試結果
在圖6中,當CPU負載為0,數據包大小為2 048字節時,本文提出的RTM中間件的延遲為820.81微秒,而此時TAO的傳輸延遲為1 395.49微秒,是RTM中間件的1.7倍。當CPU負載變為75%時,TAO的傳輸延遲為1 998.63微秒,而RTM中間件的延遲依然為820.81微秒,說明RTM中間件的延遲小,并且受CPU負載影響小。同樣,在圖7中,在數據包大小為2 048字節,網絡負載由空變為有負載時,TAO中間件的傳輸延遲由1 395.49微秒變為2 198.7微秒,而RTM中間件的延遲由820.81微秒變為983.34微秒,變化范圍小,顯示出RTM中間件的穩定性。
從圖6和圖7可以看出RTM實時中間件在相同情況下,都比TAO中間件的更新延遲小,并且在狀態對象在1 024字節以內時,不論當前系統內的CPU負載和網絡負載,中間件的更新延遲都在1毫秒以下,達到了預期的效果。
本文針對分布式應用對通信的實時性需求,利用分布式對象技術和實時性能保障技術,設計并實現了一個基于發布訂閱機制的實時中間件,支持了服務質量,確保了數據交互的實時性。然而,本文提出的中間件服務單一,功能不夠完備,在后續工作中需要進一步完善。一方面需要逐步添加中間件的各類服務,包括時間管理、域管理服務等,使中間件在支持實時發布訂閱機制的同時,滿足應用程序對時間的要求,提供對中間件中消息和會話域的管理。另一方面需要對中間件的功能進行擴展,使中間件通信層支持其他實時網絡協議,為用戶提供更豐富的網絡環境選擇,更好地滿足分布式應用的需求。
[1] 王旻珉.DRE系統中間件的研究與設計[D].上海:同濟大學,2007.
[2] Belokosztolszki A, Eyers D M, Pietzuch P R, et al. Role-based access control for publish/subscribe middleware architectures[C]//Proceedings of the 2nd International Workshop on Distributed Event-Based Systems, DEBS 2003, Sunday, June 8th, 2003, San Diego, California, USA. 2003:1-8.
[3] 樊留群, 馬玉敏. 開放式控制器的實時中間件[J]. 計算機工程, 2008, 34(3):272-273,282.
[4] 胡靜, 宋雪雁, 孫濟洲. 航行通告分發服務中間件的研究與設計[J]. 計算機應用與軟件, 2016,33(2):7-11,41.
[5] Park J, Joe I, Kim W T. An Efficient Discovery Protocol of Large-Scale CPS Middleware for Real-Time Control System[J]. Studies in Informatics & Control, 2014, 23(1):23-30.
[6] 朱華勇.分布式系統實時發布/訂閱數據分發技術[M].北京:國防工業出版社,2013.
[7] Antonic A, Roankovic K, Marjanovic M, et al. A Mobile Crowdsensing Ecosystem Enabled by a Cloud-Based Publish/Subscribe Middleware[C]//International Conference on Future Internet of Things and Cloud. IEEE, 2014:107-114.
[8] Loser K, Delic E, Schreiber M, et al. The benefits of middleware for safety-related systems-on-chip[C]//International Symposium on Fundamentals of Electrical Engineering. IEEE, 2015:1-5.
[9] Caporuscio M, Marco A D, Inverardi P. Run-time performance management of the Siena publish/subscribe middleware[C]//International Workshop on Software and PERFORMANCE. ACM, 2005:65-74.
[10] Ren H, Gao Y. A Study on the Distributed Real-time System Middleware Based on the DDS [M].Springer Berlin Heidelberg,2013:1-6.
[11] 冒佳明.基于DDS的分布式系統的性能評估模型研究與實現[D].南京:東南大學,2015.
[12] 屈志堅, 林宏平. 基于發布訂閱的分布式監控主動消息交互研究[J]. 計算機測量與控制, 2015, 23(2):529-532.
[13] 鄒軒.移動互聯網跨平臺應用中間件的研究[D].上海:復旦大學,2013.
[14] 胡文瀟.東航中間件移動應用平臺設計及安全性研究[D].上海:上海交通大學,2013.
[15] 于潤勝.發布訂閱網絡中的緩存機制研究[D].上海:上海交通大學,2014.
[16] 杜旭東,蔣澤軍,王麗芳.基于資源重分配的Windows實時性改造[J].微電子學與計算機,2012,29(5):95-98.