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