朱建紅 陸保國
(中國電子科技集團公司第二十八研究所 江蘇 210007)
當前C4I系統(tǒng)的體系結(jié)構(gòu)正處在向構(gòu)件化、服務化的方向發(fā)展,隨著我軍新一代裝備的陸續(xù)加入、新型的網(wǎng)絡設(shè)施以及嶄新的軟件開發(fā)模式的應用都對分布式實時環(huán)境下的數(shù)據(jù)分發(fā)服務(Data Distribution Service,DDS)提出了更高的需求。隨著各種類型數(shù)據(jù)源的大量出現(xiàn),信息處理系統(tǒng)需要將不同地點和不同時間的數(shù)據(jù)進行整合,數(shù)據(jù)分發(fā)過程隨著數(shù)據(jù)需求的多樣性而變得更加復雜,數(shù)據(jù)分發(fā)不僅需要建立兩者間的數(shù)據(jù)傳遞關(guān)系,還需要提供數(shù)據(jù)在時間、空間和功能上的擴展能力。目前,國外已經(jīng)有比較成熟的DDS產(chǎn)品,像美國RTI(Real -Time Innovations,Inc.)公司的 NDDS(Network Data Distribution Service)已經(jīng)廣泛應用到了美國海、陸、空、航天各個領(lǐng)域。而我國對分布式實時通信環(huán)境下數(shù)據(jù)分發(fā)服務的研究尚處于起步階段。
本文針對當前指揮控制系統(tǒng)中對分布式情況下結(jié)構(gòu)化數(shù)據(jù)的實時傳輸和共享需求,提出了一個以數(shù)據(jù)為中心的網(wǎng)絡中間件,采用發(fā)布/訂閱通信模式,結(jié)合輕量級的數(shù)據(jù)交換格式JSON(JavaScript Object Notation),提供了統(tǒng)一、一致的應用程序編程接口AP I,為實時環(huán)境下以數(shù)據(jù)為中心的分布式應用提供高效、有用的通信服務。
JSON是一種用于標記JavaScript對象的數(shù)據(jù)交換格式。不僅易于人類閱讀和編程,同時易于機器解析和生成。JSON是采用完全獨立于語言的文本格式,但是也使用了類似于各種語言的習慣(C,C++,Object-C,C#,JAVA,JavaScript,Python,Ruby等),這些特性使JSON成為理想的數(shù)據(jù)交換語言。
JSON是一個輕量級的數(shù)據(jù)交換格式,和XML一樣是基于純文本的,但是JSON的數(shù)據(jù)格式非常簡單靈活,用之進行數(shù)據(jù)交換是一個很好的選擇。JSON和XML最大的不同在于XML是一個完整的標記語言,而JSON不是。XML在數(shù)據(jù)存儲,擴展性和高級檢索方面具備對JSON的優(yōu)勢,而JSON則比XML更加小巧,靈活,更容易解析,有著更好的序列化性能,更適合于網(wǎng)絡數(shù)據(jù)傳輸。
JSON協(xié)議中總共定義了6種數(shù)據(jù)格式:
①string,其格式為:“abc”;
②number,其格式為:12345(int),12.356(float);
③boolean,其格式為:true或false(沒有雙引號,否則被視為一個string);
④空字符,null(小寫)。
⑤array,使用[]包含所有元素,每個元素用逗號隔開,元素可以是任意的 value,其格式為:[“abc”,1234,false,null];
⑥Object,使用{}包含的一系列無序的key-value鍵值對表示的,和JAVA中的Map
本文需要將結(jié)構(gòu)化的數(shù)據(jù)抽象成JSON的對象,這就需要在JSON的對象中包含數(shù)據(jù)對象名稱,數(shù)據(jù)條數(shù),數(shù)據(jù)結(jié)構(gòu)描述,數(shù)據(jù)內(nèi)容等四個方面,結(jié)合JSON提供的6種數(shù)據(jù)格式我們采用array和object兩種數(shù)據(jù)格式和表達結(jié)構(gòu)化數(shù)據(jù)的內(nèi)容。
首先用一個名稱為”root”的object表示整個結(jié)構(gòu)化數(shù)據(jù);
再分別用名稱為"objname"和"rowcnt"的 object表示數(shù)據(jù)對象名稱和數(shù)據(jù)條數(shù);
再用一個名稱為”struct”的 array表示數(shù)據(jù)的結(jié)構(gòu),其中包含字段名稱,字段類型和字段大小,在該array中每個字段都用相應的item表示,以便和下面描述的數(shù)據(jù)內(nèi)容映射;
最后用一個名稱為”content”的array來表示數(shù)據(jù)內(nèi)容,每行數(shù)據(jù)分別用一個 object作為該 array的元素,而在每個 object中用一個object來描述該數(shù)據(jù)行的行號,并用相應的item來表示關(guān)聯(lián)字段的值。
至此我們就可以將一個結(jié)構(gòu)化的數(shù)據(jù)抽象為JSON對象的數(shù)據(jù)格式,然后可以通用JSON協(xié)議提供的序列化函數(shù)將JSON對象序列化為二進制數(shù)據(jù)進行網(wǎng)絡傳輸。以下是抽象的 JSON對象:
“root”
{
"objname":"機場數(shù)據(jù)",
"rowcnt":"3",
"struct"
[
"item1":"機場,varchar,200",
"item2":"地區(qū),varchar,50",
"item3":"經(jīng)度,number,(5,2)",
"item4":"緯度,number,(5,2)",
]
"content"
[
{
"contentno":"1",
"item1":"楊村",
"item2":"北京",
"item3":"117.05",
"item4":"39.22"
},
{
"contentno":"2",
"item1":"濰坊",
"item2":"山東",
"item3":"119.07",
"item4":"36.38"
}
]
}
數(shù)據(jù)分發(fā)實現(xiàn)結(jié)構(gòu)化數(shù)據(jù)的實時共享,通過分布式的共享關(guān)系管理確定特定數(shù)據(jù)對象的分發(fā)方向,當數(shù)據(jù)源產(chǎn)生數(shù)據(jù)時觸發(fā)分發(fā)事件,將帶結(jié)構(gòu)元信息的數(shù)據(jù)包發(fā)到數(shù)據(jù)用戶,數(shù)據(jù)用戶根據(jù)接收到數(shù)據(jù)包的內(nèi)容觸發(fā)相應的處理流程。數(shù)據(jù)用戶可按需執(zhí)行數(shù)據(jù)分析、數(shù)據(jù)入庫等操作。
信息流程包含注冊階段和分發(fā)階段。注冊階段為數(shù)據(jù)源系統(tǒng)發(fā)布數(shù)據(jù)、數(shù)據(jù)用戶系統(tǒng)訂閱數(shù)據(jù),形成數(shù)據(jù)共享關(guān)系;分發(fā)階段為數(shù)據(jù)源系統(tǒng)提交數(shù)據(jù)、觸發(fā)數(shù)據(jù)分發(fā),數(shù)據(jù)用戶系統(tǒng)獲取并使用數(shù)據(jù),完成數(shù)據(jù)共享過程。詳細流程如下:
(1)數(shù)據(jù)發(fā)布:作戰(zhàn)應用通過數(shù)據(jù)分發(fā)接口提交數(shù)據(jù)發(fā)布請求。
(2)數(shù)據(jù)源注冊:數(shù)據(jù)分發(fā)服務接到請求后,驗證合法性,并向數(shù)據(jù)中心注冊該數(shù)據(jù)源,數(shù)據(jù)中心將數(shù)據(jù)格式、數(shù)據(jù)源系統(tǒng)信息存入數(shù)據(jù)目錄。
(1)數(shù)據(jù)訂閱:數(shù)據(jù)用戶系統(tǒng)的應用通過數(shù)據(jù)分發(fā)接口提交數(shù)據(jù)訂閱請求。
(2)數(shù)據(jù)用戶注冊:數(shù)據(jù)分發(fā)服務接到請求后,驗證合法性,并向數(shù)據(jù)中心注冊該數(shù)據(jù)用戶,數(shù)據(jù)中心將數(shù)據(jù)訂閱信息存入數(shù)據(jù)目錄,并向數(shù)據(jù)源系統(tǒng)的分發(fā)服務部署訂閱信息;注冊成功后,數(shù)據(jù)用戶系統(tǒng)的數(shù)據(jù)分發(fā)服務在本系統(tǒng)部署數(shù)據(jù)訂閱信息,將訂閱進程和數(shù)據(jù)類型進行綁定。
數(shù)據(jù)的發(fā)布和訂閱除了上述的由應用調(diào)用API的方式外,還應支持管理員注冊模式。通過數(shù)據(jù)中心的管理系統(tǒng),進行數(shù)據(jù)、數(shù)據(jù)源、數(shù)據(jù)用戶的添加,進行數(shù)據(jù)發(fā)布的集中管理。
(1)數(shù)據(jù)提交:業(yè)務應用通過數(shù)據(jù)分發(fā)接口,向方法服務提交數(shù)據(jù)。
(2)數(shù)據(jù)傳輸:根據(jù)數(shù)據(jù)分發(fā)的配置信息,處理接收到的數(shù)據(jù)提交請求,按照(元數(shù)據(jù),數(shù)據(jù)內(nèi)容)的格式進行數(shù)據(jù)包組織,并發(fā)送到對應的數(shù)據(jù)分發(fā)目的端。
(1)數(shù)據(jù)通知:目的端的數(shù)據(jù)分發(fā)服務接收到結(jié)構(gòu)化的數(shù)據(jù)包后,根據(jù)數(shù)據(jù)分發(fā)配置信息確定接收和使用數(shù)據(jù)的業(yè)務應用,通知到業(yè)務應用,由業(yè)務應用通過封裝號的數(shù)據(jù)查詢接口進行數(shù)據(jù)查詢。通知的方式包括網(wǎng)絡消息和回調(diào)函數(shù)兩種。
(2)數(shù)據(jù)入庫:業(yè)務應用可按實際需求通過數(shù)據(jù)庫的訪問接口進行數(shù)據(jù)的本地入庫。也可有分發(fā)服務自動入庫,但目的端的數(shù)據(jù)庫結(jié)構(gòu)定義必須與發(fā)布的數(shù)據(jù)對象的結(jié)構(gòu)定義一致。
下圖是數(shù)據(jù)分發(fā)工作流程圖:
圖2 數(shù)據(jù)分發(fā)流程圖
本文以我軍指控系統(tǒng)為研究背景,以數(shù)據(jù)的實時共享為目標,以對象序列化技術(shù)為基礎(chǔ),基于核心支撐平臺實現(xiàn)了數(shù)據(jù)源和數(shù)據(jù)用戶的有機融合,提供系統(tǒng)間基于數(shù)據(jù)的聯(lián)動機制。主要有以下特點:
①實時的數(shù)據(jù)傳送。基于網(wǎng)絡底層傳輸機制、消息隊列等,實時地傳送需要共享的數(shù)據(jù),提高數(shù)據(jù)共享的時效性,實現(xiàn)數(shù)據(jù)保鮮。
②服務化的共享關(guān)系管理。基于數(shù)據(jù)發(fā)布、訂閱、通知等服務化機制,實現(xiàn)數(shù)據(jù)源和數(shù)據(jù)用戶的解耦。
③結(jié)構(gòu)化數(shù)據(jù)的深層共享。遵循數(shù)據(jù)分類和數(shù)據(jù)標準,以帶自解析能力的格式在網(wǎng)絡上發(fā)布和傳輸,使用者可根據(jù)共享數(shù)據(jù)本身理解數(shù)據(jù)的結(jié)構(gòu)。
[1]李軍,“數(shù)據(jù)分發(fā)服務中的全局數(shù)據(jù)空間(GDS)的研究與設(shè)計”,船舶電子工程,Vol.30,No.4,2010.
[2]張濤,黃強,毛雅磊,“一個基于JSON的對象序列化算法”,計算機工程與應用,Vol.43,No.15,1970.
[3]馬衛(wèi)東,李幼平,“數(shù)據(jù)分發(fā)軟件設(shè)計分發(fā)”計算機應用,vol.55,no.4,pp.913–918,2005.
[4]李策,金建中,“陸軍作戰(zhàn)戰(zhàn)術(shù)數(shù)據(jù)分發(fā)研究”指揮控制和仿真,vol.32,no.2,pp.29–34,2010.
[5]魯杰,王永斌,劉宏波,“基于XML 的報務系統(tǒng)數(shù)據(jù)分發(fā)機制研究”計算機工程與設(shè)計,vol.31,no.12,pp.2707–2709,2010.
[6]溫水生,周琪云,江接寶,張任龍,胡斌“面向服務的數(shù)據(jù)分發(fā)機制的研究與實現(xiàn)”計算機與現(xiàn)代化,pp.128–135,2012.