薛 蕓, 廉東本, 王俊霖
?
IDC可視化軟件開發平臺中的配置與編譯子系統①
薛 蕓1,2, 廉東本2, 王俊霖3
1(中國科學院大學, 北京 100049)2(中國科學院沈陽計算研究所, 沈陽 100168)3(大連理工大學, 大連 116621)
為了解決目前IDC(互聯網數據中心)機房可視化管理軟件開發代價大、靈活性差、迭代周期長的問題, 提出了可定制的、模塊復用的IDC可視化軟件開發平臺, 本文詳述了該平臺中核心子系統—配置與編譯子系統的設計與實現. 配置與編譯子系統采用AssetBundle技術封裝物體模型, 采用DLL封裝功能模塊, 并提出了一種新的結合編輯距離和分塊計算的增量更新算法AssetDiff, 從而滿足了編譯、管理可復用的物體模型和功能模塊的需求, 并實現了管理、配置、發布IDC可視化軟件以及已發布軟件遠程更新的功能.
互聯網數據中心; 可視化; 模塊化; Unity3D; 增量更新
IDC(互聯網數據中心)可視化軟件是一種通過三維可視化技術開發的機房管理工具, 它將參照現實場景建模的虛擬場景與機房真實運行數據相結合, 從而形象化地呈現機房的各項運行參數(如溫度、濕度、故障、空調新風、門禁狀態、電氣狀態等), 從而為運維人員和管理層提供決策依據[1]. 由于不同企業的數據中心有著不同的物理環境和管理需求, 單獨為每一個企業開發IDC可視化管理軟件的成本較高、軟件復用率比較低[2]. 因此, 具備可定制、模塊化特點的IDC可視化軟件開發平臺是一個良好的解決方案. 它將IDC領域內常用的三維模型與腳本代碼提取出來封裝為模塊庫, 開發人員無需考慮底層的實現細節, 僅需要通過客戶需求來選擇相應模塊, 就可以組裝產生一套新的適合需求的IDC可視化管理軟件. 該平臺可以極大地提高可視化軟件開發效率, 并對后期的客戶需求變更、遠程運維提供了良好的支持.
IDC可視化軟件開發平臺采用B/S架構, 通過結合JavaWeb技術、Microsoft .NET Framework 以及Unity3D引擎來完成主體功能. 其總體架構圖(圖1)中明確劃分了場景編輯系統、配置與編譯系統以及基于Unity3D引擎二次開發的內核容器系統三個部分.

圖1 平臺架構圖
用戶在場景編輯子系統中搭建與現實場景同步的機房三維場景后, 進入到配置與編譯子系統中選擇該機房的可視化管理軟件需要的相關模塊, 則可在內核容器中呈現出相應的可視化軟件.
其中配置與編譯子系統是整個平臺的核心, 通過對平臺業務需求的分析整合, 將配置與編譯系統的主要業務過程分為以下幾個階段:
1) 將用戶上傳各種格式的三維模型打包壓縮為平臺標準物體模型, 將用戶上傳的某功能相關代碼編譯為平臺標準功能模塊.
2) 創建新的可視化軟件: 錄入該可視化軟件的基本信息(軟件名稱、描述、部署地點、機房所屬企業信息等).
3) 選擇該可視化軟件對應的現實機房場景的三維數據(樓體、樓層、機柜、機架、線路等物體模型在三維空間中的位置信息).
4) 配置該可視化軟件的可用功能與相關參數: 根據場景數據中涉及的物體模型, 查詢出該機房可以使用的可用功能模塊全集: 包含告警、安防、門禁、電量監測、空間使用情況監測等功能, 相關參數包含有環境傳感器與攝像探頭的WebService路徑、軟件中的UI主題顏色等.
5) 可視化軟件發布: 將該可視化軟件需要的物體模型和用戶選擇的功能模塊按照配置參數進行裝配, 生成配置數據與資源文件夾, 輸出至內核容器, 從而輸出最終軟件產品.
6) 對已部署的可視化軟件產品實施增量更新: 當平臺對該可視化軟件相關數據進行修改時, 將使用增量策略對已部署軟件進行遠程更新.
根據以上業務需求, 將配置與編譯子系統從整個平臺中分離出來, 并將其劃分為下列的模塊, 如圖2.

