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