崔爽,于國權(quán)
(中國科學(xué)院 長春光學(xué)精密機械與物理研究所,長春 130033)
HLA(high level architecture)/RTI(Run-Time Infrastructure)是新一代的分布式仿真體系結(jié)構(gòu)框架,它能很好的支持各種仿真模型之間的互操作和可重用[1]?;贖LA(HighLevelArchitecture)的光電對抗半實物仿真系統(tǒng)的主要功能及目的是用于對設(shè)備的鑒定,這就需要對仿真過程中邦員的狀態(tài)數(shù)據(jù)和邦員間各種交互行為數(shù)據(jù)進行及時、完整的采集,以便于在仿真完成后為仿真參與者提供深入的關(guān)于仿真過程的各種信息,進而對設(shè)備進行評估和測試等[2,3]。數(shù)據(jù)庫的介入,可以方便的輔助仿真過程中數(shù)據(jù)的存儲以及事后的回放、評估和測試,成為HLA仿真結(jié)果VV&A的重要手段[2,3]。但是由于數(shù)據(jù)庫對于數(shù)據(jù)的存儲速率無法滿足仿真過程中所產(chǎn)生的大批量實時數(shù)據(jù),而且一旦仿真過程中服務(wù)器出現(xiàn)問題,實時數(shù)據(jù)將完全丟失,將為試驗帶來巨大損失。鑒于這些問題,論文提出了使用分布式存儲的方法,該方法構(gòu)建了一個簡單的分布式存儲系統(tǒng),首先劃分多個分布式緩沖區(qū),每當(dāng)其中一個緩沖區(qū)滿后就調(diào)用switch中間件將數(shù)據(jù)批量寫入隨機選取的當(dāng)前空閑的數(shù)據(jù)庫服務(wù)器,這樣既彌補了數(shù)據(jù)庫磁盤I/O瓶頸問題,同時分布式存儲的使用也極大地提高了系統(tǒng)的可靠性,因為任何一臺服務(wù)器出現(xiàn)問題時,系統(tǒng)都會將緩沖區(qū)中的數(shù)據(jù)轉(zhuǎn)向存儲到其它正常的數(shù)據(jù)庫服務(wù)器中,最后將該方法應(yīng)用到了光電對抗半實物仿真試驗系統(tǒng)中。
光電對抗半實物仿真系統(tǒng)所要采集的數(shù)據(jù)主要有兩個方面[4,5]。
一方面主要指仿真系統(tǒng)運行之前所需要的準(zhǔn)備數(shù)據(jù),還有就是人工采集的數(shù)據(jù)和操作數(shù)據(jù),這些數(shù)據(jù)被統(tǒng)稱為靜態(tài)數(shù)據(jù)。
另一方面就是仿真系統(tǒng)運行過程中生成的數(shù)據(jù),這些數(shù)據(jù)被稱為實時數(shù)據(jù),具有頻率高和數(shù)據(jù)量大的特點。
對于靜態(tài)數(shù)據(jù)來說,由于不用考慮傳輸速率,直接采用基于C/S架構(gòu)的Oracle應(yīng)用程序就可以實現(xiàn)對靜態(tài)數(shù)據(jù)的采集和存儲。
難點在于如何實現(xiàn)對實時數(shù)據(jù)采集存儲,考慮當(dāng)前的一些存儲辦法,無論是選擇數(shù)據(jù)庫存儲還是直接進行硬盤存儲,其實時存儲能力都無法滿足對仿真過程中實時生成的大批量的實時數(shù)據(jù)的存儲,而且一旦存儲計算機在仿真過程中發(fā)生問題,如斷電、網(wǎng)絡(luò)中斷或是系統(tǒng)崩潰等,都將丟失仿真數(shù)據(jù),因此整個仿真試驗也將宣布失敗,將給仿真試驗帶來具大的損失。為此,設(shè)計并提出了一種半實物仿真數(shù)據(jù)實時存儲方法來解決這些問題,接下來將對該方法做詳細(xì)的論述。
鑒于實時性和可靠性的要求,本文提出了分布式存儲方法,該方法的思想是建立在分布式操作系統(tǒng)的基礎(chǔ)之上的,多臺數(shù)據(jù)庫服務(wù)器同時完成一個存儲功能[6],提高了數(shù)據(jù)存儲速率,并且任何一臺或者幾臺服務(wù)器出現(xiàn)故障,都不會影響整個存儲過程的繼續(xù),保證了數(shù)據(jù)存儲的完整性和可靠性。該方法的主要結(jié)構(gòu)設(shè)計如圖1所示。
圖1 分布式存儲結(jié)構(gòu)設(shè)計Fig.1 Structure design of distributed storage
首先建立多個分布式緩沖區(qū),要求緩沖區(qū)的個數(shù)要大于所使用的服務(wù)器個數(shù),并且分布式緩沖區(qū)的容量要大于單個服務(wù)器寫磁盤緩沖區(qū)的容量,緩沖區(qū)可以是一個具有指定長度的Buffer,也可以是一個指定長度的數(shù)組,因具體情況而定。
SWITCH中間件的主要功能是隨即切換數(shù)據(jù)庫服務(wù)器,通過遍歷當(dāng)前活躍的服務(wù)器,從中選取處在空閑狀態(tài)的服務(wù)器,并將已經(jīng)寫滿的分布式緩沖區(qū)中的數(shù)據(jù)存儲到該服務(wù)器中。設(shè)計規(guī)則是為每個服務(wù)器設(shè)置一個時間戳,初始時設(shè)置為0,構(gòu)成一個時間戳列表,當(dāng)某個分布式緩沖區(qū)滿后,SWITCH中間件就遍歷時間戳列表,從中尋找一個最小值,并將當(dāng)前系統(tǒng)時間賦值給該時間戳,同時與該服務(wù)器建立連接,如果連接成功,就將緩沖區(qū)中的數(shù)據(jù)存儲到該服務(wù)器,否則從時間戳列表中刪除該服務(wù)器,認(rèn)為該服務(wù)器故障,并繼續(xù)遍歷時間戳列表,尋找次小值,依次循環(huán),直到試驗結(jié)束。SWITCH中間件的工作流程如圖2所示。
圖2 SWITCH工作流程Fig.2 Work flow of SWITCH
最后確立分布式存儲使用的服務(wù)器數(shù)量,視具體情況而定,一般小型半實物仿真系統(tǒng)使用兩臺即可,大型的半實物仿真系統(tǒng)則需要三臺以上。
下面對分布式存儲方法和直接向單一數(shù)據(jù)庫進行數(shù)據(jù)存儲進行測試比較。測試條件:連續(xù)存儲2000幀數(shù)據(jù),幀間隔為10ms,每幀數(shù)據(jù)量為50字段*4個字節(jié)。將測試結(jié)果以圖表的形式展示如下圖3、4所示。
圖3 不使用分布式存儲Fig.3 Unused distributed storage
圖4 使用分布式存儲Fig.4 Used distributed storage
圖表中縱坐標(biāo)為存儲每幀數(shù)據(jù)所使用的時間,橫坐標(biāo)為數(shù)據(jù)幀次,即第幾幀。從兩個圖表中可以看出:
在不使用分布式存儲的情況下,數(shù)據(jù)向數(shù)據(jù)庫中寫入時,不是每寫入一條,Oracle數(shù)據(jù)庫服務(wù)器就將數(shù)據(jù)寫入磁盤,而是先將數(shù)據(jù)寫入Oracle數(shù)據(jù)庫緩沖區(qū),等緩沖區(qū)數(shù)據(jù)寫滿之后,才將數(shù)據(jù)導(dǎo)入到磁盤,這樣在整個數(shù)據(jù)插入過程中,就會出現(xiàn)幾幀使用的時間特別大,這幾幀就是Oracle數(shù)據(jù)庫將緩沖區(qū)中的數(shù)據(jù)導(dǎo)入磁盤的過程。而正是因為這幾幀使用的時間特別大,會導(dǎo)致接下來的一幀或是幾幀數(shù)據(jù)的丟失,嚴(yán)重影響了仿真時序的推進,而且這些還需要建立在數(shù)據(jù)庫服務(wù)器在整個試驗過程中沒有任何錯誤的情況下,一旦服務(wù)器出現(xiàn)故障,整個存儲系統(tǒng)將崩潰,將給仿真系統(tǒng)帶來巨大損失。
使用分布式存儲之后,數(shù)據(jù)先是保存在分布式緩沖區(qū)中,當(dāng)一個緩沖區(qū)寫滿之后,就觸發(fā)寫數(shù)據(jù)庫線程,然后再向另一個緩沖區(qū)寫數(shù)據(jù),再觸發(fā)寫數(shù)據(jù)庫線程,如此反復(fù),將所有數(shù)據(jù)都寫入Oracle數(shù)據(jù)庫。從測得的時間數(shù)據(jù)可以看出,整個數(shù)據(jù)插入過程中,不會出現(xiàn)某一幀使用的時間特別答的現(xiàn)象,只是在數(shù)據(jù)庫寫磁盤的時候,在時間上有個連續(xù)的小波動,這是由于線程之間競爭資源導(dǎo)致的,但這個波動非常小,一般每幀不超過2ms,不會影響下一個周期的仿真數(shù)據(jù)存儲,可以忽略不計;此外,即使在試驗的過程中,某臺或是某幾臺數(shù)據(jù)庫服務(wù)器出現(xiàn)問題,都不會影響整個存儲過程,使得仿真數(shù)據(jù)不會產(chǎn)生丟失的現(xiàn)象,保證了仿真實時數(shù)據(jù)的完整性和數(shù)據(jù)存儲的實時性。
實時數(shù)據(jù)主要是在仿真系統(tǒng)運行過程中產(chǎn)生的,包括聯(lián)邦成員更新的數(shù)據(jù)和聯(lián)邦成員之間的交互數(shù)據(jù)。實時數(shù)據(jù)采集模式使用的是采集邦員的方法,即設(shè)置一個專門的邦員,讓其訂購所有的數(shù)據(jù)并在數(shù)據(jù)到達時記錄數(shù)據(jù),充分體現(xiàn)了它的簡單和方便特性;同時此邦員通過分布式緩沖區(qū),借助switch中間件的數(shù)據(jù)庫服務(wù)器切換功能,將實時生成的數(shù)據(jù)全部采集并分別存儲到多個Oracle數(shù)據(jù)庫服務(wù)器中,用來分析、研究、測試、評估和鑒定具體的設(shè)備,進而實現(xiàn)了光電對抗半實物仿真的主要目的和功能。實時數(shù)據(jù)采集模式的結(jié)構(gòu)框架如圖5。
圖5 實時數(shù)據(jù)采集模式結(jié)構(gòu)框架Fig.5 Structure of real-time data collection mode
仿真過程是時間推進的,其頻率很高,大概在100Hz左右,圖6只是描述仿真推演的一個周期內(nèi)的數(shù)據(jù)采集過程。采集聯(lián)邦成員訂購所有的數(shù)據(jù)并在數(shù)據(jù)到達時記錄數(shù)據(jù)。采集聯(lián)邦成員在整個聯(lián)邦中被動地收集數(shù)據(jù),它只是訂購在FOM中定義的所有數(shù)據(jù),將反射屬性和接收到的交互類存儲到分布式緩沖區(qū)中,然后觸發(fā)SWITCH中間件,將數(shù)據(jù)寫入到當(dāng)前活躍的Oracle數(shù)據(jù)庫服務(wù)器中。
本文分析了光電對抗半實物仿真系統(tǒng)采集數(shù)據(jù)的類型,發(fā)現(xiàn)了實時數(shù)據(jù)存儲這一難點;提出了使用分布式存儲方法來實現(xiàn)對大批量實時數(shù)據(jù)進行存儲的方法,同時將使用分布式存儲方法進行存儲和直接向數(shù)據(jù)庫進行數(shù)據(jù)插入這兩種方法作了對比,通過比較分析了使用分布式存儲方法的優(yōu)點,解決了Oracle數(shù)據(jù)庫管理系統(tǒng)的磁盤I/O瓶頸問題,大大提高了仿真系統(tǒng)的數(shù)據(jù)實時存儲性能,同時該方法通過多個服務(wù)器的使用大大提高了系統(tǒng)數(shù)據(jù)存儲的可靠性;最后實現(xiàn)了這一方法在光電對抗半實物仿真系統(tǒng)中的應(yīng)用。
[1]馮貴江,李言俊,張科,等.基于HLA光電對抗仿真系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機工程設(shè)計 2008(4):2055-2058.
[2]厲明,紀(jì)勇,賈宏光,等.基于快速仿真原型的飛行器半物理仿真系統(tǒng)[J].光學(xué) 精密工程,2008,16(10):1949-1955.
[3]趙煒渝.光電對抗仿真試驗技術(shù)[J].紅外與激光工程,2001,30(3):171-175.
[4]李艷峰,劉延斌,金光.機載光電平臺地面測試系統(tǒng)目標(biāo)模擬分系統(tǒng)的建模與半物理仿真實現(xiàn)[J].光學(xué)精密工程,2004(2):193-196.
[5]蔣夏軍,李蔚清,吳慧中.高級分布式仿真中的數(shù)據(jù)收集技術(shù)研究[J].系統(tǒng)仿真學(xué)報,2004(8):1758-1767.
[6]向方.基于內(nèi)存數(shù)據(jù)庫的HLA仿真數(shù)據(jù)收集方法研究[J].數(shù)據(jù)庫及信息管理,2007(7):596-597.