專利名稱:構(gòu)件化軟件的在線演化方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種構(gòu)件化軟件的在線演化方法,屬于軟件維護技術(shù)領(lǐng)域。
背景技術(shù):
目前構(gòu)件化軟件支持產(chǎn)品主要是從大型軟件的復用性、分布性角度開發(fā)出來的,一般提供應(yīng)用系統(tǒng)的熱部署功能。這是一種大粒度的系統(tǒng)演化,實現(xiàn)了在保持現(xiàn)有系統(tǒng)運行的前提增加新系統(tǒng)的功能,各個系統(tǒng)之間一般沒有直接關(guān)系。但是,目前還沒有針對單個系統(tǒng)的在線演化,即在保持當前系統(tǒng)持續(xù)運行、服務(wù)的前提下,對系統(tǒng)內(nèi)的構(gòu)件進行演化,這是一種細粒度的系統(tǒng)演化,難度比大粒度的系統(tǒng)演化更大。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種細粒度的系統(tǒng)演化方法,在保持當前系統(tǒng)持續(xù)運行、服務(wù)的前提下,對系統(tǒng)內(nèi)的構(gòu)件進行演化,即進行構(gòu)件的增加、刪除、替換、改變構(gòu)件之間的關(guān)系等操作,以取得在線增加服務(wù)內(nèi)容、優(yōu)化服務(wù)流程、消除系統(tǒng)缺陷、提高響應(yīng)時間的效果。
本發(fā)明的具體技術(shù)方案如下本發(fā)明的構(gòu)件化軟件的在線演化方法是,除了管理一般的構(gòu)件生命周期狀態(tài)(例如加載狀態(tài)、就緒狀態(tài)、服務(wù)狀態(tài)、執(zhí)行狀態(tài)、緩存狀態(tài)等)外,通過引入構(gòu)件的屬性同步狀態(tài)、請求截流狀態(tài)和請求緩沖狀態(tài)建立對構(gòu)件的細粒度管理機制,從而更精確地控制構(gòu)件的行為,并在此基礎(chǔ)上進行構(gòu)件重載,實現(xiàn)軟件的在線演化。
構(gòu)件的細粒度管理機制與操作系統(tǒng)中對進程的管理類似,基于構(gòu)件的軟件系統(tǒng)運行過程中,需要隨時對構(gòu)件的各種狀態(tài)進行檢視、控制。為支持在線演化,除了一般的構(gòu)件生命周期狀態(tài)(例如加載狀態(tài)、就緒狀態(tài)、服務(wù)狀態(tài)、執(zhí)行狀態(tài)、緩存狀態(tài)等)之外,本發(fā)明引入另外三種狀態(tài)(1)屬性同步狀態(tài),當一個新構(gòu)件將替換一個當前正處于服務(wù)狀態(tài)的構(gòu)件(下稱老構(gòu)件)時,它必須建立起與老構(gòu)件相同的環(huán)境與屬性值,這是通過不斷地復制老構(gòu)件的屬性等過程建立起來的;(2)請求截流狀態(tài),當新構(gòu)件與老構(gòu)件已經(jīng)達到同步狀態(tài)時,新構(gòu)件可以開始接受新請求,老構(gòu)件不再接受新請求,但必須完成正在執(zhí)行的操作,并返回操作結(jié)果,故稱其為截流狀態(tài);(3)請求緩沖狀態(tài),如果新老構(gòu)件不在執(zhí)行操作時間上存在交疊,則必須在切換的瞬間必須對請求進行緩沖,此時該構(gòu)件處于請求緩沖狀態(tài),這與緩存狀態(tài)不同,后者是指構(gòu)件的實例服務(wù)完后,不立即將實例刪除,而是將其放置到一個緩存隊列中,這樣當其他請求需要該構(gòu)件服務(wù)時就不必重新加載,而是可以直接從隊列中取出構(gòu)件實例,不必初始化構(gòu)件,從而降低響應(yīng)時間。通過引入構(gòu)件的上述三種新狀態(tài),可以更精確地控制構(gòu)件的行為,實現(xiàn)構(gòu)件對狀態(tài)的更細粒度的管理,以滿足在線演化軟件的基本需求。
構(gòu)件重載現(xiàn)代計算機軟件的一個重要假定是程序載運行過程中不修改自身的代碼,因此操作系統(tǒng)一般僅在應(yīng)用系統(tǒng)啟動時加載各個模塊,而在運行過程中則可以增加模塊,但不允許修改模塊。這給構(gòu)件重載造成了困難,為了解決這一問題,本發(fā)明利用構(gòu)造新加載程序的方法,并借助于構(gòu)件接口來進行構(gòu)件的重載。每一個構(gòu)件有一個對應(yīng)的構(gòu)件接口類,新的加載程序區(qū)分構(gòu)件的接口與構(gòu)件的具體實現(xiàn),其中接口在系統(tǒng)演化過程中是不變的,變化的是實現(xiàn)構(gòu)件功能的具體對象。當需要重載構(gòu)件時,首先加載新的構(gòu)件實現(xiàn)體,并以該構(gòu)件為模板創(chuàng)建構(gòu)件實例,然后利用請求路由控制機制和請求緩沖控制機制二者之一或二者結(jié)合,將請求消息定向到新構(gòu)件實現(xiàn)上,這樣構(gòu)件功能的真正實現(xiàn)體即變?yōu)樾聵?gòu)件的實例。
所述請求路由控制機制是當需要替換一個(或一組)構(gòu)件時,為保持服務(wù)的連續(xù)性,往往在加載新構(gòu)件時,老構(gòu)件將繼續(xù)存在于系統(tǒng)之中,因此將發(fā)生新老構(gòu)件同時存在于一個構(gòu)件管理器中的狀況(甚至同時進行服務(wù)),這時需要引入請求路由控制機制。請求路由最初是指向老構(gòu)件的,在替換構(gòu)件時,如果老構(gòu)件未處于服務(wù)狀態(tài)或者執(zhí)行狀態(tài)(當然,也不處于加載狀態(tài)),則可以直接將請求路由進行修改,使其指向新構(gòu)件;如果老構(gòu)件處于服務(wù)狀態(tài),則必須將構(gòu)件狀態(tài)設(shè)置為屬性同步狀態(tài),建立起老構(gòu)件的環(huán)境與屬性,然后修改路由,由新構(gòu)件接替老構(gòu)件的當前服務(wù);如果老構(gòu)件處于執(zhí)行狀態(tài),意味著老構(gòu)件的許多屬性等可能正在變化,因此只有等待其執(zhí)行結(jié)束后才能進行同步,此時可以將構(gòu)件狀態(tài)設(shè)置為截流狀態(tài)。此時,新構(gòu)件可以接受新的服務(wù)過程,但不能接收正在服務(wù)的某個新請求,只有當老構(gòu)件正在執(zhí)行的所有過程全部完成后,才可以完全將請求路由完全映射到新構(gòu)件上。這樣,通過將請求路由從舊構(gòu)件切換到新構(gòu)件,即可以實現(xiàn)替換構(gòu)件的微觀過程。
所述請求緩沖控制機制是當進行在線演化時,對部分請求進行臨時緩存,以可以接受的響應(yīng)時間延遲,換取演化的可靠性。請求的緩沖的實現(xiàn)需要結(jié)合底層的通信機制,以及底層的線程管理機制進行,請求在底層就是一個基于某種互操作協(xié)議的消息包,與每個構(gòu)件對應(yīng)的構(gòu)件容器上可以緩存這些消息包,從而緩沖來自客戶的請求,待新老構(gòu)件切換完畢時,再將這些消息繼續(xù)向構(gòu)件傳送。
請求緩沖控制機制是替換一個(或一組)構(gòu)件時采取的另外一種機制,它與請求路由控制可以單獨使用,也可以結(jié)合使用。單獨使用時,演化時間比請求路由控制長一些,但可靠性較高。結(jié)合使用時,演化過程相對復雜一些。
本發(fā)明的演化流程圖如圖1所示,系統(tǒng)啟動后,系統(tǒng)加載構(gòu)件,構(gòu)造適合于演化的結(jié)構(gòu),構(gòu)件狀態(tài)由構(gòu)件容器進行管理。在運行過程中,每一個構(gòu)件都有與其相對應(yīng)的構(gòu)件容器,專門用于對該構(gòu)件的管理,構(gòu)件容器中包含關(guān)于構(gòu)件的各種信息,例如構(gòu)件標識、構(gòu)件類型、構(gòu)件狀態(tài)、構(gòu)件安全控制、所需要的構(gòu)件、通信機制等等。當一個新構(gòu)件將替換一個當前正處于服務(wù)狀態(tài)的構(gòu)件時,它通過不斷地復制被替換構(gòu)件的屬性等操作建立與被替換構(gòu)件相同的環(huán)境與屬性值,即達到新老構(gòu)件的同步狀態(tài)。
當新構(gòu)件與老構(gòu)件已經(jīng)達到同步狀態(tài)后,將被替換的構(gòu)件進入截流狀態(tài),不再接收新請求的調(diào)入。為保持服務(wù)的連續(xù)性,往往在加載新構(gòu)件時,老的構(gòu)件將繼續(xù)存在于系統(tǒng)之中,因此將發(fā)生新老構(gòu)件同時存在于一個構(gòu)件管理器中的狀況,這時引入請求路由控制機制將新請求重新定向到新構(gòu)件上,直到老構(gòu)件服務(wù)結(jié)束。這樣,通過將請求路由從老構(gòu)件切換到新構(gòu)件,實現(xiàn)了替換構(gòu)件的微觀過程,演化過程結(jié)束。
同時,還可以采用請求緩沖控制機制實現(xiàn)演化過程。如果新老構(gòu)件不在執(zhí)行操作時間上存在交疊,則在替換構(gòu)件的瞬間對來自客戶的請求進行緩沖,此時該構(gòu)件處于緩沖狀態(tài),待新老構(gòu)件同步結(jié)束后,構(gòu)件恢復正常的服務(wù)狀態(tài),同時,被掛起的請求線程被解掛,并得到服務(wù)。
采用本發(fā)明的方法,在保持當前系統(tǒng)持續(xù)運行、服務(wù)的前提下,可以對系統(tǒng)內(nèi)的構(gòu)件進行演化,達到在線增加服務(wù)內(nèi)容、優(yōu)化服務(wù)流程、消除系統(tǒng)缺陷、提高響應(yīng)時間的效果,從而大大提高軟件系統(tǒng)的服務(wù)質(zhì)量,為用戶提供電信級的、7X24(每周7天、每天24小時)的不間斷服務(wù),這對于目前基于Web的大型軟件系統(tǒng)具有十分重要的意義。
圖1為本發(fā)明的構(gòu)件化軟件的在線演化方法的演化流程圖。
實施例本節(jié)給出一個在JAVA虛擬機上的實現(xiàn)。
JAVA虛擬機處于操作系統(tǒng)之上,應(yīng)用系統(tǒng)之下,基于JAVA的構(gòu)件為EJB(Enterprise JavaBean)構(gòu)件,EJB構(gòu)件狀態(tài)由構(gòu)件容器(Container)進行管理,其接口符合EJB規(guī)范。在運行過程中,每一個構(gòu)件都有與其相對應(yīng)的構(gòu)件容器,專門用于對該構(gòu)件的管理,構(gòu)件容器中包含關(guān)于構(gòu)件的各種信息,例如構(gòu)件標識、構(gòu)件類型、構(gòu)件狀態(tài)、構(gòu)件安全控制、所需要的構(gòu)件、通信機制等等。
完成構(gòu)件重載需要定義新的加載類,該類繼承了java.lang.ClassLoader,利用Java方法的重載,重載了loadClass()方法,解決直接利用java.lang.ClassLoader加載類時可能遇到的沖突問題,以實現(xiàn)構(gòu)件的重載。接口的實現(xiàn)符合EJB規(guī)范,構(gòu)件的實現(xiàn)也符合EJB規(guī)范。
路由信息存放在構(gòu)件容器中,為便于演化,構(gòu)件容器必須存放實現(xiàn)類隊列,而不是象一般系統(tǒng)那樣僅存放一個實現(xiàn)類,路由切換的時機由專門的管理類進行控制,由新、老構(gòu)件的狀態(tài)變化所觸發(fā)。一般一構(gòu)件的重載可能引起其他多個構(gòu)件的重載,因此存在一個變化范圍問題,這由具體進行演化的操作人員進行控制。
緩沖機制的實現(xiàn)借助于JAVA虛擬機的Thread(線程)機制,它與系統(tǒng)通信機制的實現(xiàn)密切相關(guān)。服務(wù)器端系統(tǒng)存在一個監(jiān)聽進程,處于循環(huán)等待狀態(tài),等待客戶的各種請求,該進程繼承了類java.lang.Thread,并在請求到來時為請求派生獨立的線程,以提高系統(tǒng)的并發(fā)能力。該線程將查找請求所對應(yīng)的構(gòu)件,然后將請求發(fā)送給該構(gòu)件。支持在線演化時,該線程必須在查找到構(gòu)件后明確構(gòu)件的狀態(tài),如果該構(gòu)件處于重載狀態(tài),則必須掛起,等待構(gòu)件的狀態(tài)變?yōu)檎?。而?gòu)件在重載結(jié)束時將查找等待隊列,將等待服務(wù)的線程解掛,這樣就完整地實現(xiàn)了演化的全過程。
權(quán)利要求
1.構(gòu)件化軟件的在線演化方法,其特征在于,除了管理一般的構(gòu)件生命周期狀態(tài)外,通過引入構(gòu)件的同步狀態(tài)、截流狀態(tài)和緩沖狀態(tài)建立起對構(gòu)件進行細粒度管理的機制,在此基礎(chǔ)上利用構(gòu)造新加載程序的方法,并借助于構(gòu)件接口來進行構(gòu)件的重載,即每一個構(gòu)件有一個對應(yīng)的構(gòu)件接口類,新的加載程序區(qū)分構(gòu)件的接口與構(gòu)件的具體實現(xiàn),其中接口在系統(tǒng)演化過程中是不變的,變化的是實現(xiàn)構(gòu)件功能的具體對象,當需要重載構(gòu)件時,首先加載新的構(gòu)件實現(xiàn)體,并以該構(gòu)件為模板創(chuàng)建構(gòu)件實例,然后利用請求路由控制機制和請求緩沖控制機制二者之一或二者結(jié)合將系統(tǒng)中其他模塊所引用的構(gòu)件定向到新構(gòu)件實現(xiàn)上,這樣構(gòu)件功能的真正實現(xiàn)體即變?yōu)樾聵?gòu)件的實例,從而實現(xiàn)在軟件的運行過程中進行構(gòu)件的替換、增加、刪除等操作。
2.如權(quán)利要求1所述的構(gòu)件化軟件的在線演化方法,其特征在于所述請求路由控制機制是指請求路由最初是指向老構(gòu)件的,在替換構(gòu)件時,如果老構(gòu)件未處于服務(wù)狀態(tài)或者執(zhí)行狀態(tài),則直接將請求路由進行修改,使其指向新構(gòu)件;如果老構(gòu)件處于服務(wù)狀態(tài),則將新構(gòu)件設(shè)置為同步狀態(tài),建立起老構(gòu)件的環(huán)境與屬性,然后修改路由,由新構(gòu)件接替老構(gòu)件的當前服務(wù);如果老構(gòu)件處于執(zhí)行狀態(tài),則等待其執(zhí)行結(jié)束后進行同步,此時新構(gòu)件可以接受新的服務(wù)過程,但不能接收正在服務(wù)的某個新請求,當老構(gòu)件正在執(zhí)行的所有過程全部完成后將請求路由完全映射到新構(gòu)件上。
3.如權(quán)利要求1所述的構(gòu)件化軟件的在線演化方法,其特征在于所述請求緩沖控制機制是指請求在底層是一個基于某種互操作協(xié)議的消息包,與每個構(gòu)件對應(yīng)的構(gòu)件容器上可以緩存這些消息包,當進行在線演化時,通過結(jié)合底層的通信機制以及底層的線程管理機制,對部分請求進行臨時緩存,實現(xiàn)請求的緩沖,從而緩沖來自客戶的請求,待新老構(gòu)件切換完畢時,再將這些消息繼續(xù)向構(gòu)件傳送,以可以接受的響應(yīng)時間延遲換取演化的可靠性。
全文摘要
本發(fā)明公開了一種構(gòu)件化軟件的在線演化方法。本發(fā)明的方法是通過引入構(gòu)件的同步狀態(tài)、截流狀態(tài)和緩沖狀態(tài)建立起構(gòu)件的細粒度管理機制,在此基礎(chǔ)上利用構(gòu)造新加載程序的方法,并借助于構(gòu)件接口來進行構(gòu)件重載,從而實現(xiàn)在軟件的運行過程中進行構(gòu)件的替換、增加、刪除等操作,達到在線增加服務(wù)內(nèi)容、優(yōu)化服務(wù)流程、消除系統(tǒng)缺陷、提高響應(yīng)時間的效果,從而大大提高軟件系統(tǒng)的服務(wù)質(zhì)量。
文檔編號G06F9/445GK1339742SQ0113638
公開日2002年3月13日 申請日期2001年10月12日 優(yōu)先權(quán)日2001年10月12日
發(fā)明者王千祥, 楊芙清, 梅宏 申請人:北京大學