侯 玉 潘 昕 馮 源
(海軍工程大學(xué)電氣工程學(xué)院 武漢 430033)
在船舶分布式通信中,有多個分布的信息源,也有多個對這些信息源的信息感興趣的分布的網(wǎng)絡(luò)節(jié)點,構(gòu)成異構(gòu)的分布式網(wǎng)絡(luò)?,F(xiàn)代信息化系統(tǒng)要求通信系統(tǒng)具備高效的信息傳輸效率,對信息的實時性、安全性要求很高,并且要求通信系統(tǒng)能夠在異構(gòu)和相對惡劣的環(huán)境下穩(wěn)定、可靠地傳輸[1]。
目前解決異構(gòu)的分布式系統(tǒng)之間的互聯(lián)和互操作問題常采用中間件技術(shù)。中間件屏蔽掉了底層操作系統(tǒng)的復(fù)雜性,能使處于應(yīng)用層中的各應(yīng)用成分之間實現(xiàn)跨網(wǎng)絡(luò)的協(xié)同工作。中間件提供了兩類數(shù)據(jù)分發(fā)類型,即客戶端/服務(wù)器中間件和面向消息的中間件。而后者又包括消息隊列模式和發(fā)布者/訂閱者模型。對于現(xiàn)代船舶的分布式通信,要求某一節(jié)點上的變化和信息能夠及時地被其它相關(guān)的節(jié)點感知和獲取到,并及時做出響應(yīng)。與其它的通信模式相比,發(fā)布/訂閱模式最大的優(yōu)勢是實現(xiàn)了三個耦合:空間松耦合、時間松耦合及數(shù)據(jù)流松耦合,實現(xiàn)了船舶分布式通信中各通信實體的異步獨立性,它適合于船舶具有實時性、異步性、異構(gòu)性、動態(tài)性和松耦合的應(yīng)用要求。數(shù)據(jù)分發(fā)服務(wù)(Data Distribute Service,DDS)規(guī)范是對象管理組織OMG發(fā)布的第一個以實時數(shù)據(jù)中心思想的發(fā)布/訂閱通信模型,針對強實時系統(tǒng)進行了優(yōu)化,提供低延遲、高吞吐量、以及對實時性能的控制級別,可以滿足復(fù)雜系統(tǒng)的實時和高速數(shù)據(jù)交換要求,實現(xiàn)分布式網(wǎng)絡(luò)環(huán)境下的動態(tài)組網(wǎng)和數(shù)據(jù)的按需多點分發(fā)[2]。
本文通過模擬一個監(jiān)控端和一個船舶電力信息采集端之間的發(fā)送和實時接收消息,對比DDS和其它兩種高性能的消息傳遞中間件系統(tǒng):ZeroMQ和Boost.Asio,測試基于三種規(guī)范的通信架構(gòu)對數(shù)據(jù)傳輸?shù)乃俾省?/p>
DDS規(guī)范定義了兩個層次的接口:DCPS層和DLRL層。DCPS層指以數(shù)據(jù)為中心的發(fā)布/訂閱層,它提供DDS的基本通信服務(wù)。DLRL指數(shù)據(jù)本地重構(gòu)層,它位于DCPS層的上層,它是可選層,主要起抽象DCPS層服務(wù)的作用。在DDS的兩層中,核心是DCPS層[3]。DCPS層的主要結(jié)構(gòu)如圖所示。
在DCPS層中,定義了包括發(fā)布者、數(shù)據(jù)寫入者、訂閱者、數(shù)據(jù)讀入者等對象。每個發(fā)布者至少有一個數(shù)據(jù)寫入者,數(shù)據(jù)寫入者完成數(shù)據(jù)類型的定義,發(fā)布者完成對該定義的數(shù)據(jù)發(fā)布,訂閱者和數(shù)據(jù)讀取者的關(guān)系類似。DCPS中還有兩個重要的概念即域與主題。域限定了通信范圍,發(fā)布方和訂閱方只有在同一個域中才能進行數(shù)據(jù)傳輸。主題則是訂閱和發(fā)布的關(guān)鍵,在建立關(guān)聯(lián)的過程中,發(fā)布方首先向中間件發(fā)送主題信息,訂閱方向中間件發(fā)送所需的或查詢特定的主題信息,中間件通過檢查兩者的主題是否相吻合,來確定是否建立發(fā)布方和訂閱方的連接,數(shù)據(jù)是否進行點對點的傳輸。在整個DDS的通信過程中,DCPS層還通過設(shè)置服務(wù)質(zhì)量QoS,對數(shù)據(jù)傳輸進行相應(yīng)設(shè)置[4]。DCPS結(jié)構(gòu)如圖1所示。
圖1 DCPS體系結(jié)構(gòu)
DDS是基于以數(shù)據(jù)為中心的數(shù)據(jù)分發(fā)技術(shù),它并不適合于所有場合。但是對于船舶上采用的分布式通信,總結(jié)DDS具有以下優(yōu)點:
1)處理復(fù)雜數(shù)據(jù)流能力較強。DDS通過控制Qos參數(shù),可以將對可靠性、帶寬等不同要求的模塊集成到一個模塊中,可有利于構(gòu)建綜合性系統(tǒng)。
2)低延時和高吞吐量。根據(jù)上文分析,DDS作為發(fā)布/訂閱模式的一種,沒有中心服務(wù)器的概念,與其它模式相比傳輸速度較快;另外,它可以把單個網(wǎng)絡(luò)分組同時發(fā)送給多個分布式結(jié)點,具有較高的吞吐量。
3)良好的容錯機制。DDS的體系結(jié)構(gòu)決定了系統(tǒng)中沒有任何特殊的節(jié)點,添加或刪除某個節(jié)點,其他節(jié)點完全不會受到影響。
4)靈活的動態(tài)配置。DDS提供了快速位置透明性,能夠快速發(fā)現(xiàn)新的節(jié)點,節(jié)點上新的參與者和新的主題。
目前,在已有的DDS規(guī)范的實現(xiàn)中,RTI DDS軟件、OpenSplice DDS軟件以及OpenDDS軟件應(yīng)用的范圍最為廣泛。其中,OpenDDS遵循實時系統(tǒng)v1.2的DDS規(guī)范和實時公布/訂閱互操作性通信協(xié)議v2.1的DDS-RTPS規(guī)范。
OpenDDS采用有中心體系結(jié)構(gòu),如圖2所示。在一個節(jié)點上運行守護程序,存儲用于管理數(shù)據(jù)和連接的控制信息,數(shù)據(jù)直接從發(fā)布者傳到訂閱者,但控制和初始化需要與該服務(wù)器通信。與其它兩種軟件相比,OpenDDS結(jié)構(gòu)的優(yōu)點是由于所有的控制信息都在一個節(jié)點上,實現(xiàn)和配置簡單,有效地減少用戶工作量[6]。
圖2 OpenDDS體系結(jié)構(gòu)
常見的開源C/C++網(wǎng)絡(luò)庫包括ACE、Boost.Asio、libevent和libev等。其中,后兩者主要應(yīng)用于Linux操作系統(tǒng),在船舶通信中應(yīng)用較少;而前兩種ACE、Boost.Asio均為跨平臺的網(wǎng)絡(luò)庫;Boost.Asio是一個輕量級的異步網(wǎng)絡(luò)庫,它具有簡潔、小巧、高效的特點,有良好的可擴展性;在設(shè)計上采用和Ace相似的Proactor設(shè)計模式,同時內(nèi)置了對多線程的支持。另外,根據(jù)面向消息的兩種中間件分類,因為DDS屬于發(fā)布者/訂閱者模式,所以在另一種即模式消息隊列模式中,選擇其中實時性較好的ZeroMQ協(xié)議做測試。
本文中采用 OpenDDS、Boost.Asio、ZeroMQ三種協(xié)議進行實時性測試分析。三者同時進行比較,既比較了常用的不同的C/C++網(wǎng)絡(luò)庫的實時性,又比較了面向消息的中間件中不同模式的實時性。
OpenDDS是OCI的開源DDS實現(xiàn),它基于開源的ACE和TAO,實現(xiàn)了DDS規(guī)范的DCPS層接口。同時,為了討論和比較DDS的實時性效果,在試驗時引入ZeroMQ和Boost.Asio模型。ZeroMQ作為面向消息的中間件,屬于消息隊列模式,它定義了分布式系統(tǒng)的全局拓撲,可在多個線程、內(nèi)核和主機盒之間彈性伸縮。
構(gòu)建發(fā)送端和接收端,用來模擬一個監(jiān)控端和一個船舶電力系統(tǒng)采集端。將強類型C++數(shù)據(jù)作為傳輸數(shù)據(jù)。傳輸過程中,當(dāng)接收端確認數(shù)據(jù)接收到后,給發(fā)送端返回一個確認回波信號,記為完成一次發(fā)送。因為一次操作時間較短,偶然誤差較大,重復(fù)操作1000次,計算平均值作為單次發(fā)送的所用時間。
在本測試中,用DDS構(gòu)架發(fā)送強類型C++數(shù)據(jù)。為了比較用ZeroMQ和Boost.Asio構(gòu)架發(fā)送的時間,用序列化框架將該強類型C++數(shù)據(jù)序列化到原始緩沖區(qū),然后再發(fā)送。
在每一種消息傳遞中間件系統(tǒng)測試時,首先在不同主機上定義發(fā)送端和接收端,發(fā)送端發(fā)送一個強類型C++數(shù)據(jù),并設(shè)置一個“回聲”標志設(shè)置為false和一個計數(shù)器,其內(nèi)部的序列化構(gòu)件將數(shù)據(jù)轉(zhuǎn)化為原始緩沖區(qū)數(shù)據(jù),并將它們發(fā)送到訂閱者。在接收端方面,訂閱者自動反序列化對象,檢查計數(shù)器和“回聲”標志,改變了“回聲”標志為true,再次序列化回聲的對象,發(fā)送回發(fā)送端,一個回合結(jié)束。發(fā)送端需要消息回復(fù),再次反序列化對象,并檢查回波標記和計數(shù)器。本過程要反復(fù)調(diào)用1000次。
在序列化的過程中,OpenDDS軟件和Boost.Asio內(nèi)部均含有各自的序列化構(gòu)件,序列化與反序列化過程自動完成。而傳統(tǒng)的ZeroMQ內(nèi)部沒有封裝序列化工具,必須使用序列化工具來序列化C++對象到一個原始緩沖區(qū)發(fā)送,并在另一邊反序列化;其中,用到的序列化工具為Boost庫;在ZeroMQ使用Boost庫作為序列化工具時,在一個原始緩沖區(qū)發(fā)送和反序列化C++對象,考慮采用谷歌協(xié)議緩沖區(qū)作為序列化工具。即比較了DDS、ZeroMQ、Boost.Asio和改進后的ZeroMQ四種通信框架的傳輸時間。
比較基于幾種規(guī)范的通信構(gòu)架的傳輸時間,具體時間如表1所示。
表1 不同架構(gòu)傳輸時間對比
其具體原因可以總結(jié)如下:
DDS包含最完整的發(fā)布-訂閱功能,可以自動匹配主題和收發(fā)端點,而且,廣泛的服務(wù)質(zhì)量可以來配置常見的發(fā)布-訂閱中間件的行為。所以,可以在一個主題下設(shè)立任意多個發(fā)布者和訂閱者,而不用考慮怎樣手動建立它們之間的鏈路。
DDS內(nèi)部的序列化工具可以使數(shù)據(jù)傳輸時,使用者不用另外添加序列化輔助工具,這樣就大大減少了使用時的困難,而且內(nèi)部封裝的工具更能節(jié)約數(shù)據(jù)傳輸?shù)臅r間。
本文針對船舶電力系統(tǒng)中典型的分布式通信系統(tǒng)的特點,考慮發(fā)布者/訂閱者中的DDS規(guī)范。將基于DDS協(xié)議的OpenDDS軟件與其它兩種實時性較好的通信協(xié)議ZeroMQ和Boost.Asio作比較,通過收發(fā)強類型C++數(shù)據(jù)的測試,比較單次發(fā)送接收所需的平均時間的長短,本文測試從接收數(shù)據(jù)時間方面考慮,得到DDS實時性相對較好的結(jié)論。
[1]朱華勇,張慶杰,沈林成,等.分布式系統(tǒng)實時發(fā)布/訂閱數(shù)據(jù)分發(fā)技術(shù)[M].北京:國防工業(yè)出版社,2013:35-70.
[2]張大海,賴蘭劍,陳鼎才.DDS在分布式系統(tǒng)仿真中的應(yīng)用[J].計算機技術(shù)與發(fā)展,2011,21(3):250-253.
[3]吳金成,曹嬌,趙文棟,等.簽集中式發(fā)布訂閱機制性能分析[J].指揮控制與仿真,2010,32(6):12-15.
[4]程雄,向慧.對數(shù)據(jù)發(fā)布服務(wù)標準基本要素的研究[J].計算機與數(shù)字工程,2007,35(8):53-56.
[5]裘諧,沈棟,李娜,等.基于DCPS模型的數(shù)據(jù)分發(fā)服務(wù)DDS的研究[J].電子科技,2006,11:68-71.
[6]曹萬華,謝蓓,吳海昕,等.基于DDS的發(fā)布/訂閱中間件技術(shù)[J].計算機工程,2007,33(18):78-81.
[7]呂云飛,王旋,張軍.基于DDS技術(shù)的艦船平臺綜合管理系統(tǒng)[J].艦船科學(xué)技術(shù),2011,33(5):47-52.
[8]權(quán)莉,高揚.探索基于DDS模型的數(shù)據(jù)分發(fā)中間件[J].微型機與應(yīng)用,2011,30(5):48-49.
[9]楊傳順.以數(shù)據(jù)為中心的艦載分布式系統(tǒng)[J].艦船科學(xué)技術(shù),2011,33(7):75-78.
[10]潘榮.ACE技術(shù)內(nèi)幕[M].北京:機械工業(yè)出版社,2012:41-70.
[11]楊震,陽洋.基于DDS規(guī)范的戰(zhàn)場信息分發(fā)中間件平臺研究[J].通信技術(shù),2009,42(12):185-187.