李俊君 劉永亮 于德安 常海昕 杜詩睿



關(guān)鍵詞:樹狀指標(biāo)體系;效能評估;建模工具; 麒麟操作系統(tǒng);達(dá)夢數(shù)據(jù)庫
中圖分類號:TP317.1 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2024)03-0097-03
0 引言
效能指解決方案的能力滿足問題需求的狀況,效能指標(biāo)指判斷解決方案的能力是否滿足問題需求的衡量標(biāo)準(zhǔn)[1],效能評估則是基于效能指標(biāo)來預(yù)計(jì)、檢驗(yàn)武器裝備實(shí)現(xiàn)作戰(zhàn)任務(wù)目標(biāo)的效果[2]。傳統(tǒng)效能評估軟件多從效能評估算法開發(fā)方面創(chuàng)新,較少對效能評估流程進(jìn)行創(chuàng)新,李彬等設(shè)計(jì)的基于Web的效能評估仿真架構(gòu)對此問題做了探索[3],但其架構(gòu)前端采用的流程圖設(shè)計(jì)類庫Raphaeld功能簡單,且最近的版本發(fā)布日期仍停留在2019年8月①,架構(gòu)后端使用的spring 雖然是輕量級框架,但相對于一些其他的框架,卻稍顯臃腫[4]。馬佳楠等[5] 將B/S(瀏覽器- 服務(wù)器,Browser-Server) 架構(gòu)應(yīng)用于航天測控領(lǐng)域的效能評估系統(tǒng)開發(fā),實(shí)踐證明通過有效設(shè)計(jì)此架構(gòu)可以滿足航天測控網(wǎng)靈活的效能評估需求。
1 架構(gòu)設(shè)計(jì)
構(gòu)建工具運(yùn)行于銀河麒麟操作系統(tǒng),使用達(dá)夢8 作為存儲數(shù)據(jù)庫,架構(gòu)分為三層, 分別是數(shù)據(jù)層、服務(wù)層以及應(yīng)用層, 如圖1所示。數(shù)據(jù)層主要包括效能評估指標(biāo)數(shù)據(jù), 是指標(biāo)體系構(gòu)建所需及產(chǎn)生的相關(guān)數(shù)據(jù)資源集合, 通過服務(wù)層接口向應(yīng)用層提供統(tǒng)一數(shù)據(jù)訪問和存儲服務(wù);服務(wù)層包括指標(biāo)管理服務(wù), 數(shù)據(jù)管理服務(wù), 通過模塊化機(jī)制實(shí)現(xiàn)了系統(tǒng)運(yùn)行共性服務(wù);應(yīng)用層主要包括指標(biāo)體系可視化構(gòu)建、指標(biāo)管理、數(shù)據(jù)導(dǎo)入導(dǎo)出, 是面向用戶的接口, 通過用戶交互界面完成樹狀效能評估指標(biāo)構(gòu)建流程。
構(gòu)建工具技術(shù)棧后端選用基于Go 語言開發(fā)的Zorm和Gin,Go是Google開發(fā)的一款開源編程語言,開發(fā)環(huán)境支持Windows、macOS及基于Linux內(nèi)核開發(fā)的國產(chǎn)操作系統(tǒng)[6],目前國產(chǎn)操作系統(tǒng)所支持的芯片[7-12]如鯤鵬、飛騰、RSIC-V、海光,龍芯、海思麒麟、兆芯,其指令集架構(gòu)大都被Go的編譯器支持(見表1) ,在中美貿(mào)易摩擦、國產(chǎn)芯片崛起的大背景下,更是可以作為除Java外的另一種國產(chǎn)CPU平臺應(yīng)用開發(fā)語言[13]。Zorm 就是一款使用Go 語言開發(fā)的國產(chǎn)輕量ORM庫(Object Relationl Mapping,對象關(guān)系映射),支持眾多國產(chǎn)數(shù)據(jù)庫,包括達(dá)夢、金倉、神通、南通、TDengine,也支持市面上常見的數(shù)據(jù)庫類型如:mysql、postgresql、oracle、mssql、sqlite、db2、clickhouse等②,Gin 也是Go語言開發(fā)的Web框架。具有運(yùn)行速度快,對日志、權(quán)限等中間件的良好支持的優(yōu)點(diǎn);其路由分組功能可以讓開發(fā)人員更好地管理路由。Gin非常靈活,開發(fā)過程中可以自行設(shè)計(jì)框架結(jié)構(gòu),基本結(jié)構(gòu)是經(jīng)典的MVC(Model-View-Controller)模型[14]。
構(gòu)建工具技術(shù)棧前端基于GoJS與Vue.js框架開發(fā),GoJS是Northwoods軟件公司出品的一款基于Web 的圖形組件庫[15],通過可自定義的模板和布局構(gòu)建交互式圖表和復(fù)雜的可視化圖表,它可在任何能夠執(zhí)行JavsScript 的環(huán)境中運(yùn)行,包括主流開發(fā)框架React,Angular, Vue;跨平臺桌面應(yīng)用開發(fā)工具Electron;各主流瀏覽器及非瀏覽器環(huán)境Node.js,該圖形庫已經(jīng)在GitHub上發(fā)布了232個(gè)版本,最新版本更新于2023年8 月③。Vue.js 則是一款國產(chǎn)的MVVM(Model-View-ViewModel) 前端開發(fā)框架,通過數(shù)據(jù)與界面層進(jìn)行雙向綁定,使得數(shù)據(jù)更新和界面展現(xiàn)能夠邏輯分離[16]。
2 關(guān)鍵技術(shù)實(shí)現(xiàn)
構(gòu)建工具采用B/S架構(gòu), 用戶通過瀏覽器訪問指標(biāo)構(gòu)建系統(tǒng),前端提供面向用戶的人機(jī)交互界面,實(shí)現(xiàn)指標(biāo)管理、指標(biāo)體系可視化編輯,數(shù)據(jù)通過http協(xié)議與后端Gin框架開發(fā)的API(Application Program In?terface,應(yīng)用程序接口)通信實(shí)現(xiàn)對達(dá)夢數(shù)據(jù)庫中指標(biāo)體系數(shù)據(jù)的寫入與讀取。
2.1 指標(biāo)設(shè)計(jì)
指標(biāo)設(shè)計(jì)是整套系統(tǒng)的核心,對指標(biāo)的屬性進(jìn)行描述如表2所示,指標(biāo)在指標(biāo)表中存儲,用戶對應(yīng)不同評估需求從指標(biāo)表中選擇指標(biāo)構(gòu)建對應(yīng)結(jié)構(gòu)的指標(biāo)體系,指標(biāo)體系屬性描述如表3所示,指標(biāo)體系中各節(jié)點(diǎn)關(guān)系描述模型如表4所示,此處將指標(biāo)編號與節(jié)點(diǎn)編號分字段記錄,是希望同一個(gè)指標(biāo)可以在同一指標(biāo)體系中復(fù)用,延續(xù)復(fù)制-分配的方式在模型圖轉(zhuǎn)化過程中的應(yīng)用思路[17],綁定計(jì)算模型,最終構(gòu)成一套可用的指標(biāo)體系,系統(tǒng)可用于構(gòu)建樹狀效能指標(biāo)評估體系。
2.2 指標(biāo)可視化編輯
系統(tǒng)中的指標(biāo)體系可視化編輯,選用了GoJS提供的TreeModel模型,它通過服務(wù)層提供的指標(biāo)服務(wù)獲得數(shù)據(jù)庫中的指標(biāo)數(shù)據(jù)與指標(biāo)關(guān)系數(shù)據(jù),轉(zhuǎn)化成TreeModel模型使用的節(jié)點(diǎn)與連線數(shù)據(jù)生成可與用戶交互的指標(biāo)體系圖,可用于對效能評估各類指標(biāo)進(jìn)行建模, 對指標(biāo)構(gòu)建提升的可視化和便捷性,滿足對指標(biāo)體系進(jìn)行動(dòng)態(tài)建模, 例如對某仿真系統(tǒng)中火力毀傷效能的指標(biāo)體系構(gòu)建結(jié)果如圖2所示。該模塊主要功能包括以下幾點(diǎn):
1) 體系分類, 實(shí)現(xiàn)對指標(biāo)體系的分類建模功能。
2) 動(dòng)態(tài)建模, 實(shí)現(xiàn)對指標(biāo)體系的動(dòng)態(tài)可視化分解與圖元化建模功能。
3) 關(guān)系建模, 實(shí)現(xiàn)對指標(biāo)間的關(guān)聯(lián)關(guān)系進(jìn)行建模。
4) 模型保存, 實(shí)現(xiàn)對指標(biāo)體系的保存及數(shù)據(jù)導(dǎo)出。
2.3 指標(biāo)體系數(shù)據(jù)導(dǎo)出
樹狀指標(biāo)體系構(gòu)建完成后,可以通過服務(wù)層的數(shù)據(jù)導(dǎo)出服務(wù)將數(shù)據(jù)庫中存儲的指標(biāo)體系數(shù)據(jù)輸出各類格式的數(shù)據(jù),這個(gè)功能的設(shè)計(jì)依賴于Go提供的結(jié)構(gòu)體標(biāo)簽功能,它可以在服務(wù)層通過Go定義的結(jié)構(gòu)體數(shù)據(jù)添加元數(shù)據(jù)信息來生成多種格式的數(shù)據(jù),包括json、xml、yaml,圖2中火力毀傷效能指標(biāo)體系節(jié)點(diǎn)數(shù)據(jù)信息如表5所示,而圖3是將節(jié)點(diǎn)數(shù)據(jù)以json格式導(dǎo)出的效果。
2.4 指標(biāo)體系數(shù)據(jù)導(dǎo)入合法性檢測
對于已有的指標(biāo)體系結(jié)構(gòu),也可以通過構(gòu)造符合指標(biāo)關(guān)系描述模型的數(shù)據(jù)通過服務(wù)層的導(dǎo)入服務(wù)將數(shù)據(jù)導(dǎo)入到指標(biāo)體系中,對于導(dǎo)入數(shù)據(jù)的檢測算法包括根節(jié)點(diǎn)唯一性檢測、父節(jié)點(diǎn)唯一性檢測、環(huán)狀結(jié)構(gòu)檢測,所用偽算法如下所示:
輸入:數(shù)組,指標(biāo)體系節(jié)點(diǎn)關(guān)系數(shù)據(jù) nodeArr。
輸出:布爾值, 指標(biāo)體系數(shù)據(jù)是否能夠合法導(dǎo)入。
rootArr = nodeArr. filter(node => node. parent == 空)// 篩選根節(jié)點(diǎn)
if (rootArr.length != 1) return false // 根節(jié)點(diǎn)唯一性檢測
foreach (item in nodeArr)
parentArr = nodeArr. filter(node => node. key ==item.parent) // 取得父節(jié)點(diǎn)
if (parentArr.length != 1) return false // 只能有一個(gè)父節(jié)點(diǎn)
linkArr = getChildrenRecursive(item) // 遞歸取得路徑上子孫節(jié)點(diǎn)
linkUniArr = unique(linkArr) // 路徑數(shù)組去重
if linkUniArr.length != linkArr.length return false // 路徑有環(huán)
endforeach
3 結(jié)束語
針對樹狀效能評估指標(biāo)體系建模問題, 設(shè)計(jì)了一種可在銀河麒麟操作系統(tǒng)下運(yùn)行的效能評估指標(biāo)體系建模工具,選用的架構(gòu)方案和技術(shù)選型理論上可在多種國產(chǎn)CPU平臺上遷移實(shí)現(xiàn),但限于現(xiàn)有軟硬件使用場景這一點(diǎn)有待后續(xù)驗(yàn)證, 目前已經(jīng)完成了原型系統(tǒng)開發(fā)并應(yīng)用于某仿真系統(tǒng)的效能評估模塊。通過實(shí)際使用表明,基于此工具構(gòu)建的樹狀效能評估體系, 可滿足不同應(yīng)用效能評估需求的快速響應(yīng),提高了效能評估指標(biāo)體系構(gòu)建的通用性、擴(kuò)展性,為后續(xù)在效能評估模塊中集成評估算法模型提供了數(shù)據(jù)支撐。
【通聯(lián)編輯:梁書】