李劍平
(中國電子科技集團(tuán)公司第十五研究所,北京100083)
計算網(wǎng)格是一組硬件、軟件資源,可以對高端計算提供無縫、獨立以及普遍訪問。為了將萬億次計算與存儲系統(tǒng)通過網(wǎng)絡(luò)有效地互連,網(wǎng)格提供了研究的新途徑。網(wǎng)格的成功關(guān)鍵依賴于工具和應(yīng)用程序的開發(fā),使得終端用戶可以方便地使用它們。
工業(yè)界廣泛采用的構(gòu)件技術(shù),已經(jīng)解決了諸如不同程序設(shè)計語言、第三方軟件進(jìn)行應(yīng)用開發(fā)以及不斷增加的大量的軟件遺產(chǎn)所導(dǎo)致的互操作問題。在商業(yè)領(lǐng)域也存專為商業(yè)環(huán)境而設(shè)計件技術(shù)標(biāo)準(zhǔn),但都沒有考慮大規(guī)模并行計算的相關(guān)問題。
目前,只有一種網(wǎng)格服務(wù)標(biāo)準(zhǔn),即開放網(wǎng)格服務(wù)架構(gòu)(OGSA),以及它的配套實現(xiàn)標(biāo)準(zhǔn)-開放網(wǎng)格服務(wù)基礎(chǔ)設(shè)施。本質(zhì)上,OGSA標(biāo)準(zhǔn)定義了什么是網(wǎng)格服務(wù),網(wǎng)格服務(wù)可以做些什么,以及網(wǎng)格服務(wù)所基于的技術(shù)。但是,OGSA并沒有深入闡述規(guī)范中的技術(shù)細(xì)節(jié),它的主要目的是澄清什么是網(wǎng)格系統(tǒng),什么不是網(wǎng)格系統(tǒng)。OGSI是OGSA所描述的概念的正式技術(shù)規(guī)范。OGSI中包含如何管理任務(wù)、分配任務(wù)以及如何描述服務(wù)提供者和網(wǎng)格服務(wù)的規(guī)范。
OGSI是一項基于新興的服務(wù)標(biāo)準(zhǔn)的網(wǎng)格軟件基礎(chǔ)結(jié)構(gòu)標(biāo)準(zhǔn)化工作,用于為OGSA軟件組件提供最大的互操作性。網(wǎng)格服務(wù)實例基于OGSI規(guī)范,是一個網(wǎng)絡(luò)服務(wù),符合用網(wǎng)絡(luò)服務(wù)描述語言表達(dá)為服務(wù)接口、擴(kuò)展和行為的一組約定。
設(shè)計CCA的初衷是為了生成大規(guī)模并行超級計算機(jī)的應(yīng)用程序和構(gòu)件,但是其語義特性并不適應(yīng)在網(wǎng)格環(huán)境中的應(yīng)用。CCA的核心思想是通過構(gòu)件技術(shù)建立應(yīng)用程序。2個CCA構(gòu)件通過它們的端口連接組合,提供端口可以顯示構(gòu)件所能提供的功能性。在語義上,非常類似于服務(wù)的遠(yuǎn)程系統(tǒng)調(diào)用端口。使用端口則顯示了構(gòu)件所需要的功能。使用和提供端口綁定在一起。當(dāng)使用端口連接到提供端口后,任何使用端口所需的功能可以通過調(diào)用所連接的提供端口獲得。
比較CCA和構(gòu)件體系模型(CCM),和CCA一樣,CCM也有端口的概念。但CCA所設(shè)計的連接是動態(tài)運行時行為,端口可以在運行時被動態(tài)添加、刪除以及連接。CCM不允許添加或刪除端口。CCM連接被看作應(yīng)用程序匯編語言的一部分,終端用戶無法動態(tài)對其操作。而CCA支持手動添加端口,使得用戶可以直接對構(gòu)件連接進(jìn)行操作從而手動解決特殊問題,為用戶提供更靈活的處理方案。
CCA的每一個端口由其名字所確定,并且具有一個操作接口。操作接口由科學(xué)接口定義語言或簡單的JAVA接口或擴(kuò)展標(biāo)記語言(XML)規(guī)范定義,圖1為2個構(gòu)件通過CCA端口實現(xiàn)綁定連接。
圖1 構(gòu)件通過CCA實現(xiàn)綁定連接
如同OGSA,CCA提供了一系列標(biāo)準(zhǔn)的服務(wù)和接口。其中最重要的是構(gòu)件的創(chuàng)建服務(wù),可以使得一個構(gòu)件實例創(chuàng)建另一個構(gòu)件實例以及連接服務(wù),使程序員可以將一個構(gòu)件的需求端口綁定到另一個構(gòu)件的提供端口上。
分布式網(wǎng)格應(yīng)用構(gòu)件結(jié)合了構(gòu)件技術(shù)和服務(wù)的優(yōu)勢,以C++和JAVA語言實現(xiàn),提供了2種語言所寫構(gòu)件之間的無縫的互操作性。
XCAT實現(xiàn)的每一個提供端口是一個具有端口類型的服務(wù)。通過XML規(guī)范定義端口。這些規(guī)范也常用于生成封裝代碼,該代碼中使用XCAT進(jìn)行通訊的低層細(xì)節(jié)對用戶透明,并且該代碼也處理C++和JAVA構(gòu)件之間互操作性轉(zhuǎn)化。
XCAT通過通訊系統(tǒng)進(jìn)行消息傳遞,提供了不同地址空間相互之間通訊的有效模型,該通訊系統(tǒng)是使用簡單對象訪問協(xié)議(SOAP)作為通訊協(xié)議的模型實現(xiàn)。
XCAT提供了封裝了構(gòu)件實例的創(chuàng)建服務(wù),因此底層的實現(xiàn)細(xì)節(jié)對構(gòu)件開發(fā)者是透明的。首先可以根據(jù)一系列環(huán)境值生成構(gòu)件實例。例如執(zhí)行區(qū)域、主程序以及創(chuàng)建機(jī)制。對于同樣的地址空間,不同主程序所生成構(gòu)件實例可能不同。當(dāng)構(gòu)件實例創(chuàng)建后,創(chuàng)建服務(wù)將會返回一個構(gòu)件ID作為新構(gòu)件的編號。其次可以通過構(gòu)件ID刪除相應(yīng)的構(gòu)件實例。
XCAT也提供了不同構(gòu)件實例建立通訊的連接服務(wù)。如:端口之間通訊的連接和斷開與端口的顯性或隱性特性,供助此服務(wù)有助于動態(tài)構(gòu)成應(yīng)用程序,并向終端用戶呈現(xiàn)一個簡單的接口,隱藏不必要的細(xì)節(jié)。
XCAT可以作為一個分布式計算框架使用,主要基于以下重要特性:
①安全性:任何提供端口的遠(yuǎn)程調(diào)用發(fā)生前,這些調(diào)用都會被XCAT-JAVA框架截獲。因此在提供端口和XCAT框架之間提供了安全服務(wù)。安全服務(wù)檢查遠(yuǎn)程調(diào)用,當(dāng)安全需求達(dá)到時,允許調(diào)用通過;
②構(gòu)件ID:為構(gòu)件提供了可移植的句柄。XCAT使用通訊系統(tǒng)提供的遠(yuǎn)程應(yīng)用機(jī)制來表示。這個句柄被公布到注冊服務(wù)器,之后可以被任意需要的組織發(fā)現(xiàn)并且使用它來調(diào)用構(gòu)件上的方法;
③異常:XCAT為構(gòu)件之間的通訊提供了異常模型。構(gòu)件通訊時發(fā)生的異常被獲取及返回到啟動通訊的構(gòu)件;
④事件和通知:XCAT-JAVA使用事件通知系統(tǒng),這是為網(wǎng)格應(yīng)用程序從發(fā)布者到用戶之間可靠地傳遞XML消息所設(shè)計的消息中間件,即使用戶的位置發(fā)生改變或者消息發(fā)布者重啟都不會受到影響。
構(gòu)件體系結(jié)構(gòu)描述了不同構(gòu)件組成應(yīng)用程序的方法以及它們之間的互連。構(gòu)件在特定的主程序上創(chuàng)建,并且以分布式系統(tǒng)的方式互連。同樣,也可以創(chuàng)建元構(gòu)件。
為了實現(xiàn)這種組合,用戶可以直接使用XCAT服務(wù)的應(yīng)用程序編程接口寫簡單的JAVA程序,從而使用遠(yuǎn)程構(gòu)件。通過使用創(chuàng)建服務(wù),JAVA程序創(chuàng)建構(gòu)件并且獲得引用來運行構(gòu)件例程。之后程序使用連接服務(wù)來連接這些構(gòu)件的提供端口和使用端口,命名服務(wù)用于保存和檢索正在運行構(gòu)件的ID。
以上這些方法僅僅適合于存在適合的需要運行和被監(jiān)控的構(gòu)件集合。如果需要更為靈活的動態(tài)機(jī)制創(chuàng)建和管理構(gòu)件,而不需要重新編譯程序,可以使用Jython腳本。Jython是使用Python語言的純JAVA實現(xiàn)。由于XCAT可以通過JAVA而得以實現(xiàn),因此可以為XCAT庫提供了Jython接口。
如圖2所示,使用XCAT可實現(xiàn)構(gòu)件空間上的結(jié)合,從而可被任意客戶端訪問。每一個XCAT構(gòu)件有一個提供端口實現(xiàn)了OGSI網(wǎng)格服務(wù)端口類型,其余的提供端口是一級的服務(wù)端口即CCA端口。使用CCA連接方法連接構(gòu)件,并且XCAT的使用端口連接到傳統(tǒng)的服務(wù)。
圖2 使用XCAT實現(xiàn)構(gòu)件空間上的結(jié)合
服務(wù)技術(shù)廣泛應(yīng)用的最主要原因是因為它可以將已經(jīng)存在的過程和服務(wù)組合稱為更加有用的新應(yīng)用。工作流是將過程的組織定義為良定義的操作流,可以被認(rèn)為為了實現(xiàn)特定目標(biāo),服務(wù)在時間上的結(jié)合。這是超越了當(dāng)前OGSI規(guī)范的一個領(lǐng)域。
構(gòu)件在時間上的結(jié)合定義了任意時間點構(gòu)件的邏輯連接,工作流系統(tǒng)定義了控制流和數(shù)據(jù)流表達(dá)的方式。目前一些工程都用到了工作流機(jī)制,然而大多數(shù)服務(wù)工作流系統(tǒng)并沒有有效地實現(xiàn)空間上的組合,因為Web服務(wù)描述語言沒有完全定義超越操作等等,而服務(wù)本身就是調(diào)用者。而XCAT結(jié)合了標(biāo)準(zhǔn)構(gòu)件體系結(jié)構(gòu)在空間組合上的優(yōu)勢和服務(wù)在時間組合上的優(yōu)勢,這個系統(tǒng)的實現(xiàn)存在一定的難度。
使用XCAT系統(tǒng)的工程包括天氣研究和預(yù)報、化學(xué)工程、碰撞風(fēng)險評估以及線性系統(tǒng)分析。圖3為基于CCA模型和OGSI架構(gòu)在碰撞風(fēng)險評估中XCAT的開發(fā)應(yīng)用,圖中主要描述了構(gòu)件狀態(tài)在空間上的組成方法。
圖3 在碰撞風(fēng)險評估中XCAT的開發(fā)應(yīng)用
如圖3所示,整個應(yīng)用程序被一個協(xié)調(diào)程序所控制。該協(xié)調(diào)程序首先運行一個主構(gòu)件和一組工作構(gòu)件。為了接收來自于主構(gòu)件的全仿真事件,協(xié)調(diào)程序訪問事件通道。當(dāng)模擬結(jié)束后,主構(gòu)件將模擬結(jié)果異步發(fā)送到事件通道。事件通道在永久存儲器中存儲這些數(shù)據(jù),并且將它們傳輸給協(xié)調(diào)程序。當(dāng)接收到來自事件通道的事件后,協(xié)調(diào)程序生成一個本地可視化程序,將接收到的數(shù)據(jù)傳輸給可視化程序??梢暬绦?qū)⒛M結(jié)果可視化。至此,XCAT在時間和空間上都完成了構(gòu)件的結(jié)合,從而構(gòu)造復(fù)雜的分布式應(yīng)用程序。
構(gòu)件方法推動了程序模塊結(jié)構(gòu)的封裝,使得構(gòu)件可以再利用,提高了應(yīng)用程序的產(chǎn)出率。通過XCAT將CCA和OGSI二者的優(yōu)勢結(jié)合,從而可以著重于不同的方面。將構(gòu)件基于時間和空間進(jìn)行分類,從而實現(xiàn)構(gòu)件在時間和空間上的結(jié)合。在上述研究成果基礎(chǔ)上設(shè)計的可擴(kuò)展的消息傳遞和消息發(fā)布系統(tǒng),為構(gòu)件提供了發(fā)布和預(yù)定消息的簡單途徑。此系統(tǒng)比目前的OGSI通知方案功能更加豐富其組織方法,為科學(xué)計算和模擬構(gòu)件程序設(shè)計奠定了基礎(chǔ)。
[1]曾萬聃,常桂然,戴勃,等.基于代理的OGSI網(wǎng)格調(diào)度系統(tǒng)研究[J].計算機(jī)工程,2006(23):24-26.
[2]劉會斌,都志輝.網(wǎng)格與Web服務(wù)的融合-WSRF和WS-Notification[J].計算機(jī)科學(xué),2005(2):76-79.
[3]于洋,楊愚魯,楊學(xué)剛.賀銘分布式網(wǎng)格系統(tǒng)的任務(wù)調(diào)度算法DE Scheduling[J].計算機(jī)工程,2008(14):75-77.
[4]王鵬,邵偉民,李偉.QoS感知的分布式網(wǎng)格工作流引擎的研究和設(shè)計[J].計算機(jī)工程與設(shè)計,2008(12):3040-3042.
[5]李紅,劉魯.分布式網(wǎng)格資源發(fā)現(xiàn)研究綜述[J].計算機(jī)應(yīng)用與軟件,2010(2):16-18.
[6]吳林.基于OGSA的網(wǎng)格數(shù)據(jù)庫研究現(xiàn)狀和趨勢[J].計算機(jī)工程與設(shè)計,2008(22):5843-5846.
[7]胡明生,陳學(xué)廣.基于OGSI NET的網(wǎng)格計算研究[J].計算機(jī)技術(shù)與發(fā)展,2006(4):7-10.