曾佑偉, 曹鳳才, 余紅英, 郭志強(qiáng)
(中北大學(xué) 電氣與控制工程學(xué)院, 山西 太原 030051)
SiROS仿真軟件只支持C/S架構(gòu), 相較B/S架構(gòu), C/S架構(gòu)安全性更高, 且部分特殊功能只能在C/S架構(gòu)實(shí)現(xiàn), 但在不同操作系統(tǒng)中SiROS軟件版本不一樣, 開(kāi)發(fā)維護(hù)成本較高, 需在客戶(hù)端安裝配置SiROS仿真軟件運(yùn)行環(huán)境, 分布性較差. 仿真時(shí)會(huì)一次性加載所有內(nèi)置功能包, 存在資源耗費(fèi)較高、 仿真效率較低等缺點(diǎn). 基于云平臺(tái)的SiROS仿真軟件可支持多用戶(hù)并行仿真[1], 分布性、 共享性強(qiáng), 與操作系統(tǒng)無(wú)關(guān), 可實(shí)現(xiàn)跨平臺(tái)運(yùn)行, 維護(hù)簡(jiǎn)單方便. SiROS仿真軟件利用Docker虛擬化、 容器化[2]技術(shù), 可以根據(jù)用戶(hù)數(shù)量虛擬多個(gè)Docker容器, 按需給Docker容器分配云端資源, 用戶(hù)通過(guò)B/S架構(gòu)連接Docker容器完成仿真任務(wù)[3], 仿真時(shí)根據(jù)仿真需求分級(jí)啟動(dòng)相應(yīng)功能包, 實(shí)現(xiàn)按需分配功能, 解決資源耗費(fèi)高、 仿真效率低等問(wèn)題. 仿真軟件SiROS是對(duì)Scilab進(jìn)行的二次開(kāi)發(fā), 主要進(jìn)行了界面優(yōu)化、 增加了圖像處理模塊、 擴(kuò)充了航天系統(tǒng)仿真模塊, SiROS仿真軟件是模塊化架構(gòu), 每一類(lèi)功能封裝成獨(dú)立的功能包, 功能包間內(nèi)聚性高, 耦合度低, 可以實(shí)現(xiàn)面向服務(wù)、 面向?qū)ο骩4]的仿真功能.
為支持用戶(hù)采用B/S架構(gòu)進(jìn)行SiROS仿真, 本文設(shè)計(jì)三類(lèi)應(yīng)用服務(wù)鏡像將SiROS軟件部署在云平臺(tái)上, 在云平臺(tái)硬件架構(gòu)與軟件架構(gòu)基礎(chǔ)上, 利用Docker虛擬化、 容器化技術(shù)將仿真資源封裝到容器中, 實(shí)現(xiàn)基于Docker的B/S架構(gòu)仿真功能. 為解決C/S架構(gòu)下資源耗費(fèi)高、 仿真效率低等問(wèn)題, 提出分級(jí)啟動(dòng)功能包控制系統(tǒng)方案, 以最少資源實(shí)現(xiàn)仿真需求. 最后, 基于SiROS仿真編譯與運(yùn)行功能實(shí)現(xiàn), 對(duì)Secular_J2軌道外推仿真展開(kāi)研究, 通過(guò)對(duì)比實(shí)驗(yàn), 計(jì)算相對(duì)誤差, 以驗(yàn)證B/S架構(gòu)下SiROS仿真結(jié)果的準(zhǔn)確性.
云提供端包括數(shù)據(jù)集群和計(jì)算集群, 用戶(hù)通過(guò)B/S架構(gòu)與云平臺(tái)交互, 無(wú)需下載SiROS軟件, 應(yīng)用本地瀏覽器連接Docker容器就可訪(fǎng)問(wèn)云平臺(tái)資源, 進(jìn)而完成建模仿真任務(wù)[5], 將仿真結(jié)果圖形化后輸出到瀏覽器, 在此過(guò)程中, 數(shù)據(jù)集群負(fù)責(zé)存儲(chǔ)計(jì)算結(jié)果與資源調(diào)用、 實(shí)現(xiàn)數(shù)據(jù)庫(kù)管理功能, 而計(jì)算集群負(fù)責(zé)解析模型、 編譯源碼、 執(zhí)行指令、 完成科學(xué)計(jì)算.
計(jì)算集群以平臺(tái)即服務(wù)(Platform as a service, PaaS)模式為用戶(hù)建模、 編譯、 執(zhí)行、 計(jì)算提供服務(wù)[6]. 數(shù)據(jù)集群利用分布式系統(tǒng)基礎(chǔ)架構(gòu)Hadoop來(lái)配置在云平臺(tái)上, 為用戶(hù)仿真提供數(shù)據(jù)存儲(chǔ)與管理服務(wù), 事務(wù)類(lèi)數(shù)據(jù)由關(guān)系型數(shù)據(jù)庫(kù)MySQL來(lái)管理, 仿真時(shí)程序及模型解析結(jié)果由HDFS來(lái)存儲(chǔ)和管理, 計(jì)算結(jié)果和中間數(shù)據(jù)由分布式存儲(chǔ)系統(tǒng)HBase來(lái)管理. 云平臺(tái)的硬件架構(gòu)和網(wǎng)絡(luò)環(huán)境設(shè)計(jì)如圖1 所示.
圖1 云平臺(tái)硬件架構(gòu)及網(wǎng)絡(luò)環(huán)境示意圖
云平臺(tái)軟件基礎(chǔ)是“Xenserver+Docker+Hadoop”等各種開(kāi)源軟件的高效組合, 該架構(gòu)有高內(nèi)聚、 低耦合特點(diǎn), 可按需擴(kuò)展和更新硬件資源. 為合理分配軟硬件資源, 提高仿真速度, 可根據(jù)不同仿真環(huán)節(jié)進(jìn)行不同程度的資源池化與虛擬化, 軟件體系更根據(jù)自身特點(diǎn)綜合IaaS[7](Infrastructure as a Service, 基礎(chǔ)設(shè)施即服務(wù))、 PaaS[8]、 SaaS[9](Software as a Service, 軟件即服務(wù))架構(gòu), 并創(chuàng)新性地將DSaaS(Date Store as a Service, 數(shù)據(jù)存儲(chǔ)即服務(wù))框架嵌入軟件架構(gòu)中. 云平臺(tái)軟件架構(gòu)圖如圖2 所示.
圖2 云平臺(tái)軟件架構(gòu)圖
云平臺(tái)中資源池是使用XenServer虛擬化、 Docker容器化技術(shù)管理的. XenServer負(fù)責(zé)將計(jì)算資源、 儲(chǔ)存資源、 網(wǎng)絡(luò)資源提取整合成資源池, IaaS框架把云平臺(tái)的硬件基礎(chǔ)設(shè)施通過(guò)網(wǎng)絡(luò)連接至各類(lèi)虛擬容器或集群中, 根據(jù)容器或集群中仿真任務(wù)所需的硬件資源動(dòng)態(tài)調(diào)整和管理硬件基礎(chǔ)設(shè)施. PaaS框架給用戶(hù)提供完整或部分軟件服務(wù), 生成調(diào)度器和計(jì)算集群調(diào)度管理器[10], 進(jìn)行仿真功能調(diào)度和計(jì)算. SaaS框架給用戶(hù)提供可直接使用的應(yīng)用軟件, SiROS就是由SaaS搭建的可視化軟件, SaaS框架可以生成可視化演示調(diào)度器、 仿真推演調(diào)度器和仿真推演集群調(diào)度管理器等. DSaaS架構(gòu)從多維度保障云安全管理, 消除數(shù)據(jù)泄漏、 濫用、 冗余等問(wèn)題, 是云平臺(tái)仿真軟件核心框架. 這些框架的功能是基于Docker技術(shù)實(shí)現(xiàn)的, Docker容器化技術(shù)將硬件設(shè)施進(jìn)行整合, 基于云平臺(tái)搭建的仿真實(shí)例可并行使用硬件資源, 按照當(dāng)前服務(wù)器狀態(tài)和平臺(tái)承載能力, 動(dòng)態(tài)調(diào)整Docker虛擬終端數(shù)量、 計(jì)算和數(shù)據(jù)資源, 根據(jù)多用戶(hù)多任務(wù)的優(yōu)先級(jí), 合理分配各類(lèi)資源, 達(dá)到整體的最優(yōu)解[11]. 實(shí)時(shí)性、 交互性、 并行性和可視化是云平臺(tái)仿真軟件的外部特性, SaaS利用Docker容器來(lái)管理多用戶(hù)并行使用仿真軟件SiROS來(lái)進(jìn)行交互性可視化仿真[12]. 為保證仿真軟件向上或向下的兼容性, 數(shù)據(jù)管理集群設(shè)計(jì)了大量標(biāo)準(zhǔn)化接口, 降低模塊間耦合度, 提高軟件可移植性, 實(shí)現(xiàn)即插即用效果, 方便軟件更新和擴(kuò)展.
SiROS仿真軟件總架構(gòu)如圖3 所示. SiROS仿真軟件將仿真模塊以功能包形式封裝到XCOS組件盤(pán)中, 這些功能包耦合度低; 根據(jù)功能包在仿真不同階段所起作用和底層核心算法調(diào)度深度, 功能包可分為基礎(chǔ)計(jì)算功能包、 核心功能包和可選功能包. 這些功能包具有分級(jí)啟動(dòng)控制系統(tǒng)方案, 當(dāng)新仿真需求提交到云平臺(tái)上時(shí), SiROS根據(jù)服務(wù)器反饋信息, 實(shí)時(shí)監(jiān)控軟件資源調(diào)度的情況, 為新任務(wù)加載新功能包, 用最小資源滿(mǎn)足仿真需求, 不會(huì)因啟用過(guò)多功能包而影響仿真速度.
圖3 SiROS仿真軟件總架構(gòu)圖
SiROS核心功能包是各類(lèi)仿真功能的基礎(chǔ), 它在SiROS仿真時(shí)相當(dāng)于操作系統(tǒng), 在IO調(diào)度和協(xié)調(diào)硬件資源、 處理中斷事件、 進(jìn)程管理、 存儲(chǔ)器管理、 文件管理中起到重要作用. 基礎(chǔ)計(jì)算功能包主要實(shí)現(xiàn)仿真任務(wù)計(jì)算功能, 所有計(jì)算集群都為高效計(jì)算服務(wù), SiROS最主要的計(jì)算能力是矩陣運(yùn)算和數(shù)據(jù)兼容運(yùn)算. 可選功能包是用戶(hù)自主開(kāi)發(fā)的功能包, 它在前兩種功能包的支持下, 按需擴(kuò)展, 合理應(yīng)用, 完成復(fù)雜任務(wù)仿真功能.
編譯功能實(shí)現(xiàn): SiROS編譯是整合仿真模型、 檢查編譯和運(yùn)行環(huán)境、 初始化編譯器的過(guò)程. SiROS軟件編譯時(shí)整合的仿真模型所產(chǎn)生的數(shù)據(jù)包括模塊輸入輸出個(gè)數(shù)、 模塊大小和外觀、 模塊屬性數(shù)據(jù)、 接口數(shù)據(jù)、 端口位置數(shù)據(jù)、 塊位置數(shù)據(jù)等. 模型編譯功能是用SiROS語(yǔ)言編寫(xiě)函數(shù)實(shí)現(xiàn)的. 編譯函數(shù)工作流程是先將編譯器、 編譯信息、 編譯所需數(shù)據(jù)初始化, 然后獲取仿真框架中的全局仿真設(shè)置數(shù)據(jù), 最后生成仿真調(diào)度表與狀態(tài)表. SiROS軟件編譯過(guò)程流程如圖4 所示.
圖4 SiROS軟件編譯過(guò)程流程圖
運(yùn)行功能實(shí)現(xiàn): SiROS運(yùn)行階段是根據(jù)編譯結(jié)果進(jìn)行仿真計(jì)算, 并將計(jì)算結(jié)果以可視化效果呈現(xiàn)給用戶(hù). SiROS仿真運(yùn)行階段完成仿真初始化、 仿真數(shù)值積分、 仿真狀態(tài)更新、 仿真數(shù)值輸出計(jì)算、 仿真時(shí)間輸出計(jì)算等工作. 運(yùn)行流程是先接收SiROS宏腳本傳輸?shù)姆抡婢幾g數(shù)據(jù), 然后調(diào)用仿真運(yùn)行函數(shù)執(zhí)行計(jì)算功能, 選定仿真求解器、 設(shè)定仿真器各項(xiàng)參數(shù), 將仿真器初始化, 并根據(jù)當(dāng)前仿真時(shí)間、 仿真狀態(tài)表信息設(shè)定調(diào)用模塊與計(jì)算函數(shù)階段狀態(tài), 最后根據(jù)仿真階段執(zhí)行模塊對(duì)應(yīng)計(jì)算函數(shù). SiROS軟件運(yùn)行過(guò)程流程如圖5 所示.
圖5 SiROS軟件運(yùn)行過(guò)程流程圖
云仿真平臺(tái)由Xenserver, Docker, Hadoop等構(gòu)成. 仿真過(guò)程中, 云平臺(tái)為每個(gè)用戶(hù)虛擬一個(gè)Docker容器, 每個(gè)容器相當(dāng)于一臺(tái)虛擬計(jì)算機(jī), 容器包含建模仿真需要用到的所有資源, 數(shù)據(jù)集群和計(jì)算集群會(huì)實(shí)時(shí)調(diào)整、 管理各項(xiàng)資源, 用戶(hù)無(wú)需下載SiROS, 直接通過(guò)本地瀏覽器連接Docker容器就可完成仿真任務(wù), 實(shí)現(xiàn)基于Docker的B/S架構(gòu). Docker為仿真軟件功能和資源服務(wù)進(jìn)行部署, 將所需要用到的資源和應(yīng)用封裝到Docker容器中, 然后將容器移植到支持Docker的計(jì)算機(jī)中, 實(shí)現(xiàn)“一次封裝, 到處運(yùn)行”的功能.
容器中資源調(diào)度和管理是Docker操縱云平臺(tái)來(lái)實(shí)現(xiàn)的. Docker鏡像為Docker容器提供底層資源、 庫(kù)等靜態(tài)參數(shù), 鏡像之間可以有繼承關(guān)系, 基類(lèi)鏡像根據(jù)需求向下派生出子鏡像. 生成Docker容器是將Docker鏡像進(jìn)行復(fù)制并添加一個(gè)可寫(xiě)層的過(guò)程, 以后各項(xiàng)操作就在容器中進(jìn)行, 產(chǎn)生的運(yùn)行結(jié)果及狀態(tài)通過(guò)可寫(xiě)層記錄到容器中.
云平臺(tái)提供三類(lèi)鏡像來(lái)支持SiROS仿真正常運(yùn)行, 支持視頻流的Web應(yīng)用服務(wù)鏡像方便用戶(hù)與仿真軟件的交互, 以可視化效果展現(xiàn)給用戶(hù); SiROS基礎(chǔ)計(jì)算應(yīng)用服務(wù)鏡像支持仿真計(jì)算和推演, 仿真模型搭建成功以后, 提交仿真命令就可使該類(lèi)鏡像生成的Docker容器工作; SiROS數(shù)據(jù)支持應(yīng)用服務(wù)鏡像綜合管理云平臺(tái), 計(jì)算集群和數(shù)據(jù)集群中的資源和數(shù)據(jù)都由該類(lèi)鏡像分配管理, 相當(dāng)于云平臺(tái)的操作系統(tǒng).
SiROS底層采用解釋型語(yǔ)言, 依賴(lài)解釋器, 效率較低, 但跨平臺(tái)性好. SiROS解釋型語(yǔ)言的語(yǔ)法分析器由Bison開(kāi)源工具構(gòu)建, 詞法分析器由Flex開(kāi)源工具構(gòu)建. 語(yǔ)法分析器采用Bison的LALR(1)語(yǔ)法分析方法, 它比GLR分析方法更容易使用、 速度更快. LALR(1)分析方法按特定語(yǔ)法規(guī)則解析成C程序. 在詞法構(gòu)建中, Flex采用正則表達(dá)式生成匹配對(duì)應(yīng)字符串的C代碼. Bison和Flex共同構(gòu)建SiROS解釋器.
在功能包開(kāi)發(fā)時(shí), SiROS制定了完整的功能包接口規(guī)范. 在加載并運(yùn)行功能包時(shí), SiROS設(shè)計(jì)了兩種方式來(lái)實(shí)現(xiàn): 一是暴露C/C++接口擴(kuò)充新功能包, 二是采用SiROS代碼擴(kuò)充新功能包. 在進(jìn)行矩陣計(jì)算等數(shù)值運(yùn)算時(shí), 使用SiROS代碼實(shí)現(xiàn). 在要求執(zhí)行速度快, 或有大量循環(huán)體和指針操作時(shí), 使用C/C++編寫(xiě)的接口來(lái)完成.
仿真軟件內(nèi)部設(shè)有SiROS函數(shù)池, 第一次運(yùn)行SiROS函數(shù)后, 會(huì)將函數(shù)名、 函數(shù)形參、 返回值等信息保存到SiROS函數(shù)池中, 使下一次調(diào)用該函數(shù)速度加快, 提高仿真速度. 運(yùn)行C/C++函數(shù)時(shí)要先將它們編譯成對(duì)應(yīng)的動(dòng)態(tài)鏈接庫(kù), 然后調(diào)用Clink加載動(dòng)態(tài)庫(kù)文件至SiROS進(jìn)程中, SiROS函數(shù)池也會(huì)保存C/C++函數(shù)和動(dòng)態(tài)鏈接庫(kù)文件相關(guān)信息.
用戶(hù)通過(guò)B/S架構(gòu)連接云提供端中SiROS基礎(chǔ)計(jì)算應(yīng)用服務(wù)鏡像所生成的Docker容器, 利用容器資源在本地瀏覽器中搭建Secular_J2軌道外推模型, 該模型的功能是對(duì)在軌服務(wù)對(duì)象遠(yuǎn)期軌道數(shù)據(jù)進(jìn)行推演計(jì)算. Secular_J2軌道外推仿真模型如圖6 所示.
圖6 Secular_J2軌道外推仿真模型
在Secular_J2軌道外推仿真模型中, Orbital number Input模塊定義軌道平近點(diǎn)角、 近地點(diǎn)幅角、 偏心率、 升交點(diǎn)赤經(jīng)、 軌道傾角及軌道半長(zhǎng)軸六要素, 六要素中長(zhǎng)度單位是米(m), 角度單位是弧度(rad). CJD_set模塊設(shè)置軌道衛(wèi)星外推開(kāi)始時(shí)間, J2 extrap模塊設(shè)置仿真步長(zhǎng), 步長(zhǎng)設(shè)置為1 min, 3D track plot模塊用于輸出軌道外推仿真輸出結(jié)果, 3D track plot模塊第一個(gè)輸入用于設(shè)置軌道外推天數(shù), 天數(shù)設(shè)置為7.
建立Secular_J2軌道外推仿真模型后, 點(diǎn)擊仿真推演系統(tǒng)界面的啟動(dòng)按鈕, 仿真模型會(huì)進(jìn)行參數(shù)檢查、 模型數(shù)據(jù)編譯、 運(yùn)行等操作, Secular_J2軌道外推模型仿真各階段時(shí)間輸出如圖7 所示.
圖7 Secular_J2軌道外推模型仿真各階段時(shí)間輸出
軌道外推仿真模型推演結(jié)果由3D track plot模塊輸出, Secular_J2軌道外推仿真模型輸出結(jié)果如圖8 所示.
圖8 Secular_J2軌道外推仿真模型輸出結(jié)果
在Secular_J2軌道外推仿真模型中, 軌道外推天數(shù)設(shè)置為7, 仿真步長(zhǎng)設(shè)置為1 min, 所以一共有10081(7*24*60+1)條記錄.
為驗(yàn)證SiROS軟件仿真結(jié)果準(zhǔn)確性, 可利用衛(wèi)星工具包(Satellite Tool Kit, STK)分析軟件對(duì)Secular_J2軌道外推仿真模型進(jìn)行推演計(jì)算, 取SiROS軟件輸出結(jié)果最后一條記錄與STK分析軟件計(jì)算結(jié)果進(jìn)行比較, 并計(jì)算相對(duì)誤差, 計(jì)算結(jié)果對(duì)比如表1 所示.
表1 Secular_J2軌道外推仿真模型在SiROS與STK軟件中的計(jì)算結(jié)果對(duì)比
由表1 可知, SiROS仿真軟件計(jì)算結(jié)果準(zhǔn)確, 從位置與速度兩方面進(jìn)行比較, 相對(duì)誤差較小, SiROS與STK軟件對(duì)位置與速度的平均相對(duì)誤差在0.0005925%左右.
1) 基于云平臺(tái)的仿真軟件設(shè)計(jì)中, 提供三類(lèi)應(yīng)用服務(wù)鏡像將SiROS仿真軟件部署在云平臺(tái)上, 利用Docker虛擬化、 容器化技術(shù)將仿真所需資源封裝在容器中, 立足于計(jì)算集群與數(shù)據(jù)集群, 通過(guò)B/S架構(gòu)對(duì)仿真任務(wù)進(jìn)行仿真計(jì)算與數(shù)據(jù)管理.
2) SiROS仿真軟件是模塊化核心架構(gòu), 不同功能包在底層負(fù)責(zé)的功能不同, 相互調(diào)用與通信共同完成仿真任務(wù), 仿真時(shí)采用分級(jí)啟動(dòng)方案加載對(duì)應(yīng)功能包, 用最少資源滿(mǎn)足仿真需求, 達(dá)到節(jié)約資源與提高仿真效率的目的.
3) 云平臺(tái)軟件結(jié)構(gòu)基于“Xenserver+Docker+Hadoop”實(shí)現(xiàn), 三類(lèi)應(yīng)用服務(wù)鏡像支撐云平臺(tái)正常運(yùn)行與服務(wù), 基于云平臺(tái)的SiROS仿真是在三類(lèi)應(yīng)用服務(wù)鏡像和Docker實(shí)現(xiàn)的B/S架構(gòu)基礎(chǔ)上進(jìn)行的, 通過(guò)Secular_J2軌道外推仿真模型驗(yàn)證了B/S架構(gòu)下SiROS軟件仿真結(jié)果的準(zhǔn)確性.