侯 玉 潘 昕 馮 源
(海軍工程大學電氣工程學院 武漢 430033)
在船舶分布式通信中,有多個分布的信息源,也有多個對這些信息源的信息感興趣的分布的網絡節點,構成異構的分布式網絡。現代信息化系統要求通信系統具備高效的信息傳輸效率,對信息的實時性、安全性要求很高,并且要求通信系統能夠在異構和相對惡劣的環境下穩定、可靠地傳輸[1]。
目前解決異構的分布式系統之間的互聯和互操作問題常采用中間件技術。中間件屏蔽掉了底層操作系統的復雜性,能使處于應用層中的各應用成分之間實現跨網絡的協同工作。中間件提供了兩類數據分發類型,即客戶端/服務器中間件和面向消息的中間件。而后者又包括消息隊列模式和發布者/訂閱者模型。對于現代船舶的分布式通信,要求某一節點上的變化和信息能夠及時地被其它相關的節點感知和獲取到,并及時做出響應。與其它的通信模式相比,發布/訂閱模式最大的優勢是實現了三個耦合:空間松耦合、時間松耦合及數據流松耦合,實現了船舶分布式通信中各通信實體的異步獨立性,它適合于船舶具有實時性、異步性、異構性、動態性和松耦合的應用要求。數據分發服務(Data Distribute Service,DDS)規范是對象管理組織OMG發布的第一個以實時數據中心思想的發布/訂閱通信模型,針對強實時系統進行了優化,提供低延遲、高吞吐量、以及對實時性能的控制級別,可以滿足復雜系統的實時和高速數據交換要求,實現分布式網絡環境下的動態組網和數據的按需多點分發[2]。
本文通過模擬一個監控端和一個船舶電力信息采集端之間的發送和實時接收消息,對比DDS和其它兩種高性能的消息傳遞中間件系統:ZeroMQ和Boost.Asio,測試基于三種規范的通信架構對數據傳輸的速率。
DDS規范定義了兩個層次的接口:DCPS層和DLRL層。DCPS層指以數據為中心的發布/訂閱層,它提供DDS的基本通信服務。DLRL指數據本地重構層,它位于DCPS層的上層,它是可選層,主要起抽象DCPS層服務的作用。在DDS的兩層中,核心是DCPS層[3]。DCPS層的主要結構如圖所示。
在DCPS層中,定義了包括發布者、數據寫入者、訂閱者、數據讀入者等對象。每個發布者至少有一個數據寫入者,數據寫入者完成數據類型的定義,發布者完成對該定義的數據發布,訂閱者和數據讀取者的關系類似。DCPS中還有兩個重要的概念即域與主題。域限定了通信范圍,發布方和訂閱方只有在同一個域中才能進行數據傳輸。主題則是訂閱和發布的關鍵,在建立關聯的過程中,發布方首先向中間件發送主題信息,訂閱方向中間件發送所需的或查詢特定的主題信息,中間件通過檢查兩者的主題是否相吻合,來確定是否建立發布方和訂閱方的連接,數據是否進行點對點的傳輸。在整個DDS的通信過程中,DCPS層還通過設置服務質量QoS,對數據傳輸進行相應設置[4]。DCPS結構如圖1所示。

圖1 DCPS體系結構
DDS是基于以數據為中心的數據分發技術,它并不適合于所有場合。但是對于船舶上采用的分布式通信,總結DDS具有以下優點:
1)處理復雜數據流能力較強。DDS通過控制Qos參數,可以將對可靠性、帶寬等不同要求的模塊集成到一個模塊中,可有利于構建綜合性系統。
2)低延時和高吞吐量。根據上文分析,DDS作為發布/訂閱模式的一種,沒有中心服務器的概念,與其它模式相比傳輸速度較快;另外,它可以把單個網絡分組同時發送給多個分布式結點,具有較高的吞吐量。
3)良好的容錯機制。DDS的體系結構決定了系統中沒有任何特殊的節點,添加或刪除某個節點,其他節點完全不會受到影響。
4)靈活的動態配置。DDS提供了快速位置透明性,能夠快速發現新的節點,節點上新的參與者和新的主題。
目前,在已有的DDS規范的實現中,RTI DDS軟件、OpenSplice DDS軟件以及OpenDDS軟件應用的范圍最為廣泛。其中,OpenDDS遵循實時系統v1.2的DDS規范和實時公布/訂閱互操作性通信協議v2.1的DDS-RTPS規范。
OpenDDS采用有中心體系結構,如圖2所示。在一個節點上運行守護程序,存儲用于管理數據和連接的控制信息,數據直接從發布者傳到訂閱者,但控制和初始化需要與該服務器通信。與其它兩種軟件相比,OpenDDS結構的優點是由于所有的控制信息都在一個節點上,實現和配置簡單,有效地減少用戶工作量[6]。

