李 軍
(武漢市74223信箱 武漢 430074)
隨著分布式計(jì)算和網(wǎng)絡(luò)的飛速發(fā)展,分布式應(yīng)用系統(tǒng)在金融、電信、軍事領(lǐng)域中得到廣泛應(yīng)用。為了實(shí)現(xiàn)分布式異構(gòu)網(wǎng)絡(luò)環(huán)境下不同應(yīng)用的互聯(lián)、互通和互操作,一般采用中間件技術(shù)來(lái)屏蔽系統(tǒng)平臺(tái)的差異。但是目前中間件產(chǎn)品并不能很好地解決通信的實(shí)時(shí)性、伸縮性和靈活性問(wèn)題,如當(dāng)前較為流行的CORBA技術(shù),由于它是以對(duì)象和服務(wù)為中心,采用了C/S通信模型,通信機(jī)制較為復(fù)雜,數(shù)據(jù)收發(fā)需要建立連接,不能完全滿(mǎn)足系統(tǒng)對(duì)實(shí)時(shí)性能的需要。早先的分布式共享內(nèi)存是一種以數(shù)據(jù)為中心交換的經(jīng)典模型,然而這種模型很難在網(wǎng)絡(luò)中高效地執(zhí)行,很難為用戶(hù)提供可衡量性和靈活性,特別是很難滿(mǎn)足系統(tǒng)的實(shí)時(shí)性需求。OMG意識(shí)到需要一個(gè)基于以數(shù)據(jù)為中心的發(fā)布/訂閱(DCPS)通信模型[1]的數(shù)據(jù)分發(fā)服務(wù)來(lái)滿(mǎn)足分布式實(shí)時(shí)應(yīng)用的需要,提出并最終采納了“OMG-DDS”規(guī)范。為了實(shí)現(xiàn)網(wǎng)絡(luò)中各節(jié)點(diǎn)通信的實(shí)時(shí)性、異步獨(dú)立性和松耦合性,該規(guī)范建立了“全局?jǐn)?shù)據(jù)空間(Global Data Space)[2]”的概念并指定了發(fā)布者和訂閱者以及如何訪問(wèn)該空間。在DCPS通信模型中,全局?jǐn)?shù)據(jù)空間代替了中心服務(wù)器,用來(lái)管理整個(gè)分布式系統(tǒng)中的主題發(fā)布,主題訂閱,節(jié)點(diǎn)信息的維護(hù)以及節(jié)點(diǎn)的關(guān)聯(lián)。因此,GDS的設(shè)計(jì)成為了DCPS通信模型實(shí)現(xiàn)的關(guān)鍵。本論文根據(jù)DDS[3,5]中以數(shù)據(jù)為中心的發(fā)布/訂閱模型,提出一種全局?jǐn)?shù)據(jù)空間的總體框架及各組織結(jié)構(gòu)設(shè)計(jì),最后給出了一些管理策略。
如圖1所示,DDS中以數(shù)據(jù)為中心的發(fā)布/訂閱(DCPS)模型[3~4]建立了一個(gè)“全局?jǐn)?shù)據(jù)空間”的概念,通過(guò)全局?jǐn)?shù)據(jù)空間來(lái)管理數(shù)據(jù)對(duì)象(每個(gè)數(shù)據(jù)對(duì)象由“主題(T opic)”和“類(lèi)型(Type)”共同標(biāo)識(shí),“主題”提供了一個(gè)標(biāo)志符,在全局?jǐn)?shù)據(jù)空間中唯一地標(biāo)識(shí)某些數(shù)據(jù)項(xiàng)?!邦?lèi)型”提供了中間件如何操縱這些數(shù)據(jù)所需的結(jié)構(gòu)信息)的發(fā)布及主題的訂閱。需要說(shuō)明的是全局?jǐn)?shù)據(jù)空間并不存放實(shí)際數(shù)據(jù),它只管理訂閱主題信息。
想要向數(shù)據(jù)空間提供主題信息的應(yīng)用程序聲明為“發(fā)布者”,同樣,想從數(shù)據(jù)空間中獲取主題信息的應(yīng)用程序成為“訂閱者”。發(fā)布者(Publisher)負(fù)責(zé)發(fā)布數(shù)據(jù),它可能發(fā)布不同類(lèi)型的數(shù)據(jù)。訂閱者(Subscriber)負(fù)責(zé)對(duì)發(fā)布的數(shù)據(jù)進(jìn)行接收并使數(shù)據(jù)能被接收應(yīng)用所使用(根據(jù)Subscriber的QoS)。主題在邏輯上將發(fā)布者和訂閱者關(guān)聯(lián)起來(lái)。發(fā)布者必須能夠讓訂閱者非常清楚地查閱它。主題能夠完成該目的:它將一個(gè)名稱(chēng)(在領(lǐng)域domain內(nèi)唯一)、數(shù)據(jù)類(lèi)型(data-type)和數(shù)據(jù)本身的QoS關(guān)聯(lián)在一起,使空間上、時(shí)間上關(guān)系松散甚至毫無(wú)關(guān)聯(lián)的發(fā)布者和訂閱者之間產(chǎn)生了互通。
每當(dāng)發(fā)布者將新主題信息發(fā)送到當(dāng)前節(jié)點(diǎn)的全局?jǐn)?shù)據(jù)空間,中間件就會(huì)把主題信息廣播給所有感興趣的訂閱者。當(dāng)訂閱者能從自己的數(shù)據(jù)空間中找到需要的主題信息時(shí),就向發(fā)布主題節(jié)點(diǎn)發(fā)送訂閱請(qǐng)求信息,發(fā)布者根據(jù)訂閱信息中的訂閱者地址,發(fā)布該主題下的數(shù)據(jù)給指定的訂閱者,兩者即完成數(shù)據(jù)的分發(fā)。
圖1 DCPS數(shù)據(jù)模型及全局?jǐn)?shù)據(jù)空間
在DDS中間件設(shè)計(jì)中采用基于偵聽(tīng)的通信機(jī)制,由偵聽(tīng)者來(lái)進(jìn)行信息的分發(fā)并觸發(fā)相關(guān)實(shí)體的動(dòng)作,即各節(jié)點(diǎn)之間通過(guò)偵聽(tīng)者來(lái)傳遞發(fā)布和訂閱的主題信息。所有與主題相關(guān)的信息都保存在GDS中,偵聽(tīng)者收到來(lái)自其他節(jié)點(diǎn)的信息后通過(guò)與GDS進(jìn)行交互來(lái)進(jìn)行主題和QOS的匹配,從而進(jìn)行任務(wù)的分發(fā),通知相關(guān)發(fā)布者/訂閱者調(diào)用與主題相關(guān)聯(lián)的數(shù)據(jù)寫(xiě)入者/數(shù)據(jù)讀入者進(jìn)行數(shù)據(jù)傳送。
由于DCPS通信模型采用的是基于主題發(fā)布訂閱機(jī)制[6~7],各節(jié)點(diǎn)之間的交互通過(guò)主題來(lái)關(guān)聯(lián),而且新節(jié)點(diǎn)的接入和節(jié)點(diǎn)的退出信息也保存在全局?jǐn)?shù)據(jù)空間中,因此全局?jǐn)?shù)據(jù)空間上的主題信息的同步更新則成為了設(shè)計(jì)的關(guān)鍵。GDS一方面與本地發(fā)布者、訂閱者、數(shù)據(jù)讀入者、數(shù)據(jù)寫(xiě)入者進(jìn)行交互,協(xié)助這些實(shí)體完成主體的發(fā)布或訂閱。另一方面,它為偵聽(tīng)者進(jìn)行信息處理和分發(fā)提供參考。
由于傳統(tǒng)C/S通信模式需要一個(gè)中心服務(wù)器來(lái)處理并提供數(shù)據(jù),而且如果多個(gè)節(jié)點(diǎn)同時(shí)向服務(wù)器請(qǐng)求,服務(wù)器需要花很長(zhǎng)時(shí)間來(lái)處理消息,增加了服務(wù)器的負(fù)載,不適合數(shù)據(jù)流大的實(shí)時(shí)系統(tǒng),所以全局?jǐn)?shù)據(jù)空間并不在一個(gè)集中式服務(wù)器中,而是采用分布式的設(shè)計(jì),分布到每個(gè)分布式節(jié)點(diǎn)上。于是,在設(shè)計(jì)GDS的時(shí)候需要考慮以下幾個(gè)方面:
?當(dāng)需要發(fā)布主題時(shí),DDS中間件需要查詢(xún)GDS是否已有其他節(jié)點(diǎn)發(fā)布過(guò)該主題;若沒(méi)有,發(fā)布方采取廣播的方式發(fā)送主題到所有接入的節(jié)點(diǎn),各節(jié)點(diǎn)需要同步更新GDS主題信息表,所以各節(jié)點(diǎn)保持一樣的主題信息;
?當(dāng)訂閱者訂閱主題時(shí),DDS中間件通過(guò)查詢(xún)GDS主題信息表得到該主題的發(fā)布者,確定向哪里訂閱;
?當(dāng)確定主題發(fā)送者之后,即向發(fā)布者發(fā)送訂閱信息;訂閱信息存儲(chǔ)在發(fā)布者的訂閱登記表中;
?當(dāng)某個(gè)主題上有數(shù)據(jù)產(chǎn)生時(shí),需要在GDS訂閱登記表中查詢(xún)找到所有該主題的訂閱者,來(lái)確定數(shù)據(jù)的接收地;
?當(dāng)偵聽(tīng)者收到訂閱主題或退訂消息時(shí),通過(guò)查找GDS確定是否需要保存該信息。
基于以上的需求分析,提出了一種基于DCPS模型的發(fā)布訂閱中間件框架并設(shè)計(jì)了全局?jǐn)?shù)據(jù)空間的的組織結(jié)構(gòu)。如圖2所示。
圖2 基于DCPS模型的發(fā)布訂閱中間框架及數(shù)據(jù)空間結(jié)構(gòu)
通過(guò)以上對(duì)DDS規(guī)范的研究和對(duì)實(shí)際應(yīng)用的需求分析,GDS主要需要保存所有發(fā)布者的主題信息、本節(jié)點(diǎn)的訂閱信息、需要保存的數(shù)據(jù)、所有訂閱失敗的信息。所以設(shè)計(jì)的GDS由發(fā)布主題表、訂閱登記表、發(fā)布數(shù)據(jù)緩存區(qū)和訂閱失敗隊(duì)列四部分構(gòu)成。
1)發(fā)布主題表
定義發(fā)布主題表PT_Table(ID,P_IP,T_QOS)保存所有發(fā)布主題的狀態(tài)信息,其中ID為發(fā)布的主題標(biāo)識(shí);P_IP為發(fā)布者IP地址;T_QOS表示發(fā)布者所提供主題的服務(wù)質(zhì)量,T_QOS主要包括:(1)Durability數(shù)據(jù)持久性,其中 VOLATILE表示非持久性數(shù)據(jù),不需要保存,T RANSIENT表示需要暫時(shí)保存,PERSISTENT表示持久性數(shù)據(jù),需要永久保存;(2)Reliability為傳輸方式的可靠性,Best-effort表示盡力方式傳輸,Reliable表示采用可靠方式傳輸;(3)Priority表示訂閱時(shí)間的優(yōu)先級(jí),值越小其優(yōu)先級(jí)越高。
所有節(jié)點(diǎn)上的發(fā)布主題表保持一致并實(shí)時(shí)更新。對(duì)于一個(gè)有多個(gè)分布節(jié)點(diǎn)組成的具有特定功能的系統(tǒng)來(lái)說(shuō),所有節(jié)點(diǎn)應(yīng)用具備一張一致的發(fā)布主題表,描述了該系統(tǒng)的基本主題狀況。
2)訂閱登記表
定義訂閱登記表SR_T able(ID,S_IP,T_QOS)反映當(dāng)前訂閱該節(jié)點(diǎn)的訂閱信息,其中ID表示訂閱主題;S_IP為訂閱者地址;T_QOS表示訂閱方要求主題的服務(wù)質(zhì)量,與PR_Table的 T_QOS參數(shù)和意義相同。
不同節(jié)點(diǎn)的訂閱登記表各不相同。節(jié)點(diǎn)在訂閱主題時(shí),通過(guò)發(fā)布主題來(lái)確定提供該訂閱主題的節(jié)點(diǎn);在發(fā)布數(shù)據(jù)時(shí),通過(guò)訂閱登記表來(lái)確定數(shù)據(jù)該發(fā)往何處。
3)發(fā)布數(shù)據(jù)緩沖區(qū)
Data_pool保存由本節(jié)點(diǎn)發(fā)布且需要保存的發(fā)送數(shù)據(jù),即主題的Durability_QOS屬性為T(mén)RANSIERNT或PERSISENT的數(shù)據(jù)。其結(jié)構(gòu)如圖3所示,數(shù)組每一項(xiàng)表示同一主題已發(fā)送的數(shù)據(jù),num表示現(xiàn)有數(shù)據(jù)條數(shù);ID為主題標(biāo)識(shí);ptr指向所有主題數(shù)據(jù)的鏈表,鏈表的每一項(xiàng)保存了一條數(shù)據(jù)信息,通過(guò)指針指向數(shù)據(jù)的內(nèi)存區(qū);Livaspan表示該主題數(shù)據(jù)需要保存的時(shí)間,若 Livaspan為0xffff則永久保存,否則在規(guī)定的時(shí)刻后刪除該主題下的首條消息;
GDS根據(jù)每種主題下數(shù)據(jù)的Livaspan來(lái)決定何時(shí)更新緩沖區(qū)。
圖3 發(fā)布數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)示意圖
4)訂閱失敗隊(duì)列
Sub_fail_que保存本節(jié)點(diǎn)向其他節(jié)點(diǎn)失敗訂閱的歷史記錄,數(shù)組每一項(xiàng)表示在同一主機(jī)上訂閱失敗的記錄。中間件在收到發(fā)布方開(kāi)機(jī)信息或間隔一定時(shí)間再進(jìn)行重新訂閱。
GDS是本模型實(shí)現(xiàn)主題訂閱和數(shù)據(jù)分發(fā)的關(guān)鍵。如何更新各節(jié)點(diǎn)上的發(fā)布主題表使其保持動(dòng)態(tài)一致,以及維護(hù)和更新訂閱登記表是GDS管理的核心環(huán)節(jié),所以GDS最后需要一些管理策略來(lái)進(jìn)行更新維護(hù)。本文提出了如下策略:
?每個(gè)節(jié)點(diǎn)開(kāi)機(jī)時(shí)向所有節(jié)點(diǎn)廣播開(kāi)機(jī)信息,收到開(kāi)機(jī)信息后,各個(gè)節(jié)點(diǎn)檢查自己的訂閱失敗隊(duì)列,將在開(kāi)機(jī)節(jié)點(diǎn)上訂閱失敗的訂閱消息重新發(fā)給開(kāi)機(jī)節(jié)點(diǎn),訂閱成功后從隊(duì)列中刪除。
?訂閱者變更訂閱記錄時(shí)通知相應(yīng)發(fā)布者更新其訂閱登記表。發(fā)布者變更發(fā)布主題信息時(shí)通知所有節(jié)點(diǎn)更新發(fā)布主題表,以保持發(fā)布主題表的全局一致性。
?訂閱方根據(jù)發(fā)布主題表向發(fā)布者發(fā)送訂閱信息,若發(fā)布主題表中沒(méi)有相關(guān)發(fā)布記錄,則進(jìn)行廣播訂閱,若訂閱成功就在發(fā)布者的訂閱登記表中登記訂閱記錄。發(fā)布節(jié)點(diǎn)上的GDS在發(fā)布數(shù)據(jù)緩沖區(qū)查找是否存在該訂閱者所訂閱主題的數(shù)據(jù),然后激活相應(yīng)數(shù)據(jù)寫(xiě)入者將數(shù)據(jù)發(fā)送給訂閱方的相應(yīng)數(shù)據(jù)讀入者。若訂閱失敗就將該訂閱記錄記入本節(jié)點(diǎn)的訂閱失敗隊(duì)列。
?節(jié)點(diǎn)離開(kāi)或失效的情況:當(dāng)節(jié)點(diǎn)離開(kāi)時(shí),向其他節(jié)點(diǎn)發(fā)送離線消息,其他節(jié)點(diǎn)刪除訂閱登記表中離線節(jié)點(diǎn)的訂閱記錄,并終止與離線節(jié)點(diǎn)間的所有發(fā)布/訂閱關(guān)系,離開(kāi)節(jié)點(diǎn)同時(shí)清空節(jié)點(diǎn)上的訂閱登記表;各個(gè)節(jié)點(diǎn)通過(guò)定期向其他節(jié)點(diǎn)發(fā)送心跳信息來(lái)表示該節(jié)點(diǎn)還“活著”。一段時(shí)間內(nèi)收不到某節(jié)點(diǎn)的心跳信息表明該節(jié)點(diǎn)已“死亡”,其他節(jié)點(diǎn)要?jiǎng)h除訂閱登記表中“死亡”節(jié)點(diǎn)的訂閱記錄。
傳統(tǒng)的中間件包括CORBA、EJB、DCOM 都采用C/S通信模式,它需要一個(gè)中心服務(wù)器來(lái)處理數(shù)據(jù)信息,增加了服務(wù)器的負(fù)載,產(chǎn)生了不可預(yù)測(cè)的時(shí)延,不適用于數(shù)據(jù)量大的實(shí)時(shí)系統(tǒng)。而DDS規(guī)范采用的以數(shù)據(jù)為中心的發(fā)布/訂閱(DCPS)模型,根據(jù)主題進(jìn)行點(diǎn)到點(diǎn)消息發(fā)送,實(shí)現(xiàn)了按需發(fā)送。而全局?jǐn)?shù)據(jù)空間概念的提出,實(shí)現(xiàn)了發(fā)布訂閱模型的異步性和松耦合性,同時(shí)本文提出一種全局?jǐn)?shù)據(jù)空間分布式設(shè)計(jì)方案,大大提高了系統(tǒng)的可靠性和可擴(kuò)展性。因此,DDS中間件在高性能、高可靠性、高實(shí)時(shí)的數(shù)據(jù)傳輸中應(yīng)用前景廣闊。
[1]OMG Data Distribution Service for Real-time Systems Version 1.2,2007
[2]Giddings V Tutorial on the OMG Data Distribution Service[R].Objective Interface Systems.Inc,2005
[3]TAO Developer's Guide Excerpt Object Computing,Inc,2007
[4]Data Distribution Service(DDS)and the RTPS protocol Gerardo Pardo Castellote gerardo@rti.com,2004
[5]Addressing the Challenges of Tactical Information Management in Net-CentricSystemswith DDS Douglas C.Schmidt Angelo Corsaro Hans van't Hag PrismTech Corporation,2005
[6]Middleware Solutions for automation application-case RTPS Helsinki University of Technology Seppo Sierla,2003
[7]Designing and debugging real-time distributed systems By Geoff Revill,RTI,2008