陸志斌,王洪軍,李佳楨,王大將
(陸軍指揮學院,江蘇 南京 210009)
近年來,作戰實驗作為一種檢驗新型武器平臺和作戰概念的有效手段,越來越受到各國的重視。經過多年的建設和發展,各個不同領域都有一些好用管用的作戰實驗平臺和軟件,但是隨著世界范圍內軍事變革和作戰概念的不斷更新,整合不同領域內的系統、開展聯合作戰實驗和基于系統的仿真模擬訓練,為參訓部隊和實驗人員提供統一時空、相對逼真的仿真戰場環境越來越受到重視。為此,美軍提出了LVC(Live, Virtual, Constructive)訓練用于解決實裝、模擬器以及仿真系統之間聯合運用的一種分布式交互仿真體系結構。
LVC訓練的核心思想是將分散在不同地域的實兵系統和模擬系統互聯起來,在一個時空域內進行統一訓練。為了將針對不同領域,不同問題的異構系統聯合起來,進行時空維度統一的訓練,首先要解決以下幾個問題[1]:
1)不同訓練系統之間數據的相互識別;
2)保證多系統聯合運行的邏輯合理性;
3)保證系統具有良好的可擴展性和靈活的可組性。
當前,解決同一體系架構內的多系統互聯,雖然解決了體系結構內各LVC仿真資源的互操作問題,但是由于各體系結構的應用,阻礙了發展更大規模的仿真環境[2]。而解決多體系結構的互聯,主要可采用點對點式網關、總線式網關、美軍LVCAR中提出的網關重用技術以及基于Web服務的WebLVC互聯方法。這幾類方法中,美軍在LVCAR計劃中設想可以通過“網關的網關”,復用互聯現存的體系架構。WebLVC通過WebLVC Server進行映射的方式,能夠克服傳統仿真中網絡類型的限制,更易于擴展LVC資源的使用范圍[2]。
此外,對于特定的異構應用,僅僅實現數據間交互還不能滿足要求,比如不同分辨率的構造仿真系統之間,數據維度和粒度差異較大,要保證此類異構系統交聯需求,還需要針對具體應用設計相應的中間件。因此,靈活易用的互聯模型還需要考慮可擴展性。
借鑒WebLVC的思路,本文提出訂閱/發布模型可以用于進行異構系統數據的跨層級交互。通過構建在應用層覆蓋網絡上的發布/訂閱以及各異構系統上的Data Agent,可以實現分類數據的傳輸交互,以及多層級系統的數據轉換服務。
為了讓多技術體系異構系統之間能夠靈活高效進行互聯互通,本文考慮在不改變各異構系統原有通信架構的同時,采用應用層網關的設計思路,將傳統LVC互操作網關構建在一種混合P2P[3]應用層網絡上,如圖1所示。

圖1 基于混合P2P網關服務的LVC聯合訓練方法示意圖
異構系統采用此方法進行交互時,需要區分三類數據,采用基于規則映射Data Agent的方式進行通訊。
1) 實時性要求高的數據:此類數據由元數據規定,直接由各異構系統對應的Data Agent節點相互通信,節點列表由信息發布/訂閱機制維護;
2) 實時性要求一般的數據:采用信息發布/訂閱模型進行數據收發;
3) 互聯互通元數據:直接由信息發布/訂閱模型進行收發,相關元數據保存在各異構系統對應的Data Agent節點上,用于進行仿真數據的映射轉換。
以跨系統聚合解聚為例,系統內部的聚合解聚由相應的系統獨立完成;對于有跨系統聚合解聚的數據,首先在各自的Data Agent內定義元數據,規定好聚合或解聚的系統指向,統一發布到全網;之后,由各異構系統進行獨立的交互數據發布,相應Data Agent根據訂閱模板可接收到需要的數據,并轉入系統內部進行聚合解聚。
本文的發布/訂閱模型借鑒Triantafillou[4-5]等人提出的結構化P2P網絡發布/訂閱模型,構建一種混合P2P網絡結構,整個服務層網絡由信息發布服務器、信息索引節點(Tracker Peer,TP)、普通節點(Ordinary Peer,OP)三類節點組成。網絡中的TP節點和OP節點按照混合P2P方式組織起來,其中TP之間以結構化P2P方式連接,構成一個TP網絡(或TP域),OP和TP之間以無結構方式連接,OP節點接受TP節點的管理;TP網絡負責管理資源的檢索以及為上層提供廣播服務。本文中的信息索引節點(Tracker Peer)TP以Chord方式連接(以下簡稱Chord網)。事件通知服務由TP網絡來維護,TP節點在發布/訂閱模型中充當了事件代理(包括訂閱代理和發布代理)的角色,訂閱者通過自己連接的TP節點向事件通知服務發送訂閱請求(該TP節點稱為訂閱者的訂閱代理);事件的發布者首先將事件發布到自己所連接的TP節點上(該TP節點稱為發布者的發布代理),由該TP節點和整個TP網絡交互,進行事件的匹配、分發以及消息反饋收集等操作,如圖2所示。

