張 千,梁 鴻,石 琎,關新全
(中國石油大學 計算機與通信工程學院,山東 青島266555)
目前石油勘探開發行業對于高性能計算有著強勁的應用需求,高精度勘探對地震資料的存儲和處理能力的需求呈指數倍增長,我校早期購置的一些32節點、64節點的小規模集群雖性能良好,但已不能滿足大規模計算任務日益增長的需求,并且集群間在系統軟硬件上存在異構,現有方法難以將其有效整合和集成利用,從而導致可用資源處于閑置狀態,在該背景下,本文提出了一種基于JAVA框架技術的虛擬計算平臺 (framework-base virtual computing environment,FVCE)實現方法,充分利用現有的計算資源和閑置集群資源,對分散異構的資源進行整合管理,提升資源的利用率,同時最大限度地屏蔽底層繁雜通信細節,簡化系統業務邏輯的實施,建立了通用的虛擬計算系統框架,提供簡單易學的接口,滿足系統接口的應用就可以利用網絡中的計算資源,為用戶提供透明的計算資源使用方式。
虛擬計算環境需要協調多個計算主機求解復雜的計算任務,計算環境自身的功能和組織結構就十分復雜。因此,FVCE使用WEB架構技術,將虛擬計算環境分解為功能相對獨立的服務組件,各組件可以獨立設計、開發和進化,從而縮小整個計算環境的實施和維護代價。FVCE按照功能劃分成7個服務組件,各服務組件的主要功能描述如下:
(1)用戶訪問接口 (user port):基于FVCE二次開發的,方便用戶操作和使用的圖形用戶接口。用戶訪問接口提供觀測計算環境資源負載狀態、組織提交任務、查看任務執行狀態和結果、瀏覽工作目錄等功能;
(2)任務提交服務 (submit):接收來自于用戶的任務執行請求,分析任務執行文件,創建任務描述對象,維護任務狀態信息和執行邏輯;
(3)注冊服務 (register):向FVCE提交注冊信息,維護計算環境拓撲結構,測試遠程主機心跳等;
(4)信息服務 (information):維護整個計算環境靜態主機信息列表,獲取遠程主機動態信息;
(5)文件服務 (file):當任務計算需要傳輸數據文件時,將相關文件從調度主機傳遞到執行主機,并維護任務執行結果,方便使用者查詢;
(6)任務執行服務 (executor):接收遠程任務執行請求,在本地開啟任務執行,并監控任務執行狀態,反饋任務執行信息;
(7)調度服務 (schedule):接收來源于任務提交服務的調度請求,評估信息服務提供的資源信息,采用某種調度策略,為任務選擇執行主機,并將任務提交到執行主機的執行服務。
FVCE是基于對等組織結構的,因此計算環境中的所有計算節點都具有完備功能,即每個計算資源都要配置所有的7個服務。經過劃分后的7個服務組件,功能和內部實現相對獨立,各組件通過相應服務訪問接口獲取其它組件功能支持,同時向其它組件提供服務支持,各服務組件可直接通過網絡與其它主機內的服務組件通信,實現相應功能。
松散耦合的WEB設計架構中,服務對外提供的訪問方法和交互數據內容是預定義的,不可改變,但服務內部實現和業務邏輯是可變更的。服務實現者在遵從服務訪問規則前提下,根據系統需求提供最終的內部實現邏輯。FVCE框架的服務分層設計模型將服務訪問規則與具體服務實現相隔離,相同功能的組件對外提供相同服務,而對內卻可有多種不同的策略和實施方式,從而提高了應用服務的適應性和擴展性。圖1展示了FVCE框架中服務設計的層次關系。

