竇 帥,李子揚,朱家佳,李曉輝,米 琳,李傳榮
(中國科學院 空天信息創(chuàng)新研究院 中國科學院定量遙感信息技術(shù)重點實驗室,北京 100094)
綜合性的數(shù)據(jù)處理系統(tǒng)往往需要實施多種類型的數(shù)據(jù)處理業(yè)務,數(shù)據(jù)處理算法集成是研制建設此類系統(tǒng)的一項重要內(nèi)容,集成框架設計或集成方法的好壞將在很大程度上影響系統(tǒng)的數(shù)據(jù)處理效率、系統(tǒng)功能的可擴展性.同時,此類綜合性數(shù)據(jù)處理系統(tǒng)提供計算分析服務常常采用分布式的架構(gòu)實現(xiàn),在分布式系統(tǒng)中采用松耦合方式進行算法集成,有利于提高系統(tǒng)運行效率、降低系統(tǒng)的運行維護成本.
軟件插件技術(shù)作為組件復用技術(shù)的一種,能在不修改程序主體的情況下對軟件的功能進行加強[1],增強代碼的可重用性,提高軟件的開發(fā)生產(chǎn)率[2,3],可應用于數(shù)據(jù)處理算法集成.近年來軟件插件技術(shù)應用廣泛,多種常用應用軟件甚至操作系統(tǒng)均采用了插件技術(shù)[4],但是在分布式計算系統(tǒng)中集成、調(diào)用插件程序時,由于不同插件程序的開發(fā)者選用的開發(fā)語言、部署平臺方面存在差異且各插件程序產(chǎn)生的數(shù)據(jù)格式不統(tǒng)一[5],需要解決插件程序間的遠程消息通信、異構(gòu)數(shù)據(jù)共享等問題.目前很多應用系統(tǒng)未考慮插件程序間的信息交互,容易產(chǎn)生信息孤島[6].此外,在分布式計算系統(tǒng)中調(diào)度算法插件程序時,需建立動態(tài)反饋機制,根據(jù)各計算節(jié)點的資源使用情況動態(tài)調(diào)度節(jié)點中的插件程序,保證各計算節(jié)點資源使用不超載.
為探索臨近空間環(huán)境和生態(tài)系統(tǒng),國內(nèi)多家科研院所聯(lián)合參與了“臨近空間科學實驗系統(tǒng)”科技專項,旨在建成我國首個臨近空間科學實驗系統(tǒng),在多個典型區(qū)域分階段、多次開展覆蓋參量全、高度范圍完整的臨近空間綜合探測科學實驗和相關(guān)科學研究.為了能夠?qū)γ嫦蚨喾N臨近空間科學研究主題(如大氣交換、電磁輻射環(huán)境探測、生物適應性、氣體與同位素探測等)的大型綜合性科學探測實驗任務提供支撐與保障,需要設計和建設兼具任務規(guī)劃、數(shù)據(jù)存儲、數(shù)據(jù)計算、運行管理、數(shù)據(jù)分析、數(shù)據(jù)展示等多種功能的科學實驗支持系統(tǒng).快速高效完成各類科學載荷探測數(shù)據(jù)的處理、分析與展示是該科學實驗支持系統(tǒng)的核心功能之一,數(shù)據(jù)處理算法集成也成為系統(tǒng)設計建設的一個重要工作.與其他綜合性數(shù)據(jù)處理系統(tǒng)相比,臨近空間科學實驗支持系統(tǒng)的數(shù)據(jù)處理分析算法集成具有以下特點:1)專業(yè)領(lǐng)域跨越大.臨近空間科學探測涉及多種科學研究領(lǐng)域,不同專業(yè)領(lǐng)域的探測數(shù)據(jù)在形式、體量和處理方法上存在很大差異.2)探測載荷多類且多變.臨近空間科學探測載荷類別多樣(成像/非成像、探空/地基……),即使是相同的探測載荷,也可能由于不斷的改進優(yōu)化,使得各次實驗數(shù)據(jù)的記錄格式、探測內(nèi)容或處理算法隨之變化.3)處理算法多樣且不固定.作為一個科學研究支持系統(tǒng),數(shù)據(jù)處理需要滿足研究需求:系統(tǒng)需要集成研究過程中由于研究方法和思路的變化產(chǎn)生的不同處理算法;需要滿足對比分析的需求,系統(tǒng)需要針對某一探測數(shù)據(jù)集成多種版本的處理算法(具有不同參數(shù)、不同處理過程、不同處理方法的算法).以上數(shù)據(jù)特點與功能需求,采用分布式計算+算法集成的方法構(gòu)建處理數(shù)據(jù)處理系統(tǒng),將大幅降低系統(tǒng)升級維護、算法迭代的復雜度,且有利于提升數(shù)據(jù)處理效率.
針對以上系統(tǒng)需求和集成難點,本文借鑒軟件插件設計的思想,探討了一種在大型分布式科學分析系統(tǒng)中集成多種、多版本、多功能算法的集成方法:綜合考慮了算法運行依賴、算法注冊規(guī)范等方面因素,設計了算法管理器、算法調(diào)度器,實現(xiàn)了插件的加載與管控,將算法模塊設計為擁有獨立目錄結(jié)構(gòu)、相互隔離、可以“即插即用”的算法插件.采用該方法集成的系統(tǒng)部署運行在ZStack 私有云平臺上,對臨近空間科學實驗多種大氣參數(shù)、原位探測參數(shù)、生態(tài)參數(shù)的計算分析實驗驗證了該方法的有效性.
插件是應用系統(tǒng)的一部分,但是是相對獨立的自治域.插件可被軟件主體所引用,與之發(fā)生信息交互,但不能獨立的脫離軟件主體運行[7].與之相對的是軟件主體可在無插件的情況下獨立運行,不需依賴插件.
基于插件框架的設計,是將部分功能從軟件主體中剝離出來,以松耦合的方式和軟件主體進行連接.二者遵守共同的約定的接口協(xié)議,可以獨立的發(fā)生變化、升級、發(fā)布,互相不發(fā)生影響.這種松耦合的方式將整個軟件的復雜度分布在軟件主體和各插件中,降低了各自的開發(fā)難度,在軟件研發(fā)初期若出現(xiàn)需求不確定的情況,或預期在軟件運行期業(yè)務邏輯易發(fā)生變化,都可以采取這種方式應對.
一個基本的插件框架由3 部分組成,應用程序主體、插件接口和插件組成.應用程序主體負責實現(xiàn)軟件的主體功能,插件接口負責插件的接口協(xié)議和通訊,插件負責實現(xiàn)剝離出來的功能.其基本結(jié)構(gòu)如圖1所示.
圖1 插件框架基本結(jié)構(gòu)
在大型分布式系統(tǒng)中,由于插件的松耦合特性,非常適合用來實現(xiàn)動態(tài)變化的某些核心業(yè)務邏輯,使用插件方式,可有效降低整個系統(tǒng)的維護特性.
但在分布式系統(tǒng)中插件與單機軟件中的實現(xiàn)方式有所區(qū)別.
首先,由于不同的插件可能運行于不同的物理設備上,因此插件的接口更為復雜,往往包含了多機通訊的內(nèi)容,一個插件有可能與多個物理設備發(fā)生交互.
其次,由于有調(diào)度問題,分布式系統(tǒng)中的插件,需配合調(diào)度方法或工作流,以實現(xiàn)不同業(yè)務邏輯.
再次,插件的接口有可能不一定直接和軟件主體發(fā)生聯(lián)系,而是以中間件的方式,通過第三方軟件與系統(tǒng)主體進行交互.
最后,由于大型分布式系統(tǒng)的特性,插件的數(shù)量和規(guī)模,有可能比單機軟件大一到兩個數(shù)量級.
圖2顯示了一種使用中間件的插件實現(xiàn)方式.
圖2 一種利用中間件通訊的插件架構(gòu)
面向服務的架構(gòu)SOA是一種有效的分布式系統(tǒng)松耦合集成方式,它將應用系統(tǒng)不同的功能單元包裝成獨立的服務,通過服務間定義的接口協(xié)議進行通訊,協(xié)同完成系統(tǒng)功能.相對本文的插件來說,SOA的服務是一種粗粒度的,而計算內(nèi)核是相對內(nèi)斂的,非完全功能的模塊,而是針對某特定計算過程的程序,其更新速度要求開發(fā)及更新難度小,因此本文沒有采用SOA 方式,而是采用了插件架構(gòu)進行數(shù)據(jù)處理算法的集成,將數(shù)據(jù)計算視為一種服務,該服務由算法管理器、算法調(diào)度器和多種算法插件組成.因此在本系統(tǒng)中采用的是如圖3所示架構(gòu).
圖3 系統(tǒng)架構(gòu)圖
為滿足某大型科學實驗系統(tǒng)中的數(shù)據(jù)處理需求,設計了用于探測數(shù)據(jù)處理的算法集成插件框架.框架主要包括了系統(tǒng)主體、算法管理器、算法調(diào)度器.系統(tǒng)主體實現(xiàn)實驗數(shù)據(jù)的采集、存儲、管理、檢索、任務控制等主體功能,由多種數(shù)據(jù)處理算法實現(xiàn)具體的科學數(shù)據(jù)計算功能.算法管理器實現(xiàn)了算法插件注冊、算法注冊信息管理、算法運行環(huán)境配置.算法調(diào)度器實現(xiàn)了計算節(jié)點的計算資源監(jiān)視、任務分配、算法調(diào)度功能.算法管理器、算法調(diào)度器共同實現(xiàn)了多種數(shù)據(jù)處理算法的集成.在系統(tǒng)實現(xiàn)過程中還專門設計了算法注冊規(guī)范,方便科研人員規(guī)范算法實現(xiàn)方式,規(guī)范化上注數(shù)據(jù)處理算法.同時還考慮了算法間的依賴問題,以算法依賴圖的方式輔助算法的調(diào)度過程.
算法管理器負責算法插件的注冊,對系統(tǒng)中注冊的算法進行管理,同時負責系統(tǒng)中算法插件運行環(huán)境的配置.算法管理器提供數(shù)據(jù)處理算法插件上傳服務,科研人員根據(jù)統(tǒng)一的處理算法集成接口上傳各自算法,由算法管理器實現(xiàn)多計算節(jié)點的部署.算法注冊信息管理包括了算法信息的錄入、查詢、瀏覽、編輯與刪除等功能.算法插件運行環(huán)境配置實現(xiàn)算法插件的輸入路徑、輸出路徑、數(shù)據(jù)庫環(huán)境配置,構(gòu)建支持算法插件正常運行的環(huán)境.算法管理器接口如圖4所示.
圖4 算法管理器接口圖
算法管理器通過算法插件注冊單元接收用戶上傳的算法插件注冊信息及插件程序,向算法注冊信息管理單元發(fā)送算法插件注冊信息.算法注冊信息管理單元接收算法插件注冊單元提供的算法插件注冊信息;接收算法插件提供用戶輸入的編輯、刪除、檢索指令,向用戶提供算法注冊信息檢索、編輯、刪除等功能.算法插件運行環(huán)境配置單元接收算法插件提供用戶提交的算法插件運行環(huán)境配置信息,配置運行環(huán)境.
算法插件注冊與集成過程如圖5所示.
1)用戶向系統(tǒng)上傳插件程序,由系統(tǒng)推薦或手工指定部署至某數(shù)據(jù)處理節(jié)點.
2)系統(tǒng)解析用戶提交的算法注冊信息并存儲,包括算法名稱、適用范圍、輸入輸出等.
3)配置算法運行環(huán)境,例如依賴包、文件交互路徑、數(shù)據(jù)庫信息等.
4)算法入庫完成.
圖5 算法插件注冊與集成流程圖
在科學探測實驗中,獲取的探測數(shù)據(jù)種類多,數(shù)據(jù)處理任務量大,處理過程消耗時間長,并且對系統(tǒng)硬件資源有較高需求.為提高數(shù)據(jù)處理任務的執(zhí)行效率,采用了集群式并行數(shù)據(jù)處理技術(shù),在多臺數(shù)據(jù)計算節(jié)點間合理地分配探測數(shù)據(jù)處理任務.探測數(shù)據(jù)并行處理過程涉及資源調(diào)度節(jié)點以及多個數(shù)據(jù)計算節(jié)點.資源調(diào)度節(jié)點接收到數(shù)據(jù)處理任務后,采集各數(shù)據(jù)計算節(jié)點的系統(tǒng)資源狀態(tài),根據(jù)任務分配算法將任務分配至相應的數(shù)據(jù)計算節(jié)點.數(shù)據(jù)計算節(jié)點按照執(zhí)行流程,逐步對探測數(shù)據(jù)進行處理,并上報處理進度,直至任務執(zhí)行完畢,最后將產(chǎn)品數(shù)據(jù)存儲至文件存儲系統(tǒng).
要使并行集群有較好的處理效果,需要考慮數(shù)據(jù)計算節(jié)點自身的處理性能和當前的實時負載情況,因此,引入動態(tài)反饋機制以實時獲取數(shù)據(jù)計算節(jié)點的當前狀態(tài),各個計算節(jié)點需要定期的將自身的狀態(tài)信息反饋給調(diào)度節(jié)點,更新資源調(diào)度節(jié)點上記錄的信息.
動態(tài)反饋機制模型如圖6所示.調(diào)度主節(jié)點會周期地收集信息,W0 代表數(shù)據(jù)計算節(jié)點前一個周期的權(quán)重值,數(shù)據(jù)計算節(jié)點周期性地向調(diào)度主節(jié)點反饋其當前的負載信息,調(diào)度主節(jié)點根據(jù)算法F和這些信息對當前數(shù)據(jù)計算節(jié)點的權(quán)重值進行調(diào)整,計算出其當前權(quán)重值New_W(i).當數(shù)據(jù)處理任務r到來后,調(diào)度主節(jié)點根據(jù)算法把任務分配到負載權(quán)值比例較小(即相對空閑)的數(shù)據(jù)計算節(jié)點上[8].
圖6 動態(tài)反饋機制模型
采用插件框架,要求算法開發(fā)人員要按照約定的規(guī)范對算法進行描述,才能在系統(tǒng)中進行算法注冊.數(shù)據(jù)處理算法以程序插件形式獨立封裝,為確保算法插件可被規(guī)范化集成調(diào)用,需從內(nèi)容、格式、方法等層面制定數(shù)據(jù)處理算法集成規(guī)范,明確數(shù)據(jù)處理算法插件集成過程涉及到的算法配置要求、算法編譯要求、算法集成形式、算法接口要求、算法運行要求及算法注冊要求.算法配置要求包括算法的依賴庫、配置文件的存放目錄要求及命名要求;算法編譯要求中規(guī)定通過相對路徑加載依賴庫和配置文件的方法;算法封裝形式要求中規(guī)定算法實體插件必須封裝為在Linux操作系統(tǒng)或Windows 操作系統(tǒng)下的可執(zhí)行程序;算法接口要求分為輸入接口和輸出接口,算法輸入接口包括探測數(shù)據(jù)文件、探測數(shù)據(jù)名稱、探測數(shù)據(jù)類型、探測數(shù)據(jù)描述信息等內(nèi)容,算法輸出接口包括探測產(chǎn)品數(shù)據(jù)、數(shù)據(jù)處理產(chǎn)品存儲路徑、數(shù)據(jù)處理進度上報信號、任務完成報告格式要求;算法運行要求包括算法插件的調(diào)用方式、算法插件的調(diào)用指令、算法插件執(zhí)行過程中的文件操作權(quán)限設計、算法插件各類結(jié)束狀態(tài)的返回值;算法注冊要求包括算法名稱、算法描述信息、算法版本、算法部署路徑、算法插件運行最長允許時間、算法插件啟動的進程數(shù)、算法插件占用的內(nèi)存等注冊信息的格式規(guī)范.
算法插件注冊要求包括算法插件名稱、算法插件描述信息、算法插件版本、算法插件部署路徑、算法插件啟動的進程數(shù)、算法插件占用的內(nèi)存、算法插件研制單位、算法插件聯(lián)系人等注冊信息的格式規(guī)范.
1)算法插件名稱:算法名稱由英文或數(shù)字構(gòu)成,不包含中文及特殊符號.
2)算法插件描述信息:算法描述信息由中英文字符、符號及數(shù)字組成,不超過500 字.
3)算法插件版本:由“V”+版本號構(gòu)成,版本號范圍為0-99.
4)算法插件部署路徑:要求算法插件可在任意路徑下正常運行.
5)算法插件啟動進程數(shù):描述信息由數(shù)字組成.
6)算法插件占用內(nèi)存:描述信息由數(shù)字+“MB”組成.
算法插件注冊信息需填入XML 文件后上傳至系統(tǒng),文件名為算法插件名稱+“.xml”,文件內(nèi)容如下所示:
由于科學計算的數(shù)據(jù),處理過程多種多樣,算法之間有可能有依賴關(guān)系.這種依賴關(guān)系并非調(diào)用關(guān)系,而是數(shù)據(jù)處理過程與級別的關(guān)系.在本文中定義算法A1依賴于算法A2,表示為D(A1,A2).是指如果要用算法A1對某次實驗的某個載荷獲取數(shù)據(jù)進行處理,必須要由算法A2先對數(shù)據(jù)進行處理.
系統(tǒng)依賴圖是程序基于圖形的中間表示,能清晰第表示出程序中的各種控制依賴和數(shù)據(jù)依賴關(guān)系及程序的語法與語義信息[9].通過構(gòu)建算法依賴圖的方式來進行算法間的依賴描述,借用系統(tǒng)依賴圖的概念,但是做相應簡化,將語句節(jié)點、調(diào)用節(jié)點、參數(shù)節(jié)點等簡化為單一算法節(jié)點,將控制依賴、流依賴、聲明依賴、調(diào)用及傳參等關(guān)系,簡化為單一的調(diào)用關(guān)系.因此算法依賴圖可用簡單的有向無環(huán)圖來表示,圖中節(jié)點表示算法,帶方向的連接表示依賴關(guān)系.節(jié)點可以單獨存在,即不需依賴其他算法可獨立進行數(shù)據(jù)處理.因算法不可循環(huán)依賴,因此圖為無環(huán)圖.圖中還有一類特殊的節(jié)點,為底層庫,多為數(shù)據(jù)格式讀寫庫、通用計算庫等,這些底層庫并非自行開發(fā).
算法注冊時表示的D(A1,A2),D(A2,A4),…,D(Am,An),最終在系統(tǒng)中合并為整個計算系統(tǒng)的算法依賴圖.圖7為部分算法的依賴關(guān)系圖示例.
圖7 算法依賴圖示例
系統(tǒng)在初始化計算任務時,需根據(jù)算法依賴圖輔助計算任務的制定,以確保業(yè)務邏輯的順利執(zhí)行.
在實際工作中,用Java 實現(xiàn)了臨近空間探測數(shù)據(jù)處理算法集成調(diào)度系統(tǒng),布署于曙光天闊I620-G20機架式服務器中,算法管理器與并行計算管理器相配合,在ZStack 私有云服務器中實現(xiàn)了多業(yè)務、多算法、多類數(shù)據(jù)的并行處理和業(yè)務邏輯的隨時調(diào)整.系統(tǒng)運行硬件環(huán)境如圖8所示.
圖8 系統(tǒng)運行硬件環(huán)境圖
臨近空間探測數(shù)據(jù)處理算法集成調(diào)度系統(tǒng)包括:資源監(jiān)控模塊、算法集成管理模塊、任務調(diào)度模塊.資源監(jiān)控模塊收集各計算服務器的狀態(tài)信息并向用戶提供圖形化展示;算法集成管理模塊提供算法插件注冊、注冊信息管理、插件運行環(huán)境配置等功能;任務調(diào)度模塊將隊列中的數(shù)據(jù)處理任務合理分配并調(diào)用相關(guān)的算法插件執(zhí)行數(shù)據(jù)處理任務.系統(tǒng)結(jié)構(gòu)如圖9.
系統(tǒng)可支持實現(xiàn)科學探測數(shù)據(jù)的處理,包括數(shù)據(jù)歸檔處理、輻射校正、幾何校正、生態(tài)參數(shù)計算等算法共3 類16 個;探測數(shù)據(jù)處理任務分配用時少于0.2 s;算法插件調(diào)度響應時間少于0.5 s;可支持不少于32 個探測數(shù)據(jù)處理任務并行執(zhí)行.
系統(tǒng)具備良好的可擴展性,在實驗期間,根據(jù)處理結(jié)果分析迭代的情況,對算法進行了多次版本升級,共計12 次.版本升級過程中,大系統(tǒng)業(yè)務無影響、無宕機.且多個版本共存,可根據(jù)具體業(yè)務的不同,在工作流中配置使用不同版本的算法,完成不同業(yè)務邏輯的實現(xiàn).系統(tǒng)中的資源監(jiān)控模塊界面如圖10所示.算法集成管理模塊界面如圖11所示.任務調(diào)度模塊界面如圖12所示.
圖9 系統(tǒng)結(jié)構(gòu)圖
圖10 資源監(jiān)控模塊界面截圖
圖11 算法集成管理模塊界面截圖
圖12 任務調(diào)度模塊界面截圖
本文設計的分布式計算系統(tǒng)中的插件式算法集成方法,經(jīng)過兩套科學實驗計算系統(tǒng)的運行實驗,驗證了該算法集成方法的有效性,可有效的實現(xiàn)系統(tǒng)計算功能,且靈活性高,升級便利,配置方便.從目前的研究現(xiàn)狀和發(fā)展趨勢來看,在云計算、霧計算等分布式計算架構(gòu)下,研究用于靈活科學計算的插件式算法集成算法,對于科學實驗系統(tǒng)所采集的數(shù)據(jù)開展靈活的處理與分析具有重要的實際意義.由于目前的設計模式還無法實現(xiàn)插件自己解決依賴問題,只能使用調(diào)度器,在設立處理任務的時候,用依賴圖來人工輔助,后續(xù)將持續(xù)研發(fā),實現(xiàn)任務初始化自動遍歷依賴圖,規(guī)劃計算邏輯和流程.