一種corba分布式應(yīng)用的透明集群化的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件構(gòu)造技術(shù)領(lǐng)域,具體涉及對基于CORBA中間件的分布式應(yīng)用,在服務(wù)端和客戶端程序都不作任何修改的情況下,將服務(wù)端從單一實例轉(zhuǎn)化成多實例集群的方法。
【背景技術(shù)】
[0002]分布計算中間件是位于系統(tǒng)軟件和應(yīng)用軟件之間的一層軟件,它封裝了分布式應(yīng)用共性問題(如數(shù)據(jù)通信、事務(wù)等)的解決方案,應(yīng)用軟件可直接使用,而無需自行提供這些問題的解決方案,從而可以大幅簡化應(yīng)用的開發(fā)過程。CORBA(Common Object RequestBroker Architecture)是目前主流、成熟的分布計算中間件規(guī)范,已經(jīng)在電信、工業(yè)控制、電子商務(wù)、國防等領(lǐng)域得到廣泛應(yīng)用。與普通分布式應(yīng)用類似,基于CORBA中間件所構(gòu)建的分布式應(yīng)用(以下簡稱CORBA應(yīng)用)可以劃分為服務(wù)端程序和客戶端程序:服務(wù)端程序?qū)ν馓峁┛杀贿h(yuǎn)程調(diào)用的接口,這些接口采用IDL(Interface Definit1n Language)語言定義(以下簡稱IDL接口),并對外暴露出惟一的地址(以下簡稱CORBA地址,CORBA地址由IP地址、端口號和對象名稱組成);客戶端程序通過服務(wù)端程序的CORBA地址進行定位,并遠(yuǎn)程調(diào)用服務(wù)端程序的接口。
[0003]集群化是數(shù)據(jù)中心等環(huán)境下應(yīng)對高用戶負(fù)載的基本手段之一:當(dāng)運行于單臺機器上的軟件服務(wù)無法有效應(yīng)對海量用戶請求時,將很多服務(wù)器集中起來部署同一種軟件服務(wù),并且通過負(fù)載均衡等手段使得在客戶端看來就像是只有一個服務(wù)器,從而有效提高服務(wù)的負(fù)載能力。透明集群化是指在不對服務(wù)端和客戶端程序進行任何修改的情況下,將服務(wù)端從單一服務(wù)器轉(zhuǎn)化成多服務(wù)器集群;集群的可擴展是指在部署以后,集群中的服務(wù)器個數(shù)可以在線進行修改,從而適應(yīng)用戶負(fù)載的變化。
[0004]雖然在分布計算領(lǐng)域已經(jīng)存在Glassfish(由SUN公司開發(fā)的應(yīng)用服務(wù)器)等應(yīng)用服務(wù)器可以實現(xiàn)服務(wù)端的透明可擴展集群化,但是它們針對的是遵循Java EE規(guī)范的應(yīng)用,無法支持CORBA應(yīng)用。當(dāng)前,CORBA應(yīng)用的服務(wù)端程序要么是單一實例,要么在集群化時必須對服務(wù)端程序進行修改。如何在不修改CORBA服務(wù)端和客戶端程序的情況下,將服務(wù)端從單一服務(wù)器轉(zhuǎn)化成多服務(wù)器集群,并且使得集群中服務(wù)器個數(shù)可以在線擴展,是軟件構(gòu)造技術(shù)領(lǐng)域需要解決的技術(shù)問題。目前尚無公開的技術(shù)資料涉及CORBA應(yīng)用透明可擴展集群化的成果或成熟技術(shù)方案。
【發(fā)明內(nèi)容】
[0005]本發(fā)明要解決的技術(shù)問題是對采用CORBA中間件的分布式應(yīng)用,如何在服務(wù)端和客戶端程序都不作任何修改的情況下,將服務(wù)端從單一服務(wù)器轉(zhuǎn)化成多服務(wù)器集群。該多服務(wù)器集群能夠像單一服務(wù)端程序一樣對外提供服務(wù),表現(xiàn)為一個統(tǒng)一的邏輯實體,并且集群中服務(wù)器的個數(shù)可以動態(tài)增加,從而顯著提高軟件服務(wù)的負(fù)載能力。
[0006]本發(fā)明的技術(shù)方案是首先構(gòu)建一個客戶端/集群化服務(wù)端環(huán)境,然后服務(wù)入口節(jié)點執(zhí)行集群實例管理程序和請求攔截轉(zhuǎn)發(fā)程序,最后客戶機使用請求攔截轉(zhuǎn)發(fā)程序的地址,執(zhí)行CORBA客戶端程序,完成請求調(diào)用。
[0007]本發(fā)明包括以下步驟:
[0008]第一步,構(gòu)建一個客戶端/集群化服務(wù)端環(huán)境,它由多個客戶機和一個服務(wù)入口節(jié)點、多個服務(wù)節(jié)點構(gòu)成??蛻魴C、服務(wù)入口節(jié)點和服務(wù)節(jié)點是可獨立運行的計算機,可以是普通PC機或者服務(wù)器??蛻魴C、服務(wù)入口節(jié)點和服務(wù)節(jié)點通過網(wǎng)絡(luò)設(shè)備互連。
[0009]除安裝有操作系統(tǒng)(例如windows、Linux)之外,客戶機還安裝了 CORBA客戶端程序,CORBA客戶端程序向CORBA服務(wù)端程序發(fā)送請求,多個客戶機可以并發(fā)執(zhí)行請求。
[0010]除安裝有操作系統(tǒng)(例如windows、Linux)之外,服務(wù)節(jié)點還安裝了 CORBA服務(wù)端程序,多個服務(wù)節(jié)點構(gòu)成了一個服務(wù)集群。CORBA服務(wù)程序?qū)嵗阜?wù)端程序在某臺服務(wù)節(jié)點上的運行實例。服務(wù)端程序可以有多個服務(wù)實例。
[0011]服務(wù)入口節(jié)點提供客戶請求的分發(fā)功能。除安裝有操作系統(tǒng)(例如windows、Linux)之外,服務(wù)入口節(jié)點上還安裝有集群實例管理程序和請求攔截轉(zhuǎn)發(fā)程序。集群實例管理程序?qū)褐械亩鄠€服務(wù)節(jié)點進行管理,由初始配置文件、服務(wù)狀態(tài)表、狀態(tài)更新部件和實例管理接口四個部分組成。初始配置文件是一個XML(extensible Markup Language)文件,描述了所有服務(wù)節(jié)點中CORBA服務(wù)程序?qū)嵗牡刂贰7?wù)狀態(tài)表是一個二維表,描述了 CORBA服務(wù)程序運行時地址和CORBA服務(wù)程序的當(dāng)前運行狀態(tài)(包括已啟動、未啟動兩種狀態(tài))。服務(wù)狀態(tài)表共有Idi (k為CORBA服務(wù)程序?qū)嵗膫€數(shù),(k多I))。狀態(tài)更新部件更新服務(wù)狀態(tài)表中的CORBA服務(wù)程序?qū)嵗漠?dāng)前運行狀態(tài)。實例管理接口提供增加CORBA服務(wù)程序?qū)嵗δ?。實例管理接口接受外部請求,動態(tài)對服務(wù)狀態(tài)表中的CORBA服務(wù)程序?qū)嵗牡刂愤M行維護,從而實現(xiàn)集群的動態(tài)擴展。
[0012]請求攔截轉(zhuǎn)發(fā)程序與CORBA服務(wù)程序具有相同的IDL接口,請求攔截轉(zhuǎn)發(fā)程序攔截所有來自CORBA客戶端程序的請求,并將CORBA服務(wù)程序?qū)嵗牡刂贩祷亟o客戶端。
[0013]第二步,多個服務(wù)節(jié)點運行CORBA服務(wù)端程序,獲得CORBA服務(wù)程序?qū)嵗?br>[0014]第三步,服務(wù)入口節(jié)點執(zhí)行集群實例管理程序,將CORBA服務(wù)程序?qū)嵗尤氲椒?wù)狀態(tài)表中;并執(zhí)行請求攔截轉(zhuǎn)發(fā)程序生成請求攔截轉(zhuǎn)發(fā)程序的地址。具體步驟如下:
[0015]3.1系統(tǒng)管理員編寫初始配置文件,寫入所有CORBA服務(wù)程序?qū)嵗牡刂罚?br>[0016]3.2服務(wù)入口節(jié)點執(zhí)行集群實例管理程序,集群實例管理程序的狀態(tài)更新部件從初始配置文件中讀入所有CORBA服務(wù)程序?qū)嵗牡刂罚?br>[0017]3.3狀態(tài)更新部件為每一個CORBA服務(wù)程序?qū)嵗诜?wù)狀態(tài)表中新增一行,設(shè)置CORBA服務(wù)程序?qū)嵗漠?dāng)前運行狀態(tài)為未啟動;
[0018]3.4服務(wù)入口節(jié)點執(zhí)行請求攔截轉(zhuǎn)發(fā)程序;
[0019]3.5 請求攔截轉(zhuǎn)發(fā)程序使用 CORBA 中間件的 DSI (Dynamic Skeleton Interface)機制生成請求攔截轉(zhuǎn)發(fā)程序的地址,將請求攔截轉(zhuǎn)發(fā)程序的地址發(fā)送給客戶機。
[0020]第四步,客戶機從服務(wù)入口節(jié)點獲得請求攔截轉(zhuǎn)發(fā)程序的地址,客戶機的CORBA客戶端程序、服務(wù)入口節(jié)點的請求攔截轉(zhuǎn)發(fā)程序、服務(wù)節(jié)點上CORBA服務(wù)程序?qū)嵗嗷ヅ浜贤瓿烧埱笳{(diào)用。具體步驟如下:
[0021]4.1客戶機獲得服務(wù)入口節(jié)點上的請求攔截轉(zhuǎn)發(fā)程序的地址;
[0022]4.2客戶機執(zhí)行CORBA客戶端程序;
[0023]4.3 CORBA客戶端程序向服務(wù)入口節(jié)點上的請求攔截轉(zhuǎn)發(fā)程序發(fā)送請求;
[0024]4.4請求攔截轉(zhuǎn)發(fā)程序使用DSI機制攔截客戶請求;
[0025]4.5請求攔截轉(zhuǎn)發(fā)程序從服務(wù)狀態(tài)表中當(dāng)前運行狀態(tài)為“已啟動”的CORBA服務(wù)程序?qū)嵗须S機選擇一行,獲得CORBA服務(wù)程序?qū)嵗牡刂罚?br>[0026]4.6請求攔截轉(zhuǎn)發(fā)程序使用CORBA的Locat1nForward消息將CORBA服務(wù)程序?qū)嵗牡刂贩祷亟oCORBA客戶端程序;
[0027]4.7 CORBA客戶端程序使用CORBA服務(wù)程序?qū)嵗牡刂罚駽ORBA服務(wù)程序?qū)嵗l(fā)送請求;
[0028]4.8服務(wù)節(jié)點