圖1 服務設計層次關系
確定服務對外提供的功能和訪問方式,是服務設計需要解決的首要任務。如圖1所示,Resource層描述服務對外訪問接口,是服務功能的具體體現。虛擬計算環境設計過程中,根據各服務組件向外提供的功能,確定Resource層相應的接口方法。
XSD層用于規范服務間通信消息格式,一般同Resource層結合定義。Resource層定義接口過程中使用的復雜參數和返回值,需要使用XSD規范定義,通信雙方通過XSD文檔規范轉換出各自應用場景下使用的消息表示形式,最終完成通信。服務訪問規則是一個服務對外的功能和訪問方式體現,因此一旦確定,就很少發生改變。外部其它環境或應用在理解服務訪問規則的前提下,可以使用任何設計方式和實現環境對FVCE進行二次開發。使用XSD規范復雜通信數據類型的目的在于,環境的繼續開發者可以選擇期望的開發和運行環境對FVCE進行功能擴展,采用計算環境提供的RESTful類型的訪問方式,結合XSD的數據格式定義,任何一個能夠解析HTTP協議和XML文檔的開發運行環境都能夠輕易的與計算環境交互,使用其內部功能,達到靈活擴展的目的。
Model層描述Resource層中定義的復雜參數和返回值類型,是通信兩端消息的實體存在。通信兩端通過XSD層定義轉換出對應的 Model實體類 (entity class)。JAVA提供XJC可將XSD定義文檔直接轉換成包含有JAXB標記的Model層實體類,方便XML消息的自動生成和解析。
Logic層是服務內部實現的邏輯抽象,銜接Resource層和內部具體實現。每個服務內部可能有多種具體實現,不同的實現版本在策略和邏輯上略有差異,因此Logic和Impl是一對多的關系。在計算環境啟動時,使用一定的配置手段,選擇適當的Impl,為遠程請求提供服務支持。
為了提高服務使用的靈活性,采用Deploy外部文件的形式配置服務運行參數。Factory層在服務開啟時,分析Deploy文件描述,選擇適當的Impl實現注入到Resource層的Logic引用中,當遠程請求訪問Resource的相應接口時,Resource會通過Logic層選用具體的Impl版本提供服務處理。當需要更改計算環境中某個服務的具體實現時,只需將新實現版本相關文件加入到運行環境中,更改Deploy配置選項,無需對計算系統原有代碼進行修改,提高了系統擴展性和靈活性。計算環境中所有7個服務都遵從服務分層設計方法,具有較好的可用性、靈活性和擴展性同時,也方便了其他人員對環境的研究和改進。
1.3.1 框架技術組合
Spring[1,2]企業級框架技術簡化服務內部資源組織、維護和管理,能與多種通信框架無縫結合,屏蔽服務底層繁雜通信邏輯,可向外部應用者提供多種可選服務訪問方式,提高了系統靈活性。Spring框架技術在FVCE服務搭建過程中處于關鍵地位。圖2描述了虛擬計算環境框架技術組合方式,JRE (Java runtime environment)是基于JAVA 框架的服務運行基礎,屏蔽計算資源硬件和軟件系統異構性,支撐服務運行。Jetty是嵌入式WEB容器,負責構建和維護內部發布的服務,并在運行期間,監聽遠程服務請求,選擇相應的服務處理請求。

圖2 框架組合方式
服務啟動時Spring框架負責構建應用對象,根據服務配置解析應用對象間依賴關系,完成對象關系的依賴注入,服務運行后,Spring框架負責接收Jetty容器提交來的請求,解析請求信息內容,轉換成內部Resource層相應方法的調用,Resource層使用Impl層提供的具體邏輯處理遠程業務請求,業務執行結束后,Spring負責將響應內容以請求者期望的通信方式包裝返回。
Spring HTTP使用完整JAVA串行化機制,支持復雜JAVA對象傳輸,適合JAVA端到端之間通信;Hessian使用自定義二進制信息傳輸格式,將對象轉換成二進制編碼,并進行壓縮后傳輸,減輕網絡傳輸負擔,同時支持多種異構平臺間信息傳輸。
Blazeds是由Adobe公司提供的基于二進制格式的消息傳輸方式,與Hessian相似,具有一定跨異構平臺傳輸能力,適用于Flex客戶端與虛擬計算環境通信使用,由于本文提供的用戶訪問界面使用Flex開發,因此Blazeds作為默認客戶端通信方式,Jersey提供RESTful類型服務通信支持,當其它通信方式無法滿足服務使用者開發需求時,可以選用RESTful通信模式與FVCE進行通信,計算環境提供RESTful結合XML的通信形式,因此對于能使用HTTP協議,且解析XML文檔的開發運行環境,就有與計算環境通信的可能。
可二次開發是FVCE的特性之一,開發者在了解FVCE相應使用規范后,即可對FVCE功能進行擴展。因此,計算環境向外提供多種可選服務通信方式,方便服務使用者開發使用。服務使用者選擇期望的開發語言和運行平臺擴展FVCE的功能。
1.3.2 服務構建及請求處理
本文結合多種框架技術為外部提供靈活的訪問方式,同時提出基于分層的設計實現方法。通過分析服務構建流程,有利于理解計算環境和框架結合使用的方式,同時說明服務如何通過配置文件,配置服務內部業務邏輯。圖3描述了基于框架技術的服務構建流程。