圖2 系統模塊劃分
配置與編譯子系統使用MySQL數據庫, 由前文的需求與模塊分析, 確定了本系統需要設計的數據庫表有以下7個表: 物體模型表Object_Models、功能模塊表Fun_Modules、模型_模塊關系表R_Model_Module、軟件基本信息表App_Info、軟件_模型表App_Model、軟件_模塊表App_Module、軟件_配置表App_Config.
其中模型_模塊關系表R_Model_Module用于存儲物體模型和功能模塊的對應關系, 如機柜模型與機柜故障變色提醒的功能模塊間存在的對應關系.
3.1 模塊復用的相關技術
配置與編譯子系統以可復用的物體模型和功能模塊作為軟件配置的基本粒度, 并提供物體模型和功能模塊的編譯與管理服務.
3.1.1 AssetBundle技術
在本系統中, 可復用的物體模型是以AssetBundle文件的形式被存儲和管理的: AssetBundle是Unity3D Pro提供的一項重要功能, 可以將各類資源如三維模型以及對應的材質、貼圖等內容都封裝并壓縮到AssetBundle格式的文件中[3]. Untiy3D引擎可以從外部加載AssetBundle文件并呈現在應用程序中. 本系統通過調用Unity3D提供的BuildPipeline (編譯管線)API, 將用戶上傳的各種三維模型打包為AssetBunlde文件.
3.1.2 DLL技術
在本系統中, 可復用的功能模塊以DLL(動態鏈接庫)文件的形式存儲和管理. Unity3D引擎支持C#作為腳本語言, 即可以使用.NET平臺的反射機制動態加載外部DLL. 在當對一個未知類型的 DLL 文件進行加載時, 反射機制可以從 DLL 文件中獲取其中所有的類和其描述信息, 包括方法、屬性和事件等關鍵信息, 使用這些信息, 動態地生成相應的對象[4].
用戶將一組功能相關的腳本文件上傳至本系統中, 本系統將調用.Net Framework 3.5 提供的csc命令將腳本編譯為DLL文件. 在編譯過程中, 將添加UnityEngine.dll、UnityEngine.UI.dll 作為引用, 以保證DLL能夠在Unity3D引擎中正常運行.
3.2 增量更新算法
IDC領域中所涉及的房間、機柜、設備等模型精度較高, 體積較大. 軟件在部署到生產現場之后, 如果需要修改模型, 如更換貼圖或者紋理等操作, 就必須從本系統中遠程下載新的AssetBundle文件, 這就對網絡傳輸速度提出了很高的要求. 為了解決這一問題, 本系統設計了一種結合編輯距離和分塊計算的增量更新算法AssetDiff來實現AssetBundle的差異更新.
編輯距離(Levenshtein距離), 是指兩個字符串之間, 由一個轉成另一個所需的最少編輯操作次數[5]. 記錄計算編輯距離的操作步驟即可獲得一字符串轉化為另一個字符串的增量文件. 編輯距離計算偽代碼為算法1.
編輯距離算法可以精確到字符級別, 但是計算過程中需要使用較大的內存. 而Chunk算法中增量更新的精度與塊的大小有關, 無法避免冗余更新. AssetDiff結合了以上兩種算法: 設定一個閾值, 當文件長度小于該閾值是通過計算編輯距離獲取增量文件, 當文件長度大于該閾值時, 對文件使用分塊算法找出兩個文件的最長公共連續塊, 然后用這個連續塊將文件切分為前綴、公共部分、后綴, 分別使用前綴、后綴作為參數遞歸調用AssetDiff. 算法流程圖如圖4.

圖4 AssetDiff算法流程圖
一個AssetBundle文件中包含有模型、紋理、貼圖等多個AssetObject , AssetObject的描述結構如下:
struct ObjectHeader {
struct ObjectInfo {
int pathID;
int offset;
int length;
byte classID[8];
};
int ObjectCount;
ObjectInfo Object[];
};
其中pathID為每個AssetObject的唯一編號, 通過偏移量offset可以取得該Object相對于整個AssetBundle文件的位置. 所以, 在調用AssetDiff 算法計算增量文件之前, 需要先將新舊文件反序列化, 然后按照offset進行分塊, 剔除掉未發生修改的AssetObject, 然后將剩余的部分作為AssetDiff的參數來計算增量文件.
如圖5所示, 有兩個AseetBundle文件A、B, 其內容為兩個完全一樣的人物放置在不同材質的地面之上. A、B文件大小都為2.3MB, 使用AssetDiff算法求A變換到B的增量文件, 增量文件大小為19KB, 降低了需要更新的數據量.

圖 5 AssetBundle文件增量更新示例
基于上述的系統總體架構和關鍵技術, 實現了IDC可視化軟件開發平臺中的配置與編譯子系統.

圖6 系統界面
圖6所示的界面為軟件配置表單, 在該頁面中配置該可視化軟件的可用功能與相關參數, 如應用的輸出目錄、UI風格顏色、外部動態環境傳感器數據的Web Service路徑、監控探頭的訪問路徑等配置項目.
最終, 本系統編譯產生的應用效果如圖7所示.

圖7 已發布軟件效果
本文主要研究討論了IDC可視化軟件開發平臺中配置與編譯子系統的設計思想與關鍵技術. 其關鍵技術之一是利用AssetBundle技術與DLL技術構建了可視化軟件模塊化的技術路線. 通過該技術路線實現了模塊間的自由拼裝. 并為該系統中軟件的遠程增量更新功能設計了一種結合了編輯距離和分塊計算的增量更新算法AssetDiff, 保證可靠更新的同時降低了冗余更新的數據量, 大大提高了遠程更新的效率.
1 Dillenberger DN, Osias MJ. Management of enterprise systems and applications using three-dimensional visualization technology. US, US7839401. 2010.
2 侯亮,唐任仲,徐燕申.產品模塊化設計理論、技術與應用研究進展.機械工程學報,2004,40(1):56–61.
3 馬瑞.三維虛擬數字校園系統的資源封包設計.長江大學學報自然科學版(理工旬刊),2014,(34):49–51.
4 陳濤,郝偉.基于.Net反射原理的DLL動態加載機制設計與應用.齊齊哈爾大學學報(自然科學版),2014,(3).
5 石野,黃龍和,車天陽,等.基于語法樹的程序相似度判定方法.吉林大學學報(信息科學版),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
國家水體污染控制與治理科技重大專項(2012ZX07505004)
2016-07-04;
2016-07-29
[10.15888/j.cnki.csa.005650]