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