圖3 服務構建流程
jetty.xml文檔描述Jetty容器啟動時配置的運行參數(例如:IP地址、端口號、服務名稱、緩沖池大小等),服務啟動時,Jetty分析jetty.xml文檔,設定容器運行參數。Jetty容器正常啟動后,分析工作目錄下的web.xml文檔,獲取應用服務具體配置。web.xml文檔提供了遠程請求URI與應用處理程序入口的映射,Jetty根據應用程序入口配置,啟動Spring處理過程。Spring分析配置文件servlet.xml,創建應用服務對象,并分析對象間依賴關系,完成依賴關系注入。
然后Spring創建Factory對象,分析deploy.xml文檔。deploy.xml文檔中配置服務開啟時默認使用的業務邏輯策略,Factory負責創建具體的Impl對象,并將Impl對象注入到Resource層的Logic引用中。同時,Spring分析通信模式的配置,并將通信模式的訪問與Resource層中具體方法相關聯,確定內部數據的轉換邏輯。
服務運行時,接收遠程請求,選擇適當的業務處理邏輯處理請求,并以期望的方式給予響應。Jetty服務容器監聽遠程客戶端請求,如果請求的URI描述與服務映射相同,將請求轉交給Spring監聽器處理,Spring根據URI的描述,選擇可用通信處理手段,解析請求消息內容,生成調用過程中使用的JAVA參數對象,并根據URI描述定位Resource層中具體的方法,Resource層的方法通過Logic接口,調用Impl層的具體實現,完成遠程請求的業務處理邏輯。Spring負責將請求處理結果按請求提交的通信方式反饋給客戶端。
注冊服務包含5個主要功能,分別是注冊、注銷、探測、心跳測試和主機列表獲取。
任意計算節點啟動時,向FVCE中某個計算節點提交注冊信息,表明當前節點期望加入計算組織,接收注冊信息的節點稱為介紹者節點。介紹者節點將新節點信息通知整個計算組織,并將計算組織內的主機列表反饋給新節點。注冊結束后,新節點知道計算環境中所有計算節點的資源靜態信息,計算環境中的其它計算節點也容納了新節點的信息。如果介紹節點是新節點自身或者配置的注冊節點不可達,則新節點自己構成一個虛擬計算環境。
計算節點正常離開時,向FVCE提供注銷信息,組織中的其它主機刪除注銷節點,不再將任務提交到離開的節點執行。當計算節點異常離開時,FVCE會對異常節點開啟異常探測過程。注冊服務對不可達主機進行定期心跳測試,當測試次數超過指定閾值后,注冊服務認為該主機將在很長一段時間內不可達,并將不可達主機從主機列表中刪除。
圖4展示了注冊服務用戶界面,列表中顯示PCClient計算節點能夠調度使用的計算單元基本信息。從表中可以得出,虛擬計算環境能夠組合多種類型的異構資源。

圖4 注冊服務
信息服務組件主要包括,資源靜態信息列表維護、資源動態信息獲取、本地資源歷史信息維護和本地資源信息查詢等功能。
在服務注冊期間,信息服務獲取各計算節點的靜態信息,存儲到本地。調度組件通過分析主機靜態信息選取部分感興趣的計算節點,使用信息服務獲取資源動態信息,因此,調度過程中僅對部分主機使用動態信息獲取,減輕了網絡負擔。
本地資源信息查詢需要獲取本地資源配置信息,出于安全考慮,多數編譯和運行環境不提供主機信息的直接提取,JAVA僅能獲取少量OS相關信息,無法獲取CPU、內存、硬盤等詳細信息。可以使用C或腳本語言編寫本地主機信息獲取程序,結合管道技術將信息傳遞給信息服務組件。由于不同操作系統資源訪問庫和腳本不同,一個信息獲取程序的編寫不適用于所有操作平臺,如果每種操作系統都由FVCE單獨提供信息收集程序,那么計算環境將面臨高昂的開發代價。
本文描述的信息服務使用Sigar[3]收集計算資源系統信息。信息服務開啟時,通過JAVA提供的操作系統基本信息,選擇適當的Sigar信息收集庫連接到資源系統,即可完成計算資源信息收集。圖5展示了信息服務組件提供的功能。