圖2 OpenDDS體系結構
常見的開源C/C++網絡庫包括ACE、Boost.Asio、libevent和libev等。其中,后兩者主要應用于Linux操作系統,在船舶通信中應用較少;而前兩種ACE、Boost.Asio均為跨平臺的網絡庫;Boost.Asio是一個輕量級的異步網絡庫,它具有簡潔、小巧、高效的特點,有良好的可擴展性;在設計上采用和Ace相似的Proactor設計模式,同時內置了對多線程的支持。另外,根據面向消息的兩種中間件分類,因為DDS屬于發布者/訂閱者模式,所以在另一種即模式消息隊列模式中,選擇其中實時性較好的ZeroMQ協議做測試。
本文中采用 OpenDDS、Boost.Asio、ZeroMQ三種協議進行實時性測試分析。三者同時進行比較,既比較了常用的不同的C/C++網絡庫的實時性,又比較了面向消息的中間件中不同模式的實時性。
OpenDDS是OCI的開源DDS實現,它基于開源的ACE和TAO,實現了DDS規范的DCPS層接口。同時,為了討論和比較DDS的實時性效果,在試驗時引入ZeroMQ和Boost.Asio模型。ZeroMQ作為面向消息的中間件,屬于消息隊列模式,它定義了分布式系統的全局拓撲,可在多個線程、內核和主機盒之間彈性伸縮。
構建發送端和接收端,用來模擬一個監控端和一個船舶電力系統采集端。將強類型C++數據作為傳輸數據。傳輸過程中,當接收端確認數據接收到后,給發送端返回一個確認回波信號,記為完成一次發送。因為一次操作時間較短,偶然誤差較大,重復操作1000次,計算平均值作為單次發送的所用時間。
在本測試中,用DDS構架發送強類型C++數據。為了比較用ZeroMQ和Boost.Asio構架發送的時間,用序列化框架將該強類型C++數據序列化到原始緩沖區,然后再發送。
在每一種消息傳遞中間件系統測試時,首先在不同主機上定義發送端和接收端,發送端發送一個強類型C++數據,并設置一個“回聲”標志設置為false和一個計數器,其內部的序列化構件將數據轉化為原始緩沖區數據,并將它們發送到訂閱者。在接收端方面,訂閱者自動反序列化對象,檢查計數器和“回聲”標志,改變了“回聲”標志為true,再次序列化回聲的對象,發送回發送端,一個回合結束。發送端需要消息回復,再次反序列化對象,并檢查回波標記和計數器。本過程要反復調用1000次。
在序列化的過程中,OpenDDS軟件和Boost.Asio內部均含有各自的序列化構件,序列化與反序列化過程自動完成。而傳統的ZeroMQ內部沒有封裝序列化工具,必須使用序列化工具來序列化C++對象到一個原始緩沖區發送,并在另一邊反序列化;其中,用到的序列化工具為Boost庫;在ZeroMQ使用Boost庫作為序列化工具時,在一個原始緩沖區發送和反序列化C++對象,考慮采用谷歌協議緩沖區作為序列化工具。即比較了DDS、ZeroMQ、Boost.Asio和改進后的ZeroMQ四種通信框架的傳輸時間。
比較基于幾種規范的通信構架的傳輸時間,具體時間如表1所示。

表1 不同架構傳輸時間對比
其具體原因可以總結如下:
DDS包含最完整的發布-訂閱功能,可以自動匹配主題和收發端點,而且,廣泛的服務質量可以來配置常見的發布-訂閱中間件的行為。所以,可以在一個主題下設立任意多個發布者和訂閱者,而不用考慮怎樣手動建立它們之間的鏈路。
DDS內部的序列化工具可以使數據傳輸時,使用者不用另外添加序列化輔助工具,這樣就大大減少了使用時的困難,而且內部封裝的工具更能節約數據傳輸的時間。
本文針對船舶電力系統中典型的分布式通信系統的特點,考慮發布者/訂閱者中的DDS規范。將基于DDS協議的OpenDDS軟件與其它兩種實時性較好的通信協議ZeroMQ和Boost.Asio作比較,通過收發強類型C++數據的測試,比較單次發送接收所需的平均時間的長短,本文測試從接收數據時間方面考慮,得到DDS實時性相對較好的結論。
[1]朱華勇,張慶杰,沈林成,等.分布式系統實時發布/訂閱數據分發技術[M].北京:國防工業出版社,2013:35-70.
[2]張大海,賴蘭劍,陳鼎才.DDS在分布式系統仿真中的應用[J].計算機技術與發展,2011,21(3):250-253.
[3]吳金成,曹嬌,趙文棟,等.簽集中式發布訂閱機制性能分析[J].指揮控制與仿真,2010,32(6):12-15.
[4]程雄,向慧.對數據發布服務標準基本要素的研究[J].計算機與數字工程,2007,35(8):53-56.
[5]裘諧,沈棟,李娜,等.基于DCPS模型的數據分發服務DDS的研究[J].電子科技,2006,11:68-71.
[6]曹萬華,謝蓓,吳海昕,等.基于DDS的發布/訂閱中間件技術[J].計算機工程,2007,33(18):78-81.
[7]呂云飛,王旋,張軍.基于DDS技術的艦船平臺綜合管理系統[J].艦船科學技術,2011,33(5):47-52.
[8]權莉,高揚.探索基于DDS模型的數據分發中間件[J].微型機與應用,2011,30(5):48-49.
[9]楊傳順.以數據為中心的艦載分布式系統[J].艦船科學技術,2011,33(7):75-78.
[10]潘榮.ACE技術內幕[M].北京:機械工業出版社,2012:41-70.
[11]楊震,陽洋.基于DDS規范的戰場信息分發中間件平臺研究[J].通信技術,2009,42(12):185-187.