尹 超 孟獻(xiàn)軻 楊 巖
(中國(guó)電子科技集團(tuán)公司第二十八研究所 南京 210007)
COE通用操作環(huán)境(Common Operating Environment)是美軍所有信息系統(tǒng)的公共支撐軟件平臺(tái)。1999年COE向三層結(jié)構(gòu)轉(zhuǎn)變,用Java語言重寫主要軟件,增加了可移植性。2007年前后,美軍開發(fā)了Joint WebCOP(JWC)。JWC是GCCS系統(tǒng)家族的組成部分,使作戰(zhàn)人員通過標(biāo)準(zhǔn)瀏覽器(無需安裝任何插件)對(duì)戰(zhàn)場(chǎng)空間進(jìn)行實(shí)時(shí)或近實(shí)時(shí)的可視化。它與 GCCS-A[1]、GCCS-M、GCCS-J、戰(zhàn)區(qū)戰(zhàn)斗管理核心系統(tǒng)(TBMCS)、國(guó)家地理空間情報(bào)局(NGA)、國(guó)防信息系統(tǒng)局(DISA)關(guān)聯(lián),能夠提供基于Web的COP。
未來信息系統(tǒng)的發(fā)展趨勢(shì)是構(gòu)建在信息柵格網(wǎng)上的服務(wù)化應(yīng)用,其支撐技術(shù)是信息柵格服務(wù)、云計(jì)算等,傳統(tǒng)的客戶機(jī)-服務(wù)器(C/S)模式并非構(gòu)建此類大型分布式信息系統(tǒng)的最佳模式。Java技術(shù)體系是開放的技術(shù)體系,是未來開發(fā)面向網(wǎng)絡(luò)服務(wù)信息系統(tǒng)的首選技術(shù)體系。Java EE平臺(tái)提供了一個(gè)多層結(jié)構(gòu)的分布式的應(yīng)用程序模型,可以更快地開發(fā)和發(fā)布新的應(yīng)用解決方案。作為面向網(wǎng)絡(luò)服務(wù)的分布式系統(tǒng),在大量用戶訪問情況下,過多的資源請(qǐng)求和有限的服務(wù)器資源(內(nèi)存、CPU時(shí)間、網(wǎng)絡(luò)帶寬等)之間就會(huì)出現(xiàn)矛盾,應(yīng)用系統(tǒng)的性能優(yōu)化就顯得尤其重要。
本文研究了基于純瘦客戶端綜合態(tài)勢(shì)顯示、服務(wù)器主動(dòng)推送更新實(shí)時(shí)態(tài)勢(shì)數(shù)據(jù)及Java平臺(tái)性能優(yōu)化等關(guān)鍵技術(shù),構(gòu)建了基于Java平臺(tái)的B/S架構(gòu)態(tài)勢(shì)原型系統(tǒng),驗(yàn)證了Java平臺(tái)對(duì)指控應(yīng)用的支撐能力。
基于B/S架構(gòu)態(tài)勢(shì)原型系統(tǒng)是一個(gè)局域網(wǎng)環(huán)境下的分布式仿真系統(tǒng)[2~3]。系統(tǒng)運(yùn)行的硬件平臺(tái)是Intel Xeon 4核處理器,內(nèi)存大小3GB,硬盤大小500GB,1000M以太網(wǎng)卡。軟件環(huán)境是 Windows XP操作系統(tǒng),系統(tǒng)裝有Oracle數(shù)據(jù)庫(kù)。主要使用MyEclipse工具進(jìn)行開發(fā)。
構(gòu)建原型系統(tǒng)需要七臺(tái)服務(wù)器以及數(shù)臺(tái)客戶端,系統(tǒng)的體系結(jié)構(gòu)如圖1所示。
圖1 基于B/S架構(gòu)態(tài)勢(shì)原型系統(tǒng)體系結(jié)構(gòu)圖
系統(tǒng)采用SOA架構(gòu),接入三類態(tài)勢(shì)數(shù)據(jù)源服務(wù)[4]:數(shù)據(jù)庫(kù)態(tài)勢(shì)信息、路情模擬器態(tài)勢(shì)信息和空情模擬器態(tài)勢(shì)信息。態(tài)勢(shì)數(shù)據(jù)源向態(tài)勢(shì)目錄服務(wù)注冊(cè),態(tài)勢(shì)目錄服務(wù)將態(tài)勢(shì)源信息以XML格式發(fā)送給應(yīng)用服務(wù)器。當(dāng)客戶端向應(yīng)用服務(wù)器請(qǐng)求頁面時(shí),應(yīng)用服務(wù)器會(huì)將態(tài)勢(shì)源服務(wù)地址發(fā)送給客戶端,通過向態(tài)勢(shì)數(shù)據(jù)源服務(wù)器請(qǐng)求數(shù)據(jù)(AJAX)或者服務(wù)器推送數(shù)據(jù)(WebSocket)兩種方式,客戶端接收數(shù)據(jù)源態(tài)勢(shì)信息,并圖1中顯示。圖1中WebGIS服務(wù)器提供地圖及其數(shù)據(jù)服務(wù)。
為了將不同的態(tài)勢(shì)服務(wù)組織在一起,并高效地提供給用戶使用。本文提出的基于B/S架構(gòu)態(tài)勢(shì)原型系統(tǒng)主要對(duì)以下幾個(gè)方面的技術(shù)進(jìn)行了研究。
為了使態(tài)勢(shì)目錄服務(wù)能夠發(fā)現(xiàn)并接受各類態(tài)勢(shì)數(shù)據(jù)源服務(wù)的注冊(cè),本文提供了數(shù)據(jù)源服務(wù)集成標(biāo)準(zhǔn)。主要包括數(shù)據(jù)源服務(wù)注冊(cè)接口和數(shù)據(jù)交換格式標(biāo)準(zhǔn)。
(1)數(shù)據(jù)源服務(wù)注冊(cè)接口
通過數(shù)據(jù)源服務(wù)注冊(cè)接口,數(shù)據(jù)源服務(wù)將態(tài)勢(shì)圖層描述信息(XML格式)發(fā)送給態(tài)勢(shì)目錄服務(wù)。態(tài)勢(shì)目錄服務(wù)把圖層描述集中發(fā)布成態(tài)勢(shì)目錄,共應(yīng)用服務(wù)器訪問。態(tài)勢(shì)圖層描述文件主要包含圖層標(biāo)題、圖層唯一標(biāo)識(shí)、圖層數(shù)據(jù)訪問地址、圖層字段描述信息等。
(2)數(shù)據(jù)交換格式標(biāo)準(zhǔn)
為了實(shí)現(xiàn)各類態(tài)勢(shì)數(shù)據(jù)源服務(wù)數(shù)據(jù)的統(tǒng)一管理以及和態(tài)勢(shì)客戶端之間交換數(shù)據(jù),本文還提出了態(tài)勢(shì)數(shù)據(jù)交換格式的標(biāo)準(zhǔn),采用JSON格式表示。JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,它是基于JavaScript的一個(gè)子集。JSON采用完全獨(dú)立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣。這些特性使JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。JavaScript原生支持JSON,可以存儲(chǔ)JavaScript復(fù)合對(duì)象,有著XML不可比擬的優(yōu)勢(shì)??紤]通用性和靈活性,標(biāo)準(zhǔn)主要包含基本要素和擴(kuò)展要素?;疽刂饕〝?shù)據(jù)源名稱、元素名稱、元素唯一表示、經(jīng)緯度等;擴(kuò)展要素主要用于其他業(yè)務(wù)補(bǔ)充各自的業(yè)務(wù)數(shù)據(jù)。
態(tài)勢(shì)空情數(shù)據(jù)的接入需要在瀏覽器與服務(wù)器之間實(shí)現(xiàn)即時(shí)通訊,通常采用的技術(shù)都是輪詢。輪詢是在特定的時(shí)間間隔(如每1s),由瀏覽器對(duì)服務(wù)器發(fā)出HTTP request,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端。這種傳統(tǒng)的HTTP request模式帶來很明顯的缺點(diǎn),瀏覽器需要不斷地向服務(wù)器發(fā)出請(qǐng)求,然而HTTP request的header是非常長(zhǎng)的,里面包含的數(shù)據(jù)可能只是一個(gè)很小的值,這樣會(huì)占用很多的帶寬。比較新的去做輪詢的技術(shù)是Comet,雖然這種技術(shù)可達(dá)到全雙工通信,但依然需要發(fā)送請(qǐng)求。
面對(duì)這種狀況,HTML5定義了 WebSocket協(xié)議[6],能夠更好地節(jié)省服務(wù)器資源和帶寬并達(dá)到實(shí)時(shí)通訊的效果。在WebSocket API中,瀏覽器和服務(wù)器只需要做一個(gè)握手的動(dòng)作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就可以直接進(jìn)行全雙工數(shù)據(jù)傳送。WebSocket協(xié)議為我們實(shí)現(xiàn)即時(shí)服務(wù)帶來了兩大好處:一是互相溝通的Header是很小的,大概只有2Bytes;二是服務(wù)器可以主動(dòng)傳送數(shù)據(jù)給客戶端。通過實(shí)驗(yàn)對(duì)比,發(fā)現(xiàn)無論從系統(tǒng)資源占用情況還是從數(shù)據(jù)發(fā)送效率來看,數(shù)據(jù)主動(dòng)推送都優(yōu)于輪訓(xùn)方式。在本系統(tǒng)實(shí)現(xiàn)中,服務(wù)器每一秒鐘向連接請(qǐng)求的客戶端發(fā)送一次實(shí)時(shí)數(shù)據(jù)。
Web圖形繪制通常采用SVG技術(shù)。SVG是基于XML的圖形矢量顯示技術(shù),可以將其與CSS混搭使用,也可以使用SVG DOM動(dòng)態(tài)向其添加行為。
在新的 HTML5標(biāo)準(zhǔn)中引入了 Canvas[7],Canvas可以用來進(jìn)行繪制圖形、繪制游戲的圖案或者其他圖形圖案,允許使用腳本動(dòng)態(tài)渲染點(diǎn)陣圖像。簡(jiǎn)單來說,Canvas就是允許在HTML5中,使用JavaScript去繪制喜歡的任何圖形,包括文字、圖片、線、點(diǎn)、各種形狀等。此外,隨著硬件技術(shù)的提升,現(xiàn)代瀏覽器具有GPU加速功能,為HTML5的Canvas使用提供了更好的環(huán)境,當(dāng)向Canvas發(fā)出繪畫命令時(shí),瀏覽器直接將指令發(fā)送到圖形加速器而不需要開發(fā)者更多的干預(yù),硬件圖形加速器則以難以置信的運(yùn)算速度實(shí)時(shí)繪畫和渲染圖形。Canvas為大數(shù)據(jù)量的矢量數(shù)據(jù)在無插件的HTML文檔中,平滑、流暢的呈現(xiàn),提供了新的解決方案。
相比于SVG,Canvas具有兩個(gè)明顯的優(yōu)勢(shì),一是在繪制復(fù)雜圖像時(shí),Canvas的繪制速度比SVG快很多;二是SVG需要在瀏覽器中使用插件才能顯示,而Canvas僅需要JavaScript的支持。
本系統(tǒng)使用Canvas實(shí)現(xiàn)了對(duì)渲染要素的添加、刪除和選擇操作。
系統(tǒng)性能優(yōu)化就是提高已有系統(tǒng)的性能,減少如CPU、內(nèi)存、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)帶寬等資源的占用。一般是通過壓力測(cè)試或者在使用過程中發(fā)現(xiàn)性能方面的問題,然后尋找性能瓶頸,并結(jié)合項(xiàng)目進(jìn)度、人員安排、技術(shù)儲(chǔ)備等因素,提出相應(yīng)的優(yōu)化策略。本文主要從性能的角度出發(fā),結(jié)合我們的技術(shù)架構(gòu),討論Java EE應(yīng)用程序代碼性能的優(yōu)化和提升,提出了以下幾條應(yīng)用優(yōu)化準(zhǔn)則[8~10],諸如硬件環(huán)境、數(shù)據(jù)庫(kù)環(huán)境等未在討論范圍之內(nèi)。
1)盡量重用對(duì)象,避免創(chuàng)建過多短時(shí)對(duì)象;
2)在循環(huán)處多下功夫;
3)盡量減少I/O操作,并使用緩存;
4)Servlet中盡量不使用同步;
5)大型數(shù)據(jù)量分批獲取,緩存常用數(shù)據(jù);
6)避免內(nèi)存泄漏。
圖2和圖3是系統(tǒng)優(yōu)化前后,客戶端數(shù)量與服務(wù)器性能關(guān)系圖。
圖2 優(yōu)化前客戶端數(shù)量與服務(wù)器性能關(guān)系
圖3 優(yōu)化后客戶端數(shù)量與服務(wù)器性能關(guān)系
本文圍繞系統(tǒng)體系架構(gòu)及關(guān)鍵技術(shù)實(shí)現(xiàn),提出了一種基于B/S架構(gòu)的態(tài)勢(shì)原型系統(tǒng),并對(duì)其性能優(yōu)化進(jìn)行了研究。系統(tǒng)提供了標(biāo)準(zhǔn)的數(shù)據(jù)源服務(wù)注冊(cè)接口和數(shù)據(jù)交換格式規(guī)范,并利用HTML5的WebSocket及Canvas新特性,提高了數(shù)據(jù)傳輸?shù)男屎蛻B(tài)勢(shì)元素上圖顯示的效率,降低了系統(tǒng)資源開銷,提升了軟件運(yùn)行速度。驗(yàn)證了Java平臺(tái)對(duì)指揮控制軟件的支撐能力。
[1]袁可亮,吳峻,何光濤.美軍二十一世紀(jì)部隊(duì)旅及旅以下作戰(zhàn)指揮系統(tǒng)[J].山西電子技術(shù),2007(1):90-91.
[2]吳宇,康鳳舉,倪新堯.一種魚雷武器分布交互仿真系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].艦船電子工程,2003(5):65-68.