摘 要: 對(duì)象管理組織(Object Management Group,OMG)頒布的數(shù)據(jù)分發(fā)服務(wù)(Data Distribution Service,DDS)規(guī)范有兩種發(fā)送模式,一種為盡量發(fā)送,一種為可靠發(fā)送。在艦載信息系統(tǒng)中,DDS通常默認(rèn)為盡量發(fā)送模式,這并不能保證系統(tǒng)的可靠性。因此,針對(duì)DDS規(guī)范中可靠發(fā)送模型進(jìn)行深入研究,分析可靠協(xié)議在正常狀況下及丟包狀況下的工作流程。根據(jù)可靠性的要求,通過(guò)配置相關(guān)QoS策略調(diào)整發(fā)送隊(duì)列和接收隊(duì)列的長(zhǎng)度以及心跳檢測(cè)信號(hào)的發(fā)送頻率。最后,通過(guò)盡量發(fā)送和可靠發(fā)送兩種模式的性能測(cè)試比較說(shuō)明各自所適用的情況。
關(guān)鍵詞: DDS規(guī)范;可靠發(fā)送;可靠協(xié)議;QoS策略
0 引言
對(duì)象管理組織(Object Management Group,OMG)于2004年12月發(fā)布了面向分布式實(shí)時(shí)系統(tǒng)的數(shù)據(jù)分發(fā)服務(wù)(Data Distribution Service,DDS)規(guī)范[1]。DDS有兩種發(fā)送模式:盡量發(fā)送和可靠發(fā)送[2]。在艦載信息系統(tǒng)中,盡量發(fā)送通常為默認(rèn)方式,這種方式無(wú)需確定樣本是否按順序傳遞也不需要重新發(fā)送樣本,而當(dāng)對(duì)數(shù)據(jù)樣本正確性要求較高時(shí),這種方式并不再適用,此時(shí)需使用可靠發(fā)送模式。可靠發(fā)送模式確保所有的樣本都被有序接收。本文將對(duì)可靠發(fā)送機(jī)制所使用的方法以及過(guò)程進(jìn)行研究。
1 可靠發(fā)送模型
可靠發(fā)送意味著樣本確定到達(dá)并且按序發(fā)布。發(fā)送和接收隊(duì)列用來(lái)臨時(shí)緩存樣本,直到DDS確認(rèn)樣本已經(jīng)成功傳遞。在樣本已經(jīng)被所有可靠的訂閱者接收之后,DDS將發(fā)布隊(duì)列中的樣本移除。如果無(wú)序樣本到達(dá),那么DDS將其緩存到數(shù)據(jù)讀取者(DR)的接收隊(duì)列中。
在發(fā)送樣本時(shí),數(shù)據(jù)寫入者(DW)設(shè)置為等待空間狀態(tài),即當(dāng)發(fā)送隊(duì)列沒(méi)有可用的空間時(shí),DW一直等待直到有可用的隊(duì)列空間。而如果將DW設(shè)置為非等待空間狀態(tài),即不論隊(duì)列溢出與否都一直發(fā)送數(shù)據(jù),那么舊的緩存樣本將會(huì)被推出隊(duì)列,DR將無(wú)法接收。
2 可靠協(xié)議
為了保證可靠發(fā)送,DDS執(zhí)行實(shí)時(shí)發(fā)布訂閱(Real-Time Publish-Subscribe,RTPS)協(xié)議。
可靠協(xié)議使用以下幾種類型的消息[3]:數(shù)據(jù)信息(Data)、心跳檢測(cè)信息(HB)、反饋信息(ACK/NACK)。
(1)數(shù)據(jù)信息。格式為DATA(<樣本值>,<序列號(hào)>),例如DATA(A,1),表示樣本值為A,序列號(hào)為1。
(2)心跳檢測(cè)信息。HB信息通知DR應(yīng)該接收了某序列號(hào)范圍內(nèi)的信息,要求DR發(fā)送相應(yīng)的響應(yīng)信息。
(3)反饋信息。反饋信息用于向DW表明特定的信息已經(jīng)成功存儲(chǔ)到該DR的歷史中。DW可以通過(guò)反饋信息得知DR哪些信息丟失了。
2.1 正常狀況下的可靠協(xié)議
在樣本未丟失的情況下,當(dāng)調(diào)用寫函數(shù)(write())時(shí),可靠協(xié)議工作流程如圖1所示。
在樣本被發(fā)送之前,將會(huì)在DW的發(fā)送序列中加上序列號(hào)(此例中為1)。一旦樣本被DR接收,DR就將信息存放于其接收隊(duì)列中,標(biāo)記為√。DR接收到的心跳檢測(cè)信號(hào)HB(1)為確認(rèn)自己是否已經(jīng)成功接收樣本(1,A),本例中為成功接收。DW接收到DR發(fā)的ACKNACK(2)信息后,確認(rèn)樣本(1,A)已經(jīng)被成功接收,也以√標(biāo)記。
2.2 丟包狀況下的可靠協(xié)議
假設(shè)樣本DATA(A,1)在發(fā)送過(guò)程中發(fā)生了丟包情況,當(dāng)DR收到下一個(gè)信號(hào)包(DATA(B,2);HB(1-2))時(shí),由于心跳檢測(cè)HB(1-2)表明DR應(yīng)該已經(jīng)收到序列號(hào)為1-2的樣本,于是DR將會(huì)自檢是否已經(jīng)成功接收這些樣本,會(huì)發(fā)現(xiàn)序列號(hào)為1的樣本并沒(méi)有被成功接收。此時(shí),DR將會(huì)發(fā)送ACKNACK(1)給DW,要求其重新發(fā)送樣本DATA(A,1)。該過(guò)程如圖2所示。
DR發(fā)送反饋信息ACKNACK(1)給DW之后,DW首先發(fā)送丟包的樣本A,然后發(fā)送樣本包C以及心跳包HB(1-3)。此時(shí),DR自檢確認(rèn)之后,發(fā)送反饋信息。
實(shí)時(shí)發(fā)布訂閱協(xié)議中的確認(rèn)機(jī)制使得DW接收到相關(guān)的丟包信息,這樣使得每一個(gè)樣本都能成功被DR有序接收。
3 相關(guān)QoS策略
QoS是指一系列可控制DDS服務(wù)行為的特性集合,它由獨(dú)立的QoS策略組成,是DDS規(guī)范的最大亮點(diǎn)[4-5]。可以通過(guò)某些QoS策略的設(shè)置增加系統(tǒng)的可靠性。這里僅對(duì)發(fā)送隊(duì)列長(zhǎng)度和接收隊(duì)列長(zhǎng)度的相關(guān)QoS策略進(jìn)行設(shè)置。
3.1發(fā)送隊(duì)列長(zhǎng)度
設(shè)置歷史QoS策略可以調(diào)整DW發(fā)送隊(duì)列保存的樣本數(shù)以及DR接收隊(duì)列保存的樣本數(shù)[6]。
若DW沒(méi)有接收到DR發(fā)送的反饋信號(hào),那么DW的發(fā)送隊(duì)列將會(huì)滿。此時(shí),如果需要強(qiáng)可靠性數(shù)據(jù)通信,那么歷史策略的類型應(yīng)設(shè)置為“保留所有”,發(fā)送端需阻塞線程,等待直到發(fā)送隊(duì)列有空間再繼續(xù)寫樣本。如果歷史策略類型設(shè)置為“保留最新”,強(qiáng)可靠性通信將不能被保證。
若給出可靠性的要求,那么發(fā)送隊(duì)列的最小長(zhǎng)度設(shè)置如下:
其中,R是發(fā)送樣本的速率,T是數(shù)據(jù)傳輸一周的時(shí)間,P是傳遞樣本過(guò)程中丟包的概率,Q是樣本成功發(fā)送的需求概率。
根據(jù)不同的網(wǎng)絡(luò)狀況,所得到的發(fā)送隊(duì)列最小長(zhǎng)度如表1所示。
3.2 接收隊(duì)列長(zhǎng)度
DR接收樣本時(shí),樣本被保存在接收隊(duì)列中,只有當(dāng)操作“取”(take())將其取走后,樣本才會(huì)被移除出接收隊(duì)列[7]。DR的接收隊(duì)列長(zhǎng)度應(yīng)大于DW發(fā)送隊(duì)列的長(zhǎng)度,主要由資源限制QoS策略中的“隊(duì)列最大樣本數(shù)(max_samples,ms)”控制。一個(gè)DR可以與多個(gè)DW保持通信,DW的無(wú)序樣本也保存在DR的接收隊(duì)列中。為了防止某個(gè)DW的無(wú)序樣本占用過(guò)多的接收隊(duì)列資源,可以在DR的資源限制QoS策略中設(shè)置參數(shù)“DW最大樣本數(shù)(max_samples_per_remote_writer,mw)”,mw<=ms。
4 可靠發(fā)送與盡量發(fā)送性能測(cè)試
本測(cè)試采用由發(fā)布者發(fā)送數(shù)據(jù),在訂閱者接收到數(shù)據(jù)后立即返回?cái)?shù)據(jù),再由發(fā)布者本身接收回告,取接收到回告時(shí)間與剛開(kāi)始發(fā)送的時(shí)間差。
表2和表3分別表示盡量發(fā)送和可靠發(fā)送兩種模式下傳輸數(shù)據(jù)所需時(shí)間,表4為兩種發(fā)送模式丟包率的對(duì)比。
從以上結(jié)果可以看出,盡量發(fā)送模式比可靠發(fā)送模式傳輸數(shù)據(jù)所需的平均時(shí)間短,但是會(huì)產(chǎn)生丟包的情況;而可靠發(fā)送模式傳輸數(shù)據(jù)所需的平均時(shí)間較長(zhǎng),但是不會(huì)產(chǎn)生丟包的情況,確保每個(gè)數(shù)據(jù)樣本都能成功傳輸。
在實(shí)際應(yīng)用中,以艦載信息系統(tǒng)為例,二者應(yīng)相互結(jié)合使用。傳輸實(shí)時(shí)性較高以及周期性發(fā)送的數(shù)據(jù)(如武器傳感器數(shù)據(jù))時(shí),發(fā)送模式應(yīng)為盡量發(fā)送;而對(duì)于控制命令(如開(kāi)關(guān)機(jī)等一次性指令)則需要可靠發(fā)送。
5 結(jié)論
本文分析了可靠發(fā)送模型以及協(xié)議,設(shè)計(jì)并實(shí)現(xiàn)相關(guān)的QoS策略,通過(guò)盡量發(fā)送和可靠發(fā)送兩種模式的性能測(cè)試,分析了兩種發(fā)送模式所適用的情況。在進(jìn)一步的工作中,將分析探討DDS在相關(guān)領(lǐng)域中的應(yīng)用及其他QoS策略的配置。
參考文獻(xiàn)
[1] GEIHS K. Middleware challenges ahead[J]. IEEE Computer, 2001,34(6):24-31.
[2] BARNETT D. RTI-time data distribution for Industrial Automation System. [EB/OL](2009-02-xx). [2015-04-28]. www.rti.com.
[3] 裘楷,沈棟,李娜,等.基于DCPS模型的數(shù)據(jù)分發(fā)服務(wù)DDS的研究[J].電子科技,2006(11):68-71.
[4] 張珺,尹遜和.基于RTIDDS的數(shù)據(jù)分發(fā)中間件的升級(jí)設(shè)計(jì)[J].北京交通大學(xué)學(xué)報(bào),2011,35(5)31-37.
[5] Object Management Group. Data Distribution Service for real-time systems(Vision 1.2)[S]. 2007.
[6] 馮國(guó)良,谷青范.基于DDS的實(shí)時(shí)中間件的研究與設(shè)計(jì)[J].航空電子技術(shù),2011,42(3):41-46.
[7] 歐陽(yáng)軍,蔡志明,王希敏.基于DDS中間件的性能測(cè)試[J].艦船電子工程,2011,31(11):136-139.