圖5 基本信息服務
文件服務主要有兩類功能,分別是文件管理功能和文件傳輸功能。文件管理功能包括,遠程主機工作目錄訪問、文件關鍵屬性查詢 (文件名、類型、大小、修改日期等)和工作目錄下創建、查找、刪除文件等操作,JAVA提供了文件系統相關API,可完成上述功能。
文件服務在任務開始執行前,將任務執行文件和相關數據文件傳輸到執行主機工作目錄,并在任務執行結束后將執行結果相關文件傳輸到調度提交端,以便使用者查詢任務執行結果,且文件服務清理執行主機工作目錄任務相關文件,恢復任務執行前執行主機文件系統狀態。
任務管理服務由3個主要功能組成,分別是分析任務、維護任務狀態和維護任務池。分析任務是接收遠程任務提交請求、分析任務說明文件、創建任務描述對象,并維護對象間執行邏輯關系;維護任務狀態是指,任務提交服務接收遠程執行服務任務狀態變化通知,修改任務池中相應單元的執行狀態,以便用戶查詢;提交任務池,維護投遞到本節點,但尚未執行完成的任務,任務提交服務通過任務池容量可以限定投遞到本地的計算任務數量。
任務調度服務接收提交服務的任務調度請求,通過信息服務獲取計算環境主機靜態信息,使用評估策略從中篩選出若干性能較好的資源,之后使用信息服務的動態信息獲取功能,獲取選中節點的動態運行信息,評估資源,選擇優秀的執行資源,將任務投遞到執行主機的執行服務。調度算法采用了一種基于對等模式的隨機自適應調度算法,能適應異構的、資源性能差距較大的運行環境,合理的將計算任務分配到節點上,并使用隨機策略、過載評估策略和反饋策略,將任務分配到優秀資源上執行的同時,保證整個計算環境負載平衡。
執行服務接收遠程任務執行請求,創建執行描述對象,存放于任務執行池中,在本地開啟任務執行,監控任務執行狀態,并將執行狀態變化反饋給調度主機的提交服務。執行服務同樣需要維護任務池,任務池的容量限定了執行主機能夠同時運行的計算任務的數量。
圖6展示了測試用的5個并行執行的子任務在虛擬計算環境中的執行狀態。

圖6 任務執行信息
如表1所示,測試環境采用4個Dell服務器節點、3個高性能計算單機節點、4個普通測試節點和1個遠程控制節點組成。每個Dell服務器節點由兩個CPU組成,每個CPU有4個核心,使用超線程技術,每個核心提供兩個計算線程,因此,每個服務器節點由2×4×2個邏輯CPU組成。每個高性能計算單機節點由1個雙核CPU組成,而普通測試節點則配置較低,與高性能節點性能差距較大。

表1 虛擬計算環境主機列表
基于對等體系結構的FVCE,系統內各計算單元間沒有嚴格的等級結構,所有的計算單元都具有提交、調度、執行任務功能。系統管理者可以根據需要,先將內部的零散計算資源組織成一個較小的FVCE,之后使用主動探測功能與遠程其它FVCE構建成更大的計算組織。
Server2、Server3、Server4根據配置文件向Server1注冊,PC2、PC3向PC1注冊,Demo2、Demo3、Demo4向Demo1注冊,Server1、PC1、Demo1、PCClient向自身注冊。當所有計算單元上的服務都正常開啟后,Server1、Server2、Server3、Server4,PC1、PC2、PC3,Demo1、Demo2、Demo3、Demo4和PCClient都各自構成一個FVCE,最后,使用注冊服務的主動探測功能,Server1、PC1、Demo1分別向PCClient交換信息,構成一個更大的計算環境。通過FVCE中的任何一個計算資源,用戶都可以訪問整個計算環境,本文通過使用裝有Windows系統環境的PCClient訪問整個計算環境。
本文使用Marmousi模型波場正演[4]對FVCE組件功能進行測試。有限差分波場正演根據炮集劃分成若干粒度較粗子任務,各任務可獨立并行運行,正演過程分成五步:①速度模型重采樣;②單炮正演,采用二維聲學有限差分正演每炮合成記錄;③每炮使用梯形濾波,過濾不必要的頻率成分;④生成單炮合成記錄;⑤所有炮正演結束后,統一調整道頭,產生零偏移距剖面和近偏移距剖面。任務DAG圖描述如圖7所示。

圖7 Marmousi正演過程DAG描述
在FVCE環境下通過計算測試得出零偏移距和近偏移距剖面合成結果如圖8所示,FVCE分布式計算框架基本上可以滿足地震勘探海量測試數據的計算需求。利用這種虛擬計算框架能夠協同多種計算資源共同完成復雜的計算任務,節約了計算成本。

圖8 零偏移距和近偏移距剖面合成記錄
在同等環境下,將FVCE的功能組件與集群計算和網格計算環境下的處理系統進行對比,計算Marmousi正演過程所需的時間。3種不同虛擬計算環境下的處理系統的運行時間如圖9所示。集群PBS處理系統所需運行時間為10805(s),集群使用集中調度方式,對全局資源評估的基礎上實施調度,在實驗室計算規模較小的情況下相對性能較高。