圖2 發布/訂閱網絡結構圖
發布/訂閱模型存在兩類集結點:分訂閱集結點(Sub-subscription Rendezvous)和訂閱集結點(Subscription Rendezvous)。分訂閱集結點是存儲屬性約束訂閱的節點,每個集結點保留了訂閱的模式信息(Schemak)、參與映射的屬性名稱(attribi)、分訂閱所屬的區間信息(rangei)以及分訂閱自身的信息。訂閱集結點是存儲訂閱信息和傳遞訂閱的節點,事件發布時需要依靠訂閱集結點進行事件傳遞。模型的分布式數據結構如圖3所示。

圖3 多集結點固定劃分類型空間的發布/訂閱模型分布式數據結構
下面從發布訂閱接口定義、事件/訂閱表示、訂閱管理、事件發布與匹配、事件分發與反饋、錯誤恢復以及復雜操作支持七個方面來介紹發布/訂閱模型。
本文發布/訂閱支持三個函數:
1) ConfigSchema(Schema):配置模式定義函數,在全局范圍內廣播模式定義;
2) Publish(Event):事件發布函數,參數是事件Event,通知事件服務發布事件Event;
3) Subscribe(S):訂閱函數,參數是訂閱S,請求接收和S相匹配的事件。
事件/訂閱表示定義事件和訂閱的數據結構,它是發布/訂閱系統的表達能力的重要體現。在本文中,事件/訂閱表示包括模式定義、事件格式以及訂閱格式,下面分別進行描述。
1)模式定義
在該發布/訂閱模型中,模式定義主要用來對屬性類型以及類型上的操作進行限定,并且將類型按照范圍進行劃分,每個劃分區間內的訂閱由一個集結點來管理。模式定義的規范如下:

其中,Name指的是屬性的名稱,Type指類型的名稱;Type Definition是對該類型的描述;Range是該類型的范圍;Rendezvous Number是該類型在Range下需要的集結點數,通過Range字段和Rendezvous Number字段可以計算出該類型下所有分訂閱集結點的ID;Operator List包含了一系列該類型下的操作符,而在Operator Semantics里對這些操作符的作用和語法進行了描述。
例如,表1所示的模式描述了“地點”和“時間”兩個屬性的規則.
表1 模式定義示例

