李劍平
(中國電子科技集團公司第十五研究所,北京100083)
計算網格是一組硬件、軟件資源,可以對高端計算提供無縫、獨立以及普遍訪問。為了將萬億次計算與存儲系統通過網絡有效地互連,網格提供了研究的新途徑。網格的成功關鍵依賴于工具和應用程序的開發,使得終端用戶可以方便地使用它們。
工業界廣泛采用的構件技術,已經解決了諸如不同程序設計語言、第三方軟件進行應用開發以及不斷增加的大量的軟件遺產所導致的互操作問題。在商業領域也存專為商業環境而設計件技術標準,但都沒有考慮大規模并行計算的相關問題。
目前,只有一種網格服務標準,即開放網格服務架構(OGSA),以及它的配套實現標準-開放網格服務基礎設施。本質上,OGSA標準定義了什么是網格服務,網格服務可以做些什么,以及網格服務所基于的技術。但是,OGSA并沒有深入闡述規范中的技術細節,它的主要目的是澄清什么是網格系統,什么不是網格系統。OGSI是OGSA所描述的概念的正式技術規范。OGSI中包含如何管理任務、分配任務以及如何描述服務提供者和網格服務的規范。
OGSI是一項基于新興的服務標準的網格軟件基礎結構標準化工作,用于為OGSA軟件組件提供最大的互操作性。網格服務實例基于OGSI規范,是一個網絡服務,符合用網絡服務描述語言表達為服務接口、擴展和行為的一組約定。
設計CCA的初衷是為了生成大規模并行超級計算機的應用程序和構件,但是其語義特性并不適應在網格環境中的應用。CCA的核心思想是通過構件技術建立應用程序。2個CCA構件通過它們的端口連接組合,提供端口可以顯示構件所能提供的功能性。在語義上,非常類似于服務的遠程系統調用端口。使用端口則顯示了構件所需要的功能。使用和提供端口綁定在一起。當使用端口連接到提供端口后,任何使用端口所需的功能可以通過調用所連接的提供端口獲得。
比較CCA和構件體系模型(CCM),和CCA一樣,CCM也有端口的概念。但CCA所設計的連接是動態運行時行為,端口可以在運行時被動態添加、刪除以及連接。CCM不允許添加或刪除端口。CCM連接被看作應用程序匯編語言的一部分,終端用戶無法動態對其操作。而CCA支持手動添加端口,使得用戶可以直接對構件連接進行操作從而手動解決特殊問題,為用戶提供更靈活的處理方案。
CCA的每一個端口由其名字所確定,并且具有一個操作接口。操作接口由科學接口定義語言或簡單的JAVA接口或擴展標記語言(XML)規范定義,圖1為2個構件通過CCA端口實現綁定連接。

圖1 構件通過CCA實現綁定連接
如同OGSA,CCA提供了一系列標準的服務和接口。其中最重要的是構件的創建服務,可以使得一個構件實例創建另一個構件實例以及連接服務,使程序員可以將一個構件的需求端口綁定到另一個構件的提供端口上。
分布式網格應用構件結合了構件技術和服務的優勢,以C++和JAVA語言實現,提供了2種語言所寫構件之間的無縫的互操作性。
XCAT實現的每一個提供端口是一個具有端口類型的服務。通過XML規范定義端口。這些規范也常用于生成封裝代碼,該代碼中使用XCAT進行通訊的低層細節對用戶透明,并且該代碼也處理C++和JAVA構件之間互操作性轉化。
XCAT通過通訊系統進行消息傳遞,提供了不同地址空間相互之間通訊的有效模型,該通訊系統是使用簡單對象訪問協議(SOAP)作為通訊協議的模型實現。
XCAT提供了封裝了構件實例的創建服務,因此底層的實現細節對構件開發者是透明的。首先可以根據一系列環境值生成構件實例。例如執行區域、主程序以及創建機制。對于同樣的地址空間,不同主程序所生成構件實例可能不同。當構件實例創建后,創建服務將會返回一個構件ID作為新構件的編號。其次可以通過構件ID刪除相應的構件實例。
XCAT也提供了不同構件實例建立通訊的連接服務。如:端口之間通訊的連接和斷開與端口的顯性或隱性特性,供助此服務有助于動態構成應用程序,并向終端用戶呈現一個簡單的接口,隱藏不必要的細節。
XCAT可以作為一個分布式計算框架使用,主要基于以下重要特性:
①安全性:任何提供端口的遠程調用發生前,這些調用都會被XCAT-JAVA框架截獲。因此在提供端口和XCAT框架之間提供了安全服務。安全服務檢查遠程調用,當安全需求達到時,允許調用通過;
②構件ID:為構件提供了可移植的句柄。XCAT使用通訊系統提供的遠程應用機制來表示。這個句柄被公布到注冊服務器,之后可以被任意需要的組織發現并且使用它來調用構件上的方法;
③異常:XCAT為構件之間的通訊提供了異常模型。構件通訊時發生的異常被獲取及返回到啟動通訊的構件;
④事件和通知:XCAT-JAVA使用事件通知系統,這是為網格應用程序從發布者到用戶之間可靠地傳遞XML消息所設計的消息中間件,即使用戶的位置發生改變或者消息發布者重啟都不會受到影響。
構件體系結構描述了不同構件組成應用程序的方法以及它們之間的互連。構件在特定的主程序上創建,并且以分布式系統的方式互連。同樣,也可以創建元構件。
為了實現這種組合,用戶可以直接使用XCAT服務的應用程序編程接口寫簡單的JAVA程序,從而使用遠程構件。通過使用創建服務,JAVA程序創建構件并且獲得引用來運行構件例程。之后程序使用連接服務來連接這些構件的提供端口和使用端口,命名服務用于保存和檢索正在運行構件的ID。
以上這些方法僅僅適合于存在適合的需要運行和被監控的構件集合。如果需要更為靈活的動態機制創建和管理構件,而不需要重新編譯程序,可以使用Jython腳本。Jython是使用Python語言的純JAVA實現。由于XCAT可以通過JAVA而得以實現,因此可以為XCAT庫提供了Jython接口。
如圖2所示,使用XCAT可實現構件空間上的結合,從而可被任意客戶端訪問。每一個XCAT構件有一個提供端口實現了OGSI網格服務端口類型,其余的提供端口是一級的服務端口即CCA端口。使用CCA連接方法連接構件,并且XCAT的使用端口連接到傳統的服務。