圖9 不同虛擬環境下Marmousi正演時間對比
網格計算GT系統所需運行時間為13203(s),盡管GT也使用集中調度方式,但是網格的性能提升很大程度上依賴與底層集群的執行效率,并且子任務不能夠跨越多個集群執行,因此效率比單集群低很多。
FVCE環境下所需運行時間為11001(s),FVCE采用對等式調度模式,所有的計算節點都具有調度執行功能,并且適用于異構的計算環境中實施調度,在當前實驗室配置環境中,FVCE的執行性能與GT相近。當計算環境規模擴大,并且資源種類多樣時,FVCE性能將會得到進一步提升。
當計算規模較小,且使用同構或性能差異較小的計算資源,集群即可發揮較大的性能優勢;當計算環境規模不斷擴大,計算資源種類較多且性能差異明顯時,集群已無法滿足計算和調度需求,FVCE使用對等式調度模式,適用于組織零散的計算資源,尤其是計算資源性能差異明顯并且規模較大的情況。當計算資源規模繼續擴大,并且能夠將同構計算資源使用集群組織管理,分層管理模式的GT在更高層次上控制和管理多個集群,能夠使整個系統獲得更好的計算性能。
本文在研究以往虛擬計算環境、調度算法和框架技術基礎上,提出了一種基于框架技術的虛擬計算環境FVCE的實現方法,框架技術能夠屏蔽底層繁雜的通信細節,簡化系統業務處理邏輯,實現多個服務組件在異構環境中通信與協作,能夠整合散異構的計算資源。FVCE采用分層服務設計方式來提高服務擴展性及靈活性,將計算環境按功能劃分成多個服務組件,各服務組件在遵循接口定義的約束下,可獨立設計、開發和進化,方便用戶進行二次開發,提升了虛擬計算系統的靈活性。采用Marmousi模型波場正演為例進行了應用測試,證明了虛擬計算系統的可行性,并在相同的硬件配置環境下與集群和網格計算系統進行了性能測試對比,實驗結果表明,FVCE適用于性能差異明顯的計算資源組織,在計算資源規模較大的環境下性能較好,能夠充分發揮出整體的計算潛能。
[1]Shufen Zhang,Shuai Zhang,Xuebin Chen,et al.Analysis and research of cloud computing system instance [C]//Second International Conference on Future Networks,2010:88-92.
[2]Rod Johnson,Juergen hoeller,Keith Donald,et al.Spring framework reference document [EB/OL]. [2011-04-25].http://www.springsource.org.
[3]Ryan Morgan,Doug MacEachem.System information gather and reporter(SIGAR)[EB/OL]. [2010-09-10].http://support.hyperic.com/display/SIGAR/Home.
[4]Ding Renwei,Li Zhenchun,Tong Zhaoqi.Research and development of seismic data processing system based on CFP technology by utilizing Qt graphical user interface library [J].Geophysical Prospecting for Petroleum,2009 (2):256-261.
[5]Daniel Nurmi,Rich Wolski,Chris Grzegorczyk,et al.The eucalyptus open-source cloud-computing system [C]//9th IEEE/ACM International Symposium on Cluster Computing and the Grid,2009:124-132.
[6]Youseff L.Toward a unified ontology of cloud computing[C]//Grid Computing Environments Workshop,2008:1-10.
[7]Foster I.Cloud computing and grid computing 360-degree compared[C]//Grid Computing Environments Workshop,2008:12-16.
[8]Peter Mell,Timothy Grance.The NIST definition of cloud computing [S].National Institute of Standards and Technology Special Publication (800-145),2011.
[9]CHEN Xiaojun,ZHANG Jing,LI Junhuai.Framework for collaborative computing task distribution deployment and execution over multiple virtual machines [J].Journal of Applied Sciences,2011,29 (5):516-520 (in Chinese). [陳小軍,張璟,李軍懷.多虛擬機協同計算任務的分發部署及運行框[J].應用科學學報,2011,29 (5):516-520.]
[10]Ellert M,Gronager M,Konstantinov A,et al.Advanced resource connector middleware for lightweight computational grids [J].Future Generation Computer Systems,2007 (23):219-240.
[11]ZHU Jun,GONG Jianhua,LIN Jun.Study on VGE computing architecture and key technologies [J].Journal of North University of China (Natural Science Edition),2007,28(4):326-330 (in Chinese). [朱軍,龔建華,林軍.虛擬地理環境計算框架及其關鍵技術研究 [J].中北大學學報 (自然科學版),2007,28 (4):326-330.]