當然,可以使用形式化方法來獲得更加精確的類型描述和操作符描述,由于不是本文的重點,在此不再描述。
模式定義標識SchemaID由兩部分組成:hash(Schema)和Time(Schema)。其中,hash(Schema)是對Schema內容的哈希值,而Time(Schema)則是該Schema生成的時間。
2)事件格式
在本文的模型中,事件分為兩個部分:事件描述部分以及事件附加信息部分。事件描述部分是由模式定義標識(SchemaID)和一系列屬性的說明組成,每一個屬性ai由屬性類型(type)、屬性名(name)、操作符(Operator)以及屬性值(value)組成。其中,屬性類型和操作符由模式定義規定;事件附加信息部分可以包含附加信息所在節點的地址列表。本文采用簡單格式,僅將事件描述部分表示出來,以后在類型明確的情況下將省略類型信息的描述,例如事件E={(地點,=, “江蘇南京”)}中省略了“地點”的類型String。
3)訂閱格式
訂閱的作用是對用戶感興趣內容的描述,本文中訂閱的格式和事件的格式類似,包括模式定義標識和一系列屬性約束組成,如訂閱SschemaID={(地點,=, “江蘇南京”),(時間,>, 2008-9-20)}表達了訂閱者希望接收2008年9月20號以后地點在江蘇南京的事件。
一個訂閱的標識SubID由兩部分組成:hash(IP of subscriber)以及該訂閱中屬性約束的個數。
當訂閱者將訂閱S注冊到事件通知服務時,訂閱代理根據訂閱中每個屬性的類型以及屬性值所屬范圍映射到集結點。首先,訂閱代理利用哈希函數計算出每個屬性訂閱條件的鍵(標識)key=hash(t(ai):ai:range(v(ai))),其中參數“t(ai):ai:range(v(ai))”是屬性類型、屬性名稱和屬性值所在的類型區間的聯合字符串,哈希函數hash()是覆蓋網絡層提供的機制,通過key值可以將訂閱S上ai屬性的訂閱條件路由到節點標識與key相等或最接近的信息索引節點上,該節點就成為訂閱S中ai屬性的訂閱條件Si的訂閱集結點。
為了管理訂閱,每個集結點需要維護以下數據結構:
1) SchemaList: 模式管理表,保存不同模式下的訂閱情況。鍵是模式的名稱 SchemaName,值是屬性管理表AttribList;
2) AttribList: 屬性管理表,保存已經有訂閱的屬性情況。鍵是屬性的名稱AttribName和屬性類型Type的聯合字符串,值是區間列表RangeList;
3) RangeList: 區間列表,保存管理該屬性訂閱的集結點列表。鍵是hash(t(ai):ai:range(m)),即管理該屬性range(m)的集結點ID,值是操作符管理表OPList;
4) OPList: 操作符管理表,保存特定模式下的屬性的操作符列表。鍵是操作符名稱OPName,值為操作符訂閱樹OPTree;
5) OPTree: 操作符訂閱樹,將操作符上的訂閱按照操作符的語義組織成二叉檢索樹。
當集結點收到某屬性的訂閱條件Si之后,執行如圖4的訂閱管理算法。集結點先抽取訂閱Si中的模式信息(SchemaID)、類型信息(t(ai))、屬性名稱信息(ai)、類型值信息(v(ai))以及操作符信息(OP(ai)),根據這些信息依次查詢SchemaList、AttribList、OPList以及OPTree,最后按照分訂閱中的操作符OP(ai)選擇不同的OPTree調用OPTreeInsert(v(ai), SubID)將分訂閱插入其中。

圖4 訂閱管理算法
以訂閱S={(地點,=, “江蘇南京”), (內容,=, “集結”), (時間,>, 2008-9-21), (時間,≤, 2008-9-28)}為例闡述訂閱傳播情況,設系統發布/訂閱模式定義如表1所示,該模式定義規定了String和Time兩種類型,其中,String類型是Unicode序列,范圍從1個字節到128個字節,需要64個集結點并且只有一個操作符用來作String的相等匹配;Time類型表示是日期。
訂閱代理首先對S進行解析得到四個分訂閱Si(i=1,2,3,4),其中S1=(地點,=, “江蘇南京”),S2=(內容,=, “集結”),S3=(時間,>, 2008-9-21),S4=(時間,≤, 2008-9-28),之后節點按照發布訂閱模式抽取分訂閱中的內容進行集結點映射。為了闡述的一般性,以分訂閱S3為例,得到分訂閱的鍵值為key=hash(Time:“時間”:[2008-9-15, 2008-10-1))。假設節點r的標識等于key或者等于successor(key),分訂閱S3將被路由到節點r,在r中的OPList中操作符OP(a3)的OPTree中將添加一條記錄。
當訂閱者退訂時,因為分訂閱集結點數量較多,在逐一取消訂閱的過程中可能會發生錯誤,所以我們采取首先向訂閱集結點發送退訂消息,然后解析出分訂閱逐一向分訂閱集結點發送退訂消息的方法。另外訂閱者還可以在訂閱時制定一個TTL(Time To Live),超時后系統自動刪除訂閱,省去了退訂的操作。
當發布者發布事件E到事件通知服務時,其所屬信息索引節點(即事件代理)執行如圖5所示的算法進行事件匹配。事件代理首先提取事件中的事件模式標識(SchemaID)以及分事件Ei中的類型信息(t(ai))、屬性名稱信息(ai)以及屬性值信息(v(ai));之后遍歷區間列表RangeList將分事件發布到各分訂閱集結點上。分訂閱集結點收到事件后,執行匹配算法,返回滿足匹配條件的SubID;然后發布者統計出該訂閱擁有的分訂閱數量,根據SubID查詢訂閱集結點上關于該訂閱的信息,若訂閱屬性數等于統計出的分訂閱數量,就調用deliver(SubID)分發事件。