圖2 使用XCAT實現構件空間上的結合
服務技術廣泛應用的最主要原因是因為它可以將已經存在的過程和服務組合稱為更加有用的新應用。工作流是將過程的組織定義為良定義的操作流,可以被認為為了實現特定目標,服務在時間上的結合。這是超越了當前OGSI規范的一個領域。
構件在時間上的結合定義了任意時間點構件的邏輯連接,工作流系統定義了控制流和數據流表達的方式。目前一些工程都用到了工作流機制,然而大多數服務工作流系統并沒有有效地實現空間上的組合,因為Web服務描述語言沒有完全定義超越操作等等,而服務本身就是調用者。而XCAT結合了標準構件體系結構在空間組合上的優勢和服務在時間組合上的優勢,這個系統的實現存在一定的難度。
使用XCAT系統的工程包括天氣研究和預報、化學工程、碰撞風險評估以及線性系統分析。圖3為基于CCA模型和OGSI架構在碰撞風險評估中XCAT的開發應用,圖中主要描述了構件狀態在空間上的組成方法。

圖3 在碰撞風險評估中XCAT的開發應用
如圖3所示,整個應用程序被一個協調程序所控制。該協調程序首先運行一個主構件和一組工作構件。為了接收來自于主構件的全仿真事件,協調程序訪問事件通道。當模擬結束后,主構件將模擬結果異步發送到事件通道。事件通道在永久存儲器中存儲這些數據,并且將它們傳輸給協調程序。當接收到來自事件通道的事件后,協調程序生成一個本地可視化程序,將接收到的數據傳輸給可視化程序。可視化程序將模擬結果可視化。至此,XCAT在時間和空間上都完成了構件的結合,從而構造復雜的分布式應用程序。
構件方法推動了程序模塊結構的封裝,使得構件可以再利用,提高了應用程序的產出率。通過XCAT將CCA和OGSI二者的優勢結合,從而可以著重于不同的方面。將構件基于時間和空間進行分類,從而實現構件在時間和空間上的結合。在上述研究成果基礎上設計的可擴展的消息傳遞和消息發布系統,為構件提供了發布和預定消息的簡單途徑。此系統比目前的OGSI通知方案功能更加豐富其組織方法,為科學計算和模擬構件程序設計奠定了基礎。
[1]曾萬聃,常桂然,戴勃,等.基于代理的OGSI網格調度系統研究[J].計算機工程,2006(23):24-26.
[2]劉會斌,都志輝.網格與Web服務的融合-WSRF和WS-Notification[J].計算機科學,2005(2):76-79.
[3]于洋,楊愚魯,楊學剛.賀銘分布式網格系統的任務調度算法DE Scheduling[J].計算機工程,2008(14):75-77.
[4]王鵬,邵偉民,李偉.QoS感知的分布式網格工作流引擎的研究和設計[J].計算機工程與設計,2008(12):3040-3042.
[5]李紅,劉魯.分布式網格資源發現研究綜述[J].計算機應用與軟件,2010(2):16-18.
[6]吳林.基于OGSA的網格數據庫研究現狀和趨勢[J].計算機工程與設計,2008(22):5843-5846.
[7]胡明生,陳學廣.基于OGSI NET的網格計算研究[J].計算機技術與發展,2006(4):7-10.