本發(fā)明涉及計算機(jī)技術(shù),更具體地說,涉及一種服務(wù)插件管理方法和系統(tǒng)。
背景技術(shù):
應(yīng)用服務(wù)容器是用來管理組件行為的一個集合工具,管理容器內(nèi)所有組件的行為、與外部環(huán)境的交互,組件的生命周期、組件之間的合作依賴關(guān)系等等功能。現(xiàn)有的應(yīng)用服務(wù)容器管理體系中,容器管理的服務(wù)組件一般都以插件化的方式進(jìn)行管理。在這些插件的管理過程中,支持服務(wù)插件的動態(tài)化管理,包括插件的加載、卸載等管理操作。
對于一個實時性、可用性、可維護(hù)性要求較高的應(yīng)用系統(tǒng)來說,都會對容器的服務(wù)組件管理有很高的要求,但在現(xiàn)有的容器管理系統(tǒng)中,系統(tǒng)加載的插件一般通過插件配置文件來配置系統(tǒng)加載的插件列表信息,當(dāng)需要新增、刪除插件或修改原有插件版本時,通過手動修改插件配置文件并重啟系統(tǒng)或觸發(fā)指令的方式解決,這種插件的動態(tài)化管理過程一般都存在以下問題:
1、半自動化(手動干預(yù)):現(xiàn)有的動態(tài)化插件管理過程一般通過手工后臺或維護(hù)管理界面修改插件配置文件或插件實現(xiàn)文件,再通過手工后臺重啟應(yīng)用服務(wù)或維護(hù)管理界面重啟服務(wù)的方式完成插件的動態(tài)更新過程,無法實現(xiàn)完全的自動化記載和更新。
2、服務(wù)中斷:現(xiàn)有的動態(tài)化插件管理過程通過手工后臺重啟應(yīng)用服務(wù)或維護(hù)管理界面重啟服務(wù)的方式完成插件的動態(tài)更新過程中,會導(dǎo)致現(xiàn)有的服務(wù)中斷,更新過程中無法提供正常的業(yè)務(wù)服務(wù),造成業(yè)務(wù)短暫的無法使用;即時在多機(jī)集群狀態(tài)下,也會對當(dāng)前正在處理的業(yè)務(wù)造成中斷。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的上述缺陷,提供一種能夠自動化、無縫更新服務(wù)插件的服務(wù)插件管理方法和系統(tǒng)。
本發(fā)明為解決其技術(shù)問題在第一方面提出一種服務(wù)插件管理方法,包括如下步驟:
S1、監(jiān)控服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件的更新狀態(tài);
S2、在發(fā)現(xiàn)服務(wù)插件配置文件和/或服務(wù)插件實現(xiàn)文件有更新時,加載需要更新的服務(wù)插件的配置文件信息及實現(xiàn)文件信息以創(chuàng)建新的服務(wù)對象實例加入到服務(wù)對象實例池中;
S3、以新創(chuàng)建的服務(wù)對象實例更新服務(wù)注冊表中的服務(wù)插件信息;
S4、在服務(wù)對象實例池中更新后的服務(wù)插件原有的服務(wù)對象實例空閑時,從服務(wù)對象實例池中刪除所述原有的服務(wù)對象實例。
根據(jù)本發(fā)明第一方面的一個實施例中,所述步驟S1進(jìn)一步包括:實時或周期性地根據(jù)服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件的上次更新時間來檢查其是否有更新。
根據(jù)本發(fā)明第一方面的一個實施例中,所述步驟S2進(jìn)一步包括:
S21、比對檢查更新后的服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件信息與原有文件信息的差異,獲取需要更新的服務(wù)插件列表;
S22、根據(jù)需要更新的服務(wù)插件列表,加載相應(yīng)的服務(wù)插件配置文件信息及實現(xiàn)文件信息來創(chuàng)建指定數(shù)量的服務(wù)對象實例;
S23、將新創(chuàng)建的服務(wù)對象實例加入到服務(wù)對象實例池中對應(yīng)的服務(wù)插件名稱下。
根據(jù)本發(fā)明第一方面的一個實施例中,所述步驟S4進(jìn)一步包括:
S41、將服務(wù)對象實例池中更新后的服務(wù)插件原有的服務(wù)對象實例標(biāo)記為失效狀態(tài);
S42、定時將服務(wù)對象實例池中空閑并處于失效狀態(tài)的服務(wù)對象實例刪除。
根據(jù)本發(fā)明第一方面的一個實施例中,所述方法還包括:
基于服務(wù)調(diào)用請求查詢服務(wù)注冊表以獲得指定的服務(wù)插件對應(yīng)的服務(wù)對 象實例信息,從服務(wù)對象實例池中獲取對應(yīng)的服務(wù)對象實例來執(zhí)行服務(wù)調(diào)用,同時在服務(wù)對象實例池中將該服務(wù)對象實例標(biāo)記為占用狀態(tài),并在服務(wù)調(diào)用完成后將該服務(wù)對象實例標(biāo)記為空閑狀態(tài)。
本發(fā)明為解決其技術(shù)問題在第二方面提出一種服務(wù)插件管理系統(tǒng),包括:
服務(wù)對象實例池,用于存儲當(dāng)前運(yùn)行的所有服務(wù)插件的服務(wù)對象實例;
服務(wù)注冊表模塊,用于存儲維護(hù)當(dāng)前運(yùn)行的所有服務(wù)插件的信息的服務(wù)注冊表,所述信息至少包括服務(wù)插件的服務(wù)名稱和對應(yīng)的服務(wù)對象實例信息;
服務(wù)管理引擎,用于監(jiān)控服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件的更新狀態(tài),并在發(fā)現(xiàn)服務(wù)插件配置文件和/或服務(wù)插件實現(xiàn)文件有更新時,加載需要更新的服務(wù)插件的配置文件信息及實現(xiàn)文件信息以創(chuàng)建新的服務(wù)對象實例加入到服務(wù)對象實例池中,并以新創(chuàng)建的服務(wù)對象實例更新服務(wù)注冊表中的服務(wù)插件信息,以及用于在服務(wù)對象實例池中更新后的服務(wù)插件原有的服務(wù)對象實例空閑時,從服務(wù)對象實例池中刪除所述原有的服務(wù)對象實例。
根據(jù)本發(fā)明第二方面的一個實施例中,所述服務(wù)管理引擎進(jìn)一步實時或周期性地根據(jù)服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件的上次更新時間來檢查其是否有更新。
根據(jù)本發(fā)明第二方面的一個實施例中,所述服務(wù)管理引擎在發(fā)現(xiàn)服務(wù)插件配置文件和/或服務(wù)插件實現(xiàn)文件有更新時創(chuàng)建新的服務(wù)對象實例加入到服務(wù)對象實例池中進(jìn)一步包括:所述服務(wù)管理引擎比對檢查更新后的服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件信息與原有文件信息的差異以獲取需要更新的服務(wù)插件列表,根據(jù)需要更新的服務(wù)插件列表加載相應(yīng)的服務(wù)插件配置文件信息及實現(xiàn)文件信息來創(chuàng)建指定數(shù)量的服務(wù)對象實例,并將創(chuàng)建的服務(wù)對象實例加入到服務(wù)對象實例池中對應(yīng)的服務(wù)插件名稱下。
根據(jù)本發(fā)明第二方面的一個實施例中,所述服務(wù)管理引擎在服務(wù)對象實例池中更新后的服務(wù)插件原有的服務(wù)對象實例空閑時從服務(wù)對象實例池中刪除所述原有的服務(wù)對象實例進(jìn)一步包括:所述服務(wù)管理引擎將服務(wù)對象實例池中更新后的服務(wù)插件原有的服務(wù)對象實例標(biāo)記為失效狀態(tài),并定時將服務(wù)對象實例池中空閑并處于失效狀態(tài)的服務(wù)對象實例刪除。
根據(jù)本發(fā)明第二方面的一個實施例中,所述系統(tǒng)還包括:
服務(wù)接口模塊,用于基于服務(wù)調(diào)用請求查詢服務(wù)注冊表以獲得指定的服務(wù)插件對應(yīng)的服務(wù)對象實例信息,從服務(wù)對象實例池中獲取對應(yīng)的服務(wù)對象實例來執(zhí)行服務(wù)調(diào)用;
所述服務(wù)對象實例池在服務(wù)接口模塊調(diào)用相應(yīng)的服務(wù)對象實例時將該服務(wù)對象實例標(biāo)記為占用狀態(tài),并在服務(wù)調(diào)用完成后將該服務(wù)對象實例標(biāo)記為空閑狀態(tài)。
本發(fā)明的服務(wù)插件管理方法和系統(tǒng),通過對服務(wù)插件配置文件和實現(xiàn)文件更新狀態(tài)的監(jiān)控,能夠全自動的加載、更新、卸載服務(wù)插件;在服務(wù)插件更新過程中,通過新舊服務(wù)對象實例同時存在,并且通過狀態(tài)控制的方式,確保服務(wù)的無縫切換,并保證原有服務(wù)對象實例在完成被調(diào)用后再釋放和刪除,服務(wù)插件更新后的所有調(diào)用不會再使用原有的服務(wù)對象實例。
附圖說明
下面將結(jié)合附圖及實施例對本發(fā)明作進(jìn)一步說明,附圖中:
圖1是本發(fā)明一個實施例的服務(wù)插件管理方法的流程圖;
圖2是本發(fā)明一個實施例的服務(wù)插件管理系統(tǒng)的邏輯結(jié)構(gòu)圖;
圖3是本發(fā)明一個實施例中服務(wù)插件管理系統(tǒng)啟動加載服務(wù)插件的交互過程示意圖;
圖4是本發(fā)明一個實施例中服務(wù)插件管理系統(tǒng)更新服務(wù)插件的交互過程示意圖;
圖5是本發(fā)明一個實施例中服務(wù)插件管理系統(tǒng)執(zhí)行服務(wù)調(diào)用的交互過程示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
圖1示出了根據(jù)本發(fā)明一個實施例的服務(wù)插件管理方法100的流程圖。如圖1所示,該服務(wù)插件管理方法100包括如下步驟:
步驟S110中,監(jiān)控服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件的更新狀態(tài)。應(yīng)用服務(wù)容器通過讀取服務(wù)插件文件來加載和創(chuàng)建對應(yīng)的服務(wù)插件。服務(wù)插件文件包括服務(wù)插件配置文件和服務(wù)插件實現(xiàn)文件,其中配置文件配置應(yīng)用服務(wù)容器加載的插件配置信息,包括服務(wù)插件的名稱、實例數(shù)量、入口類名及實現(xiàn)文件的位置和名稱等;實現(xiàn)文件即例如Java的jar包等。本步驟S110中可通過實時或周期性地監(jiān)控服務(wù)插件配置文件及實現(xiàn)文件的更新狀態(tài),來檢查是否有服務(wù)插件更新信息,例如可根據(jù)服務(wù)插件配置文件及實現(xiàn)文件的上次更新時間來檢查其是否有更新。
隨后步驟S120中,在發(fā)現(xiàn)服務(wù)插件配置文件和/或服務(wù)插件實現(xiàn)文件有更新時,加載需要更新的服務(wù)插件的配置文件信息及實現(xiàn)文件信息以創(chuàng)建新的服務(wù)對象實例加入到服務(wù)對象實例池中。具體來說,步驟S120中可通過比對檢查更新后的服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件信息與原有文件信息的差異,獲取需要更新的服務(wù)插件列表,然后根據(jù)該需要更新的服務(wù)插件列表加載相應(yīng)的服務(wù)插件配置文件信息及實現(xiàn)文件信息來創(chuàng)建指定數(shù)量的服務(wù)對象實例,并將新創(chuàng)建的服務(wù)對象實例加入到服務(wù)對象實例池中對應(yīng)的服務(wù)名稱下。
隨后步驟S130中,以新創(chuàng)建的服務(wù)對象實例更新服務(wù)注冊表中的服務(wù)插件信息,即在服務(wù)注冊表中加入該新創(chuàng)建的服務(wù)對象實例信息。
隨后步驟S140中,在服務(wù)對象實例池中更新后的服務(wù)插件原有的服務(wù)對象實例空閑時,從服務(wù)對象實例池中刪除該原有的服務(wù)對象實例。本發(fā)明的服務(wù)插件管理方法100允許新舊服務(wù)對象實例同時存在,并通過維護(hù)服務(wù)注冊表和狀態(tài)控制確保所有的服務(wù)調(diào)用都使用新的服務(wù)對象實例,并保證原有的服務(wù)對象實例在完成被調(diào)用再被刪除。具體來說,該步驟S140中可將服務(wù)對象實例池中更新后的服務(wù)插件原有的服務(wù)對象實例標(biāo)記為失效狀態(tài),并在該標(biāo)記為失效狀態(tài)的服務(wù)對象實例被釋放處于空閑狀態(tài)時,再從服務(wù)對象實例池中刪除,這樣便不會導(dǎo)致現(xiàn)有的服務(wù)因為插件更新而被中斷。
本發(fā)明基于以上介紹的服務(wù)插件管理方法100,能夠自動化監(jiān)控服務(wù)插件 的更新狀態(tài),并動態(tài)、無縫的更新服務(wù)插件到應(yīng)用服務(wù)容器中。
基于以上介紹的本發(fā)明的服務(wù)插件管理方法,本發(fā)明還提出一種服務(wù)插件管理系統(tǒng)。圖2示出了根據(jù)本發(fā)明一個實施例的服務(wù)插件管理系統(tǒng)200的邏輯結(jié)構(gòu)圖。如圖2所示,該服務(wù)插件管理系統(tǒng)200主要由服務(wù)對象實例池210、服務(wù)注冊表模塊220、服務(wù)管理引擎230和服務(wù)接口模塊240構(gòu)成。服務(wù)對象實例池210用于存儲當(dāng)前運(yùn)行的所有服務(wù)插件的服務(wù)對象實例211。服務(wù)注冊表模塊220用于存儲維護(hù)當(dāng)前運(yùn)行的所有服務(wù)插件的信息的服務(wù)注冊表,該服務(wù)插件的信息至少包括服務(wù)插件的服務(wù)名稱和對應(yīng)的服務(wù)對象實例信息,還可包括所有服務(wù)插件的狀態(tài)信息(包括物理狀態(tài)和運(yùn)行狀態(tài)等)。服務(wù)管理引擎230用于實時或周期性地監(jiān)控服務(wù)插件文件(即服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件)的更新狀態(tài),并在發(fā)現(xiàn)服務(wù)插件配置文件和/或服務(wù)插件實現(xiàn)文件有更新時,加載需要更新的服務(wù)插件的配置文件信息及實現(xiàn)文件信息以創(chuàng)建新的服務(wù)對象實例加入到服務(wù)對象實例池210中,并以新創(chuàng)建的服務(wù)對象實例更新服務(wù)注冊表模塊220中服務(wù)注冊表里的服務(wù)插件信息。服務(wù)管理引擎230還在服務(wù)對象實例池210中更新后的服務(wù)插件原有的服務(wù)對象實例空閑時,從服務(wù)對象實例池220中刪除該原有的服務(wù)對象實例。具體來說,服務(wù)管理引擎220可在將新的服務(wù)對象實例加入服務(wù)對象實例池210后,將服務(wù)對象實例池中該服務(wù)插件原有的服務(wù)對象實例標(biāo)記為失效狀態(tài),并定時將服務(wù)對象實例池210中空閑并處于失效狀態(tài)的服務(wù)對象實例刪除。服務(wù)接口模塊240是所有服務(wù)調(diào)用的統(tǒng)一入口。服務(wù)接口模塊240用于基于服務(wù)調(diào)用請求查詢服務(wù)注冊表模塊220中的服務(wù)注冊表以獲得指定的服務(wù)插件對應(yīng)的服務(wù)對象實例信息,然后從服務(wù)對象實例池210中獲取對應(yīng)的服務(wù)對象實例來執(zhí)行服務(wù)調(diào)用。服務(wù)對象實例池210在服務(wù)接口模塊240調(diào)用相應(yīng)的服務(wù)對象實例211時將該服務(wù)對象實例211標(biāo)記為占用狀態(tài),并在服務(wù)接口模塊240服務(wù)調(diào)用完成后將該服務(wù)對象實例211標(biāo)記為空閑狀態(tài),以便于服務(wù)管理引擎230對服務(wù)對象實例池210中的服務(wù)對象實例進(jìn)行維護(hù)。例如如前所述,服務(wù)管理引擎230可定時將服務(wù)對象實例池210中空閑并處于失效狀態(tài)的服務(wù)對象實例刪除。
圖3示出了本發(fā)明一個實施例中服務(wù)插件管理系統(tǒng)啟動加載服務(wù)插件的 交互過程示意圖。如圖3所示,系統(tǒng)啟動時,服務(wù)管理引擎加載服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件,對每個服務(wù)插件做如下處理過程:
步驟S301,服務(wù)管理引擎加載服務(wù)插件的配置文件信息及實現(xiàn)文件信息,這些信息包括例如服務(wù)插件名稱、入口實現(xiàn)類、實現(xiàn)文件位置、對象實例數(shù)量等等。
步驟S302,服務(wù)管理引擎根據(jù)服務(wù)插件配置信息中的入口實現(xiàn)類及對象實例的數(shù)量,創(chuàng)建指定數(shù)量的服務(wù)對象實例。
步驟S303,服務(wù)管理引擎將創(chuàng)建的服務(wù)對象實例加入服務(wù)對象實例池中。服務(wù)管理池中可按服務(wù)名稱對服務(wù)對象實例進(jìn)行分類存儲,服務(wù)管理引擎將創(chuàng)建的服務(wù)對象實例加入到服務(wù)對象實例池中指定的服務(wù)名稱下。
步驟S304,服務(wù)管理引擎更新服務(wù)注冊表,加入該服務(wù)插件的服務(wù)對象實例信息。
服務(wù)插件的動態(tài)更新過程,包括服務(wù)插件的刪除、新增和更新過程。本發(fā)明的服務(wù)插件管理系統(tǒng)根據(jù)服務(wù)插件配置文件即實現(xiàn)文件的更新狀態(tài)校驗服務(wù)插件的更新類型,并根據(jù)不同的類型進(jìn)行服務(wù)插件的動態(tài)更新。圖4示出了本發(fā)明一個實施例中服務(wù)插件管理系統(tǒng)更新服務(wù)插件的交互過程示意圖。如圖4所示,服務(wù)插件的更新過程如下:
步驟S401,服務(wù)管理引擎實時或周期性地監(jiān)控服務(wù)插件配置文件及實現(xiàn)文件的更新狀態(tài),例如可根據(jù)文件的上次更新時間來檢查其是否有更新。
步驟S402,服務(wù)管理引擎在檢查到有更新后,獲取更新的文件信息。
步驟S403,服務(wù)管理引擎比對檢查更新后的服務(wù)插件配置文件及服務(wù)插件實現(xiàn)文件信息與原有文件信息的差異,獲取需要更新的服務(wù)插件列表。
步驟S404,服務(wù)管理引擎根據(jù)需要更新的服務(wù)插件列表,加載相應(yīng)的服務(wù)插件配置文件信息及實現(xiàn)文件信息。
步驟S405,服務(wù)管理引擎根據(jù)服務(wù)配置入口實現(xiàn)類及對象實例的數(shù)量,創(chuàng)建指定數(shù)量的新的服務(wù)對象實例。
步驟S406,服務(wù)管理引擎將新創(chuàng)建的服務(wù)對象實例加入到服務(wù)對象實例池中指定的服務(wù)名稱下。
步驟S407,服務(wù)管理引擎更新服務(wù)注冊表,加入該服務(wù)插件的新服務(wù)對象實例信息。
步驟S408,服務(wù)管理引擎將服務(wù)對象實例池中該服務(wù)插件原有的服務(wù)對象實例標(biāo)記為失效狀態(tài)。
步驟S409,服務(wù)管理引擎定時將服務(wù)對象實例池中空閑并處于失效狀態(tài)的服務(wù)對象實例刪除。
基于本發(fā)明所介紹的服務(wù)插件管理方法和系統(tǒng),應(yīng)用服務(wù)容器中的服務(wù)插件調(diào)用過程如圖5所述,包括:
步驟S501,服務(wù)接口接收服務(wù)調(diào)用請求,通過服務(wù)注冊表查找指定調(diào)用的服務(wù)插件的服務(wù)對象實例信息。
步驟S502,服務(wù)接口從服務(wù)對象實例池中獲取指定服務(wù)中空閑有效的服務(wù)對象實例。
步驟S503,服務(wù)對象實例池將服務(wù)接口要調(diào)用的服務(wù)對象實例標(biāo)記為占用狀態(tài),以保證一個服務(wù)對象實例只能被互斥調(diào)用。
步驟S504,服務(wù)對象實例池將服務(wù)接口要調(diào)用的服務(wù)對戲?qū)嵗祷亟o服務(wù)接口。
步驟S505,服務(wù)接口根據(jù)請求調(diào)用的參數(shù)及調(diào)用規(guī)范,調(diào)用獲取的服務(wù)對象實例執(zhí)行服務(wù)邏輯,完成服務(wù)調(diào)用。
步驟S506,服務(wù)接口在完成服務(wù)調(diào)用后,向服務(wù)對象實例池發(fā)起該服務(wù)對象實例的占用釋放請求,以釋放該服務(wù)對象實例的占用。
步驟S507,服務(wù)對象實例池將對應(yīng)的服務(wù)對象實例標(biāo)記為空閑狀態(tài)。
本發(fā)明的服務(wù)插件管理方法和系統(tǒng),通過對服務(wù)插件配置文件和實現(xiàn)文件更新狀態(tài)的監(jiān)控,能夠全自動的加載、更新、卸載服務(wù)插件;在服務(wù)插件更新過程中,通過允許新舊服務(wù)對象實例同時存在,并且通過狀態(tài)控制,確保服務(wù)的無縫切換,保證原有服務(wù)對象實例在完成被調(diào)用后再釋放和刪除而不會影響服務(wù)的執(zhí)行,并且服務(wù)插件更新后的所有調(diào)用不會再使用原有的服務(wù)對象實例。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā) 明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。