薛 蕓, 廉東本, 王俊霖
?
IDC可視化軟件開(kāi)發(fā)平臺(tái)中的配置與編譯子系統(tǒng)①
薛 蕓1,2, 廉東本2, 王俊霖3
1(中國(guó)科學(xué)院大學(xué), 北京 100049)2(中國(guó)科學(xué)院沈陽(yáng)計(jì)算研究所, 沈陽(yáng) 100168)3(大連理工大學(xué), 大連 116621)
為了解決目前IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)機(jī)房可視化管理軟件開(kāi)發(fā)代價(jià)大、靈活性差、迭代周期長(zhǎng)的問(wèn)題, 提出了可定制的、模塊復(fù)用的IDC可視化軟件開(kāi)發(fā)平臺(tái), 本文詳述了該平臺(tái)中核心子系統(tǒng)—配置與編譯子系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn). 配置與編譯子系統(tǒng)采用AssetBundle技術(shù)封裝物體模型, 采用DLL封裝功能模塊, 并提出了一種新的結(jié)合編輯距離和分塊計(jì)算的增量更新算法AssetDiff, 從而滿足了編譯、管理可復(fù)用的物體模型和功能模塊的需求, 并實(shí)現(xiàn)了管理、配置、發(fā)布IDC可視化軟件以及已發(fā)布軟件遠(yuǎn)程更新的功能.
互聯(lián)網(wǎng)數(shù)據(jù)中心; 可視化; 模塊化; Unity3D; 增量更新
IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)可視化軟件是一種通過(guò)三維可視化技術(shù)開(kāi)發(fā)的機(jī)房管理工具, 它將參照現(xiàn)實(shí)場(chǎng)景建模的虛擬場(chǎng)景與機(jī)房真實(shí)運(yùn)行數(shù)據(jù)相結(jié)合, 從而形象化地呈現(xiàn)機(jī)房的各項(xiàng)運(yùn)行參數(shù)(如溫度、濕度、故障、空調(diào)新風(fēng)、門禁狀態(tài)、電氣狀態(tài)等), 從而為運(yùn)維人員和管理層提供決策依據(jù)[1]. 由于不同企業(yè)的數(shù)據(jù)中心有著不同的物理環(huán)境和管理需求, 單獨(dú)為每一個(gè)企業(yè)開(kāi)發(fā)IDC可視化管理軟件的成本較高、軟件復(fù)用率比較低[2]. 因此, 具備可定制、模塊化特點(diǎn)的IDC可視化軟件開(kāi)發(fā)平臺(tái)是一個(gè)良好的解決方案. 它將IDC領(lǐng)域內(nèi)常用的三維模型與腳本代碼提取出來(lái)封裝為模塊庫(kù), 開(kāi)發(fā)人員無(wú)需考慮底層的實(shí)現(xiàn)細(xì)節(jié), 僅需要通過(guò)客戶需求來(lái)選擇相應(yīng)模塊, 就可以組裝產(chǎn)生一套新的適合需求的IDC可視化管理軟件. 該平臺(tái)可以極大地提高可視化軟件開(kāi)發(fā)效率, 并對(duì)后期的客戶需求變更、遠(yuǎn)程運(yùn)維提供了良好的支持.
IDC可視化軟件開(kāi)發(fā)平臺(tái)采用B/S架構(gòu), 通過(guò)結(jié)合JavaWeb技術(shù)、Microsoft .NET Framework 以及Unity3D引擎來(lái)完成主體功能. 其總體架構(gòu)圖(圖1)中明確劃分了場(chǎng)景編輯系統(tǒng)、配置與編譯系統(tǒng)以及基于Unity3D引擎二次開(kāi)發(fā)的內(nèi)核容器系統(tǒng)三個(gè)部分.
圖1 平臺(tái)架構(gòu)圖
用戶在場(chǎng)景編輯子系統(tǒng)中搭建與現(xiàn)實(shí)場(chǎng)景同步的機(jī)房三維場(chǎng)景后, 進(jìn)入到配置與編譯子系統(tǒng)中選擇該機(jī)房的可視化管理軟件需要的相關(guān)模塊, 則可在內(nèi)核容器中呈現(xiàn)出相應(yīng)的可視化軟件.
其中配置與編譯子系統(tǒng)是整個(gè)平臺(tái)的核心, 通過(guò)對(duì)平臺(tái)業(yè)務(wù)需求的分析整合, 將配置與編譯系統(tǒng)的主要業(yè)務(wù)過(guò)程分為以下幾個(gè)階段:
1) 將用戶上傳各種格式的三維模型打包壓縮為平臺(tái)標(biāo)準(zhǔn)物體模型, 將用戶上傳的某功能相關(guān)代碼編譯為平臺(tái)標(biāo)準(zhǔn)功能模塊.
2) 創(chuàng)建新的可視化軟件: 錄入該可視化軟件的基本信息(軟件名稱、描述、部署地點(diǎn)、機(jī)房所屬企業(yè)信息等).
3) 選擇該可視化軟件對(duì)應(yīng)的現(xiàn)實(shí)機(jī)房場(chǎng)景的三維數(shù)據(jù)(樓體、樓層、機(jī)柜、機(jī)架、線路等物體模型在三維空間中的位置信息).
4) 配置該可視化軟件的可用功能與相關(guān)參數(shù): 根據(jù)場(chǎng)景數(shù)據(jù)中涉及的物體模型, 查詢出該機(jī)房可以使用的可用功能模塊全集: 包含告警、安防、門禁、電量監(jiān)測(cè)、空間使用情況監(jiān)測(cè)等功能, 相關(guān)參數(shù)包含有環(huán)境傳感器與攝像探頭的WebService路徑、軟件中的UI主題顏色等.
5) 可視化軟件發(fā)布: 將該可視化軟件需要的物體模型和用戶選擇的功能模塊按照配置參數(shù)進(jìn)行裝配, 生成配置數(shù)據(jù)與資源文件夾, 輸出至內(nèi)核容器, 從而輸出最終軟件產(chǎn)品.
6) 對(duì)已部署的可視化軟件產(chǎn)品實(shí)施增量更新: 當(dāng)平臺(tái)對(duì)該可視化軟件相關(guān)數(shù)據(jù)進(jìn)行修改時(shí), 將使用增量策略對(duì)已部署軟件進(jìn)行遠(yuǎn)程更新.
根據(jù)以上業(yè)務(wù)需求, 將配置與編譯子系統(tǒng)從整個(gè)平臺(tái)中分離出來(lái), 并將其劃分為下列的模塊, 如圖2.
圖2 系統(tǒng)模塊劃分
配置與編譯子系統(tǒng)使用MySQL數(shù)據(jù)庫(kù), 由前文的需求與模塊分析, 確定了本系統(tǒng)需要設(shè)計(jì)的數(shù)據(jù)庫(kù)表有以下7個(gè)表: 物體模型表Object_Models、功能模塊表Fun_Modules、模型_模塊關(guān)系表R_Model_Module、軟件基本信息表App_Info、軟件_模型表App_Model、軟件_模塊表App_Module、軟件_配置表App_Config.
其中模型_模塊關(guān)系表R_Model_Module用于存儲(chǔ)物體模型和功能模塊的對(duì)應(yīng)關(guān)系, 如機(jī)柜模型與機(jī)柜故障變色提醒的功能模塊間存在的對(duì)應(yīng)關(guān)系.
3.1 模塊復(fù)用的相關(guān)技術(shù)
配置與編譯子系統(tǒng)以可復(fù)用的物體模型和功能模塊作為軟件配置的基本粒度, 并提供物體模型和功能模塊的編譯與管理服務(wù).
3.1.1 AssetBundle技術(shù)
在本系統(tǒng)中, 可復(fù)用的物體模型是以AssetBundle文件的形式被存儲(chǔ)和管理的: AssetBundle是Unity3D Pro提供的一項(xiàng)重要功能, 可以將各類資源如三維模型以及對(duì)應(yīng)的材質(zhì)、貼圖等內(nèi)容都封裝并壓縮到AssetBundle格式的文件中[3]. Untiy3D引擎可以從外部加載AssetBundle文件并呈現(xiàn)在應(yīng)用程序中. 本系統(tǒng)通過(guò)調(diào)用Unity3D提供的BuildPipeline (編譯管線)API, 將用戶上傳的各種三維模型打包為AssetBunlde文件.
3.1.2 DLL技術(shù)
在本系統(tǒng)中, 可復(fù)用的功能模塊以DLL(動(dòng)態(tài)鏈接庫(kù))文件的形式存儲(chǔ)和管理. Unity3D引擎支持C#作為腳本語(yǔ)言, 即可以使用.NET平臺(tái)的反射機(jī)制動(dòng)態(tài)加載外部DLL. 在當(dāng)對(duì)一個(gè)未知類型的 DLL 文件進(jìn)行加載時(shí), 反射機(jī)制可以從 DLL 文件中獲取其中所有的類和其描述信息, 包括方法、屬性和事件等關(guān)鍵信息, 使用這些信息, 動(dòng)態(tài)地生成相應(yīng)的對(duì)象[4].
用戶將一組功能相關(guān)的腳本文件上傳至本系統(tǒng)中, 本系統(tǒng)將調(diào)用.Net Framework 3.5 提供的csc命令將腳本編譯為DLL文件. 在編譯過(guò)程中, 將添加UnityEngine.dll、UnityEngine.UI.dll 作為引用, 以保證DLL能夠在Unity3D引擎中正常運(yùn)行.
3.2 增量更新算法
IDC領(lǐng)域中所涉及的房間、機(jī)柜、設(shè)備等模型精度較高, 體積較大. 軟件在部署到生產(chǎn)現(xiàn)場(chǎng)之后, 如果需要修改模型, 如更換貼圖或者紋理等操作, 就必須從本系統(tǒng)中遠(yuǎn)程下載新的AssetBundle文件, 這就對(duì)網(wǎng)絡(luò)傳輸速度提出了很高的要求. 為了解決這一問(wèn)題, 本系統(tǒng)設(shè)計(jì)了一種結(jié)合編輯距離和分塊計(jì)算的增量更新算法AssetDiff來(lái)實(shí)現(xiàn)AssetBundle的差異更新.
編輯距離(Levenshtein距離), 是指兩個(gè)字符串之間, 由一個(gè)轉(zhuǎn)成另一個(gè)所需的最少編輯操作次數(shù)[5]. 記錄計(jì)算編輯距離的操作步驟即可獲得一字符串轉(zhuǎn)化為另一個(gè)字符串的增量文件. 編輯距離計(jì)算偽代碼為算法1.
編輯距離算法可以精確到字符級(jí)別, 但是計(jì)算過(guò)程中需要使用較大的內(nèi)存. 而Chunk算法中增量更新的精度與塊的大小有關(guān), 無(wú)法避免冗余更新. AssetDiff結(jié)合了以上兩種算法: 設(shè)定一個(gè)閾值, 當(dāng)文件長(zhǎng)度小于該閾值是通過(guò)計(jì)算編輯距離獲取增量文件, 當(dāng)文件長(zhǎng)度大于該閾值時(shí), 對(duì)文件使用分塊算法找出兩個(gè)文件的最長(zhǎng)公共連續(xù)塊, 然后用這個(gè)連續(xù)塊將文件切分為前綴、公共部分、后綴, 分別使用前綴、后綴作為參數(shù)遞歸調(diào)用AssetDiff. 算法流程圖如圖4.
圖4 AssetDiff算法流程圖
一個(gè)AssetBundle文件中包含有模型、紋理、貼圖等多個(gè)AssetObject , AssetObject的描述結(jié)構(gòu)如下:
struct ObjectHeader {
struct ObjectInfo {
int pathID;
int offset;
int length;
byte classID[8];
};
int ObjectCount;
ObjectInfo Object[];
};
其中pathID為每個(gè)AssetObject的唯一編號(hào), 通過(guò)偏移量offset可以取得該Object相對(duì)于整個(gè)AssetBundle文件的位置. 所以, 在調(diào)用AssetDiff 算法計(jì)算增量文件之前, 需要先將新舊文件反序列化, 然后按照offset進(jìn)行分塊, 剔除掉未發(fā)生修改的AssetObject, 然后將剩余的部分作為AssetDiff的參數(shù)來(lái)計(jì)算增量文件.
如圖5所示, 有兩個(gè)AseetBundle文件A、B, 其內(nèi)容為兩個(gè)完全一樣的人物放置在不同材質(zhì)的地面之上. A、B文件大小都為2.3MB, 使用AssetDiff算法求A變換到B的增量文件, 增量文件大小為19KB, 降低了需要更新的數(shù)據(jù)量.
圖 5 AssetBundle文件增量更新示例
基于上述的系統(tǒng)總體架構(gòu)和關(guān)鍵技術(shù), 實(shí)現(xiàn)了IDC可視化軟件開(kāi)發(fā)平臺(tái)中的配置與編譯子系統(tǒng).
圖6 系統(tǒng)界面
圖6所示的界面為軟件配置表單, 在該頁(yè)面中配置該可視化軟件的可用功能與相關(guān)參數(shù), 如應(yīng)用的輸出目錄、UI風(fēng)格顏色、外部動(dòng)態(tài)環(huán)境傳感器數(shù)據(jù)的Web Service路徑、監(jiān)控探頭的訪問(wèn)路徑等配置項(xiàng)目.
最終, 本系統(tǒng)編譯產(chǎn)生的應(yīng)用效果如圖7所示.
圖7 已發(fā)布軟件效果
本文主要研究討論了IDC可視化軟件開(kāi)發(fā)平臺(tái)中配置與編譯子系統(tǒng)的設(shè)計(jì)思想與關(guān)鍵技術(shù). 其關(guān)鍵技術(shù)之一是利用AssetBundle技術(shù)與DLL技術(shù)構(gòu)建了可視化軟件模塊化的技術(shù)路線. 通過(guò)該技術(shù)路線實(shí)現(xiàn)了模塊間的自由拼裝. 并為該系統(tǒng)中軟件的遠(yuǎn)程增量更新功能設(shè)計(jì)了一種結(jié)合了編輯距離和分塊計(jì)算的增量更新算法AssetDiff, 保證可靠更新的同時(shí)降低了冗余更新的數(shù)據(jù)量, 大大提高了遠(yuǎn)程更新的效率.
1 Dillenberger DN, Osias MJ. Management of enterprise systems and applications using three-dimensional visualization technology. US, US7839401. 2010.
2 侯亮,唐任仲,徐燕申.產(chǎn)品模塊化設(shè)計(jì)理論、技術(shù)與應(yīng)用研究進(jìn)展.機(jī)械工程學(xué)報(bào),2004,40(1):56–61.
3 馬瑞.三維虛擬數(shù)字校園系統(tǒng)的資源封包設(shè)計(jì).長(zhǎng)江大學(xué)學(xué)報(bào)自然科學(xué)版(理工旬刊),2014,(34):49–51.
4 陳濤,郝偉.基于.Net反射原理的DLL動(dòng)態(tài)加載機(jī)制設(shè)計(jì)與應(yīng)用.齊齊哈爾大學(xué)學(xué)報(bào)(自然科學(xué)版),2014,(3).
5 石野,黃龍和,車天陽(yáng),等.基于語(yǔ)法樹(shù)的程序相似度判定方法.吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2014,32(1):95–100.
Configuration and Compilation Subsystem of IDC Visual Software Development Platform
XUE Yun1,2, LIAN Dong-Ben2, WANG Jun-Lin3
1(University of Chinese Academy of Sciences, Beijing 100049, China)2(Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang 110168, China)3(Dalian University of Technology, Dalian 116024, China)
Aiming at the problem of Long development cycle, high cost and poor flexibility in the field of IDC (Internet Data Center) computer room visual management software, an IDC Visual software development platform is proposed. This paper describes the design and implementation of the core subsystem, configuration and compilation subsystem of the platform. Configuration and compilation subsystem uses AssetBundle package object model, uses DLL encapsulation function module, and proposes a new incremental updating algorithm AssetDiff that combines edit distance and block computation. The system meets the need of compilation and management of Reusable Object Model and functional model and implements the function of management, configuration, releases IDC visualization software and the publishes software remote update.
internet data center; visualization; modularization; unity3d; incremental update
國(guó)家水體污染控制與治理科技重大專項(xiàng)(2012ZX07505004)
2016-07-04;
2016-07-29
[10.15888/j.cnki.csa.005650]