圖5 事件發布算法
以事件E={(地點,=, “江蘇南京”),(內容,=, “集結”),(時間,=, 2008-9-21)}、訂閱S1={(地點,=, “江蘇南京”),(時間,>, 2008-9-20)}、訂閱S2={(內容,=, “集結”),(時間,>, 2008-9-16),(時間,≤, 2008-9-30)}為例,闡述事件的發布和匹配過程。S1,S2訂閱后的分布式數據結構狀態如圖6所示。

圖6 訂閱示例
事件E有三個分事件,分別從分布式數據結構中查詢得到符合E1={(地點,=, “江蘇南京”)}的訂閱有S1,符合E2={(內容,=, “集結”)}的訂閱有S2,符合E3={(時間,=, 2008-9-21)}的訂閱序列為S1,S2,S2。統計得到E上S1有兩個分訂閱滿足條件,S2有三個分訂閱滿足條件,它們的個數分別和訂閱的屬性個數相等,按照事件發布匹配算法,事件E將會傳遞到這兩個訂閱者處。
事件經過匹配后發布代理就能夠直接將事件傳遞到每個訂閱者所屬TP處,但是這樣的做法效率極低,事件分發節點需要為每個訂閱建立一條傳輸通路,更為極端的是,如果一個TP下有多個訂閱者訂閱符合該事件,仍然需要為這幾個訂閱分別建立通路。這種情況下,事件分發的效率幾乎取決于事件分發節點,事件分發的時效性難以得到保證。
本文采用的基于Chord的廣播服務使用了TP節點指向表覆蓋范圍一定的特性,以事件分發節點為源,構建一個組播樹來分發事件,以此來提高事件分發的效率。
根據Chord節點指向表的特性,如果消息的標識objectID落在節點n.finger[i].interval內,n就將該消息轉發至n.finger[i].start節點,由該節點繼續轉發。使用這個特性,采用如圖7所示的算法來構建組播樹。

圖7 事件分發算法
例如,在8個節點的Chord網中,假設節點0是事件代理,有匹配訂閱的訂閱代理集合為{3,6,7}。那么,上面的算法將構建一棵如圖8所示灰色節點構成的組播樹,節點0就在這棵樹上分發事件。

圖8 組播樹示例
采用這樣的組播樹,可以統計事件發布的情況。當訂閱代理處有匹配的訂閱時,訂閱代理就負責接收訂閱者的反饋,統計出錯訂閱者的情況,按照事件分發的反向層層向事件代理遞交事件反饋。如上例中的節點3,6,7負責統計出各自負責的訂閱者的反饋消息,分別向節點2,4,6遞交,節點2,4則向事件代理0遞交事件分發結果。若沒有訂閱者出錯,則事件分發結束;否則節點0向出錯節點直接發送事件,直到確認訂閱者不在網絡中或者成功接收真實信息后結束分發。
針對聯合作戰實驗多種體系結構系統的數據交互問題,本文提出了一種基于應用層混合P2P網絡構建的訂閱/發布模型。通過該模型,在需要進行異構系統互聯互通時,僅需在系統數據服務應用層進行少量的改動,從而不需要改變原有系統的通信架構,即可滿足異構系統進行互聯互通的需求,由于混合P2P網絡技術成熟且開發難度較小,該模型具有一定的靈活性和易用性,下一步將深入研究大規模聯合仿真中的數據負載問題。