本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種配置數(shù)據(jù)的同步方法及裝置。
背景技術(shù):
目前應(yīng)用服務(wù)系統(tǒng)大部分采用分布式的設(shè)計(jì)架構(gòu),分布式系統(tǒng)較好的解決了系統(tǒng)的性能問題,但是系統(tǒng)的復(fù)雜性卻大大提高。通常情況下分布式系統(tǒng)中往往有上百臺(tái)機(jī)器,每臺(tái)機(jī)器中運(yùn)行一個(gè)服務(wù)實(shí)例。在系統(tǒng)運(yùn)行時(shí),每個(gè)服務(wù)實(shí)例都需要連接數(shù)據(jù)庫。為避免增加數(shù)據(jù)庫壓力,通常將數(shù)據(jù)庫中的配置信息加載到緩存中或者內(nèi)存中。因各個(gè)服務(wù)實(shí)例是獨(dú)立分開的,為避免增加緩存壓力,需將從配置信息加載到內(nèi)存中。
由于在短時(shí)間內(nèi)的并發(fā)數(shù)和訪問量劇增,通常需要部署多臺(tái)服務(wù)實(shí)例。此時(shí),在服務(wù)實(shí)例運(yùn)行過程中修改配置文件,采用重啟服務(wù)再同步配置文件的方式,當(dāng)服務(wù)實(shí)例較多時(shí),勢必會(huì)帶來一定的風(fēng)險(xiǎn)。為了解決重啟同步配置文件的問題,通常采用配置服務(wù)系統(tǒng),在該系統(tǒng)中配置所需的信息,保存配置數(shù)據(jù)之后進(jìn)行配置同步。
具體地,每個(gè)服務(wù)實(shí)例開放API接口(IP地址和端口)。在同步配置數(shù)據(jù)時(shí),配置服務(wù)系統(tǒng)調(diào)用各個(gè)服務(wù)實(shí)例的API接口。各個(gè)服務(wù)實(shí)例在進(jìn)入此接口的時(shí)候訪問數(shù)據(jù)庫并及時(shí)讀取數(shù)據(jù)庫內(nèi)容并加載到實(shí)例內(nèi)存中。采用配置服務(wù)系統(tǒng)中維護(hù)各個(gè)分布式服務(wù)實(shí)例開放API接口的方式,在應(yīng)用服務(wù)器較少的時(shí)候還好,如果應(yīng)用服務(wù)器較多時(shí),人工參與增刪API接口的時(shí)候帶來一定的工作量和風(fēng)險(xiǎn),容易漏掉機(jī)器或者IP端口寫錯(cuò)。并且,在添加至進(jìn)行配置服務(wù)系統(tǒng)中,需要提供相關(guān)服務(wù)實(shí)例的機(jī)器信息,操作十分繁瑣,且不夠靈活。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種配置數(shù)據(jù)的同步方法及裝置,用以解決現(xiàn)有技術(shù)中配置數(shù)據(jù)同步時(shí),系統(tǒng)維護(hù)困難且操作繁瑣的問題。
為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采用下述的技術(shù)方案:
依據(jù)本發(fā)明的一個(gè)方面,提供一種配置數(shù)據(jù)的同步方法,用于應(yīng)用服務(wù)器,包括:
在啟動(dòng)時(shí),從配置服務(wù)器中讀取配置數(shù)據(jù)并加載至緩存中;
監(jiān)控所述配置服務(wù)器中所述配置數(shù)據(jù)的目錄節(jié)點(diǎn)是否更新;
當(dāng)監(jiān)控到所述目錄節(jié)點(diǎn)更新時(shí),則從所述配置服務(wù)器中同步更新的配置數(shù)據(jù)并加載至緩存中。
進(jìn)一步地,所述監(jiān)控所述配置服務(wù)器中所述配置數(shù)據(jù)的目錄節(jié)點(diǎn)是否更新,具體包括:
向所述配置服務(wù)器發(fā)送注冊請(qǐng)求,所述注冊請(qǐng)求中攜帶所述應(yīng)用服務(wù)器的標(biāo)識(shí);
當(dāng)監(jiān)控到所述配置服務(wù)器基于所述標(biāo)識(shí)反饋的同步通知,則判斷所述目錄節(jié)點(diǎn)有更新。
進(jìn)一步地,所述根據(jù)更新的目錄節(jié)點(diǎn)從所述配置服務(wù)器中讀取更新的配置數(shù)據(jù)并加載至緩存中后,所述方法還包括:
根據(jù)預(yù)設(shè)的檢測策略確定是否繼續(xù)監(jiān)控所述配置數(shù)據(jù)的目錄節(jié)點(diǎn);
若繼續(xù),則重新向所述配置服務(wù)器發(fā)送注冊請(qǐng)求。
依據(jù)本發(fā)明的一個(gè)方面,提供一種配置數(shù)據(jù)的同步方法,用于配置服務(wù)器,包括:
根據(jù)應(yīng)用服務(wù)器的業(yè)務(wù)配置請(qǐng)求,向所述應(yīng)用服務(wù)器發(fā)送所需配置數(shù)據(jù);
當(dāng)檢測到所述配置數(shù)據(jù)有數(shù)據(jù)更新時(shí),更新所述配置數(shù)據(jù)對(duì)應(yīng)的目錄節(jié)點(diǎn),并向所述應(yīng)用服務(wù)器發(fā)送同步通知。
進(jìn)一步地,所述方法還包括:
接收所述應(yīng)用服務(wù)器的注冊請(qǐng)求;其中,所述注冊請(qǐng)求中攜帶所述應(yīng)用服務(wù)器的標(biāo)識(shí);
當(dāng)檢測到所述配置數(shù)據(jù)有數(shù)據(jù)更新時(shí),更新所述配置數(shù)據(jù)對(duì)應(yīng)的目錄節(jié)點(diǎn),并根據(jù)所述標(biāo)識(shí)向?qū)?yīng)的發(fā)送同步通知。
依據(jù)本發(fā)明的一個(gè)方面,提供一種配置數(shù)據(jù)的同步裝置,用于應(yīng)用服務(wù)器,包括:
啟動(dòng)模塊,用于在應(yīng)用服務(wù)器啟動(dòng)時(shí),從配置服務(wù)器中讀取配置數(shù)據(jù)并加載至緩存中;
監(jiān)控模塊,用于監(jiān)控所述配置服務(wù)器中所述配置數(shù)據(jù)的目錄節(jié)點(diǎn)是否更新;
同步模塊,用于當(dāng)所述監(jiān)控模塊監(jiān)控到所述目錄節(jié)點(diǎn)更新時(shí),則根據(jù)從所述配置服務(wù)器中同步更新的配置數(shù)據(jù)并加載至緩存中。
進(jìn)一步地,所述監(jiān)控模塊具體包括:
注冊單元,用于向所述配置服務(wù)器發(fā)送注冊請(qǐng)求,所述注冊請(qǐng)求中攜帶所述應(yīng)用服務(wù)器的標(biāo)識(shí);
判斷單元,用于當(dāng)監(jiān)控到所述配置服務(wù)器基于所述標(biāo)識(shí)反饋的同步通知,則判斷所述目錄節(jié)點(diǎn)有更新。
進(jìn)一步地,所述裝置還包括確定模塊,用于根據(jù)預(yù)設(shè)的檢測策略確定是否繼續(xù)監(jiān)控所述配置數(shù)據(jù)的目錄節(jié)點(diǎn);
所述注冊單元,還用于當(dāng)所述確定模塊繼續(xù)監(jiān)控所述配置數(shù)據(jù)的目錄節(jié)點(diǎn)時(shí),則重新向所述配置服務(wù)器發(fā)送注冊請(qǐng)求。
依據(jù)本發(fā)明的一個(gè)方面,提供一種配置數(shù)據(jù)的同步裝置,用于配置服務(wù)器,包括:
發(fā)送模塊,用于根據(jù)應(yīng)用服務(wù)器的業(yè)務(wù)配置請(qǐng)求,向所述應(yīng)用服務(wù)器發(fā)送所需配置數(shù)據(jù);
同步模塊,用于當(dāng)檢測到所述配置數(shù)據(jù)有數(shù)據(jù)更新時(shí),更新所述配置數(shù)據(jù)對(duì)應(yīng)的目錄節(jié)點(diǎn),并向所述應(yīng)用服務(wù)器發(fā)送同步通知。
進(jìn)一步地,所述裝置還包括:
接收模塊,用于接收所述應(yīng)用服務(wù)器的注冊請(qǐng)求;其中,所述注冊請(qǐng)求中攜帶所述應(yīng)用服務(wù)器的標(biāo)識(shí);
所述同步模塊,具體用于當(dāng)檢測到配置數(shù)據(jù)有數(shù)據(jù)更新時(shí),更新配置數(shù)據(jù)對(duì)應(yīng)的目錄節(jié)點(diǎn),并根據(jù)標(biāo)識(shí)向?qū)?yīng)的應(yīng)用服務(wù)器發(fā)送同步通知。
本發(fā)明的有益效果如下:
本發(fā)明所提供配置數(shù)據(jù)的同步方法及裝置,每臺(tái)應(yīng)用服務(wù)器就會(huì)收到配置信息變更通知,然后從數(shù)據(jù)庫獲取到最新的數(shù)據(jù)庫內(nèi)容并應(yīng)用到系統(tǒng)中,減少了數(shù)據(jù)庫變更需要重新修改配置信息并進(jìn)行服務(wù)實(shí)例重啟的動(dòng)作,或者避免手工同步各個(gè)服務(wù)實(shí)例的API接口,減少人工介入和出錯(cuò)率。
附圖說明
圖1為本發(fā)明實(shí)施例應(yīng)用服務(wù)器中的配置數(shù)據(jù)同步方法的流程圖;
圖2為本發(fā)明實(shí)施例配置服務(wù)器中的配置數(shù)據(jù)同步方法的流程圖;
圖3為本發(fā)明一實(shí)施例中應(yīng)用服務(wù)系統(tǒng)的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例應(yīng)用服務(wù)器中的配置數(shù)據(jù)同步裝置的結(jié)構(gòu)示意圖;
圖5為本發(fā)明實(shí)施例配置服務(wù)器中的配置數(shù)據(jù)同步裝置的結(jié)構(gòu)示意圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
為了解決現(xiàn)有技術(shù)中配置數(shù)據(jù)同步時(shí),系統(tǒng)維護(hù)困難且操作繁瑣的問題,本發(fā)明實(shí)施例提供一種配置數(shù)據(jù)的同步方法。該方法通過服務(wù)實(shí)例實(shí)時(shí)監(jiān)控配置服務(wù)器中目標(biāo)節(jié)點(diǎn)的變化,來獲知配置數(shù)據(jù)是否有更新;當(dāng)有更新時(shí),則直接根據(jù)更新的目標(biāo)節(jié)點(diǎn)從配置服務(wù)器的數(shù)據(jù)庫中直接獲取配置數(shù)據(jù)并加載至內(nèi)存即可。通過本發(fā)明配置信息在更新保存后,各個(gè)服務(wù)實(shí)例能自行捕獲到數(shù)據(jù)變更通知并加載變更后的配置數(shù)據(jù)到內(nèi)存。
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明的技術(shù)內(nèi)容進(jìn)行詳細(xì)說明。
本發(fā)明實(shí)施例提供了一種配置數(shù)據(jù)的同步方法,用于應(yīng)用服務(wù)器中,如圖1所示,具體包括如下步驟:
步驟101,在啟動(dòng)時(shí),從配置服務(wù)器中讀取配置數(shù)據(jù)并加載至緩存中。
其中,在該步驟中,每個(gè)應(yīng)用服務(wù)器運(yùn)行一個(gè)具體的服務(wù)實(shí)例。當(dāng)用戶訪問服務(wù)時(shí),會(huì)通過負(fù)載均衡將請(qǐng)求分發(fā)到各個(gè)服務(wù)實(shí)例中。各個(gè)服務(wù)實(shí)例在啟動(dòng)初始化過程中,向配置服務(wù)器發(fā)送業(yè)務(wù)配置請(qǐng)求,請(qǐng)求從配置服務(wù)器的數(shù)據(jù)庫中獲取所需的配置數(shù)據(jù)。
其中,配置服務(wù)器的數(shù)據(jù)庫中由用戶預(yù)先配置了各個(gè)服務(wù)實(shí)例所需的配置數(shù)據(jù),用戶也可以根據(jù)實(shí)際需要實(shí)時(shí)配置所需的配置數(shù)據(jù)。而在用戶更新配置數(shù)據(jù)后,需要將配置數(shù)據(jù)同步到各個(gè)服務(wù)實(shí)例中。
步驟102,監(jiān)控配置服務(wù)器中配置數(shù)據(jù)的目錄節(jié)點(diǎn)是否更新。
其中,配置服務(wù)器中設(shè)置了配置中心,該配置中心存儲(chǔ)了數(shù)據(jù)庫中配置數(shù)據(jù)對(duì)應(yīng)的目錄節(jié)點(diǎn)(即存儲(chǔ)路徑)。
具體地,在服務(wù)實(shí)例監(jiān)控配置服務(wù)器中配置數(shù)據(jù)的目錄節(jié)點(diǎn)是否更新,具體包括如下:
向配置服務(wù)器的配置中心發(fā)送注冊請(qǐng)求,該注冊請(qǐng)求中攜帶了應(yīng)用服務(wù)器的標(biāo)識(shí)信息;
待注冊完成后,實(shí)時(shí)監(jiān)控到配置中心發(fā)送配置數(shù)據(jù)的同步通知,根據(jù)是否有同步通知來判斷目錄節(jié)點(diǎn)是否更新。
其中,配置服務(wù)器中數(shù)據(jù)庫的配置數(shù)據(jù)發(fā)生變更后,會(huì)對(duì)配置中心的目錄節(jié)點(diǎn)進(jìn)行修改。待修改完成后,根據(jù)注冊的應(yīng)用服務(wù)器的標(biāo)識(shí)向指定的應(yīng)用服務(wù)器發(fā)送同步通知。
其中,一個(gè)實(shí)施例中,應(yīng)用服務(wù)器根據(jù)配置中心中修改標(biāo)志位的形式,確定配置中心是否發(fā)送同步通知。具體地,配置中心完成目標(biāo)節(jié)點(diǎn)的更新后,會(huì)根據(jù)注冊的標(biāo)識(shí)信息依次修改應(yīng)用服務(wù)器對(duì)應(yīng)的標(biāo)志位;應(yīng)用服務(wù)器實(shí)時(shí)監(jiān)控該標(biāo)志位的變化,一旦監(jiān)聽到標(biāo)志位發(fā)生變化時(shí),則判定目標(biāo)節(jié)點(diǎn)有更新。
步驟103,當(dāng)監(jiān)控到目錄節(jié)點(diǎn)更新時(shí),則從配置服務(wù)器中同步更新的配置數(shù)據(jù)并加載至緩存中。
其中,當(dāng)監(jiān)控到配置中心的目標(biāo)節(jié)點(diǎn)有更新時(shí),則需要從數(shù)據(jù)庫中獲取更新后的配置數(shù)據(jù)并加載至內(nèi)存中。而當(dāng)監(jiān)測到配置中心的目標(biāo)節(jié)點(diǎn)沒有更新時(shí),則繼續(xù)監(jiān)控直至有配置數(shù)據(jù)有更新。
進(jìn)一步地,在從數(shù)據(jù)庫中讀取配置數(shù)據(jù)并加載至內(nèi)存后,該方法還包括:
根據(jù)預(yù)設(shè)的檢測策略確定是否繼續(xù)監(jiān)控配置數(shù)據(jù)的目錄節(jié)點(diǎn):
當(dāng)需要繼續(xù)監(jiān)控時(shí),則重新向配置服務(wù)器的配置中心發(fā)送注冊請(qǐng)求。
當(dāng)不需要繼續(xù)監(jiān)控時(shí),則直接退出監(jiān)控即可。
本發(fā)明實(shí)施例中,當(dāng)完成一次注冊請(qǐng)求后,若監(jiān)控到數(shù)據(jù)有變更,則需要確定是否需要繼續(xù)監(jiān)控。也就是說,注冊只生效一次,后續(xù)有數(shù)據(jù)更新時(shí),此次注冊就會(huì)失效。應(yīng)用服務(wù)器中預(yù)先設(shè)置了檢測策略,當(dāng)注冊失效后,則需要依據(jù)預(yù)設(shè)的檢測策略判斷是否需要繼續(xù)監(jiān)控。
其中,預(yù)設(shè)的檢測策略根據(jù)不同的服務(wù)來進(jìn)行設(shè)置。具體地,獲取配置數(shù)據(jù)后,判斷配置數(shù)據(jù)是否符合預(yù)設(shè)的繼續(xù)監(jiān)控和停止監(jiān)控的檢測策略;當(dāng)符合時(shí),則執(zhí)行相應(yīng)的處理操作即可。
舉例說明,當(dāng)服務(wù)實(shí)例為手機(jī)搶購服務(wù)時(shí),配置數(shù)據(jù)為手機(jī)的搶購數(shù)量,那么停止監(jiān)控的檢測策略可以為檢測到手機(jī)的數(shù)量變?yōu)?臺(tái)時(shí),則停止繼續(xù)監(jiān)控節(jié)點(diǎn);繼續(xù)監(jiān)控的檢測策略可以為搶購的數(shù)量增加為10萬時(shí),則需要繼續(xù)監(jiān)控目錄節(jié)點(diǎn)。這里的舉例僅作解釋和說明,不用于對(duì)本發(fā)明的具體限定。
下面結(jié)合一具體實(shí)施例對(duì)本發(fā)明的技術(shù)內(nèi)容進(jìn)行解釋和說明。
本發(fā)明一實(shí)施例中,主要針對(duì)的是手機(jī)搶購系統(tǒng)。通常在搶購期間,由于在短時(shí)間內(nèi)的并發(fā)數(shù)和訪問量劇增,單臺(tái)服務(wù)實(shí)例無法及時(shí)響應(yīng)請(qǐng)求,需要部署多臺(tái)服務(wù)實(shí)例。此時(shí),如果在搶購開始期間,需要將手機(jī)型號(hào)、配件或者相關(guān)數(shù)量保存。
由于重啟服務(wù)實(shí)例會(huì)帶來一定的風(fēng)險(xiǎn),因此在配置服務(wù)器的數(shù)據(jù)庫中預(yù)先配置要搶購的手機(jī)型號(hào)以及數(shù)量。但是,后續(xù)在搶購過程中,手機(jī)型號(hào)及相關(guān)數(shù)量等需要根據(jù)實(shí)際情況進(jìn)行調(diào)整,需要將調(diào)整后的配置數(shù)據(jù)同步到服務(wù)實(shí)例中。
在進(jìn)行配置同步時(shí),將配置信息保存至遠(yuǎn)程的某個(gè)目錄節(jié)點(diǎn)。然后注冊的應(yīng)用服務(wù)器監(jiān)控?fù)屬彽氖謾C(jī)型號(hào)以及數(shù)量等配置信息,一旦配置信息發(fā)生變化,應(yīng)用服務(wù)器會(huì)受到配置信息的變更通知,然后從配置服務(wù)器的數(shù)據(jù)庫中讀取更新的手機(jī)型號(hào)以及數(shù)量,即可根據(jù)更新的配置信息繼續(xù)完成搶購服務(wù)。
基于上述可知,本發(fā)明實(shí)施例所提供的配置數(shù)據(jù)的同步方法,不需要在配置數(shù)據(jù)變更時(shí),通過重啟所有服務(wù)實(shí)例來完成服務(wù)中的數(shù)據(jù)更新,只需要實(shí)時(shí)監(jiān)控配置中心中目標(biāo)節(jié)點(diǎn)的變化獲知數(shù)據(jù)有更新。這樣,各個(gè)服務(wù)實(shí)例直接根據(jù)變更的目錄節(jié)點(diǎn)從數(shù)據(jù)庫中直接加載變更后的配置數(shù)據(jù)到內(nèi)存。因此。本發(fā)明無論應(yīng)用服務(wù)器的多少,都可以保證進(jìn)行配置數(shù)據(jù)的同步,使得配置數(shù)據(jù)添加以及同步更加靈活,同時(shí)也可以保證新增業(yè)務(wù)員服務(wù)器的時(shí)候在上線之時(shí)能夠及時(shí)獲取到數(shù)據(jù)庫中的最新配置數(shù)據(jù)。
本發(fā)明實(shí)施例還提供了一種配置數(shù)據(jù)的同步方法,用于配置服務(wù)器中,如圖2所示,具體包括如下步驟:
步驟201,根據(jù)應(yīng)用服務(wù)器的業(yè)務(wù)配置請(qǐng)求,向應(yīng)用服務(wù)器發(fā)送所需配置數(shù)據(jù)。
配置服務(wù)器中包括數(shù)據(jù)庫和配置中心;其中,數(shù)據(jù)庫中預(yù)先配置了服務(wù)實(shí)例所需的配置數(shù)據(jù)。配置中心中存儲(chǔ)了各個(gè)配置數(shù)據(jù)的目錄節(jié)點(diǎn),即存儲(chǔ)的路徑。
其中,配置服務(wù)器在啟動(dòng)時(shí),判斷是否存在遠(yuǎn)程目錄節(jié)點(diǎn);若存在,則直接在數(shù)據(jù)庫對(duì)應(yīng)的位置存儲(chǔ)配置數(shù)據(jù)即可;若不存在,則需要配置中心創(chuàng)建遠(yuǎn)程目錄節(jié)點(diǎn)
在存儲(chǔ)配置數(shù)據(jù)時(shí),需將配置數(shù)據(jù)的目錄節(jié)點(diǎn)保存至配置中心中。若當(dāng)前不存在目錄節(jié)點(diǎn),則需要配置中心創(chuàng)建遠(yuǎn)程目錄節(jié)點(diǎn);若不存在對(duì)應(yīng)的目錄節(jié)點(diǎn),則直接保存至該目錄節(jié)點(diǎn)中即可。
其中,在應(yīng)用服務(wù)器啟動(dòng)具體的服務(wù)實(shí)例中,會(huì)發(fā)送業(yè)務(wù)配置請(qǐng)求。配置服務(wù)器根據(jù)業(yè)務(wù)配置請(qǐng)求中所需的配置信息,從數(shù)據(jù)庫中獲取后,并發(fā)送至應(yīng)用服務(wù)器中。
步驟202,當(dāng)檢測到配置數(shù)據(jù)有數(shù)據(jù)更新時(shí),更新配置數(shù)據(jù)對(duì)應(yīng)的目錄節(jié)點(diǎn),并向應(yīng)用服務(wù)器發(fā)送同步通知。
在該步驟中,配置服務(wù)器檢測數(shù)據(jù)庫中的配置數(shù)據(jù)是否有更新。
具體地,在用戶修改配置數(shù)據(jù)后并保存,配置服務(wù)器當(dāng)檢測到保存指令后,檢測數(shù)據(jù)庫中變化的配置數(shù)據(jù);
當(dāng)檢測到配置數(shù)據(jù)發(fā)生變化時(shí),則需要獲取該配置數(shù)據(jù)所對(duì)應(yīng)的配置中心的目錄節(jié)點(diǎn),并修改該配置中心的目錄節(jié)點(diǎn)。
進(jìn)一步地,該方法還包括:
接收應(yīng)用服務(wù)器的注冊請(qǐng)求;其中,注冊請(qǐng)求中攜帶應(yīng)用服務(wù)器的標(biāo)識(shí);
當(dāng)檢測到配置數(shù)據(jù)有數(shù)據(jù)更新時(shí),更新配置數(shù)據(jù)對(duì)應(yīng)的目錄節(jié)點(diǎn),并根據(jù)標(biāo)識(shí)向?qū)?yīng)的應(yīng)用服務(wù)器發(fā)送同步通知。
也就是說,本發(fā)明實(shí)施例中,一旦檢測到配置數(shù)據(jù)發(fā)生更新時(shí),則向配置中心注冊的應(yīng)用服務(wù)器發(fā)送同步通知,確保應(yīng)用服務(wù)器能夠及時(shí)獲取變更通知,并及時(shí)讀取新的配置數(shù)據(jù)并加載到內(nèi)存當(dāng)中。
舉例說明,參見圖3應(yīng)用服務(wù)系統(tǒng)的結(jié)構(gòu)示意圖。其中,client為應(yīng)用服務(wù)器(服務(wù)實(shí)例)。各個(gè)client注冊到配置中心(/configuration)后,實(shí)時(shí)監(jiān)控/configuration是否有變化;當(dāng)配置數(shù)據(jù)(Config Data)有更新時(shí),/configuration中也會(huì)隨之更新,這時(shí)各個(gè)client監(jiān)控到/configuration變化后,獲取配置數(shù)據(jù)有更新,則數(shù)據(jù)庫中直接獲取Config Data并加載即可。
本發(fā)明實(shí)施例提供了一種配置數(shù)據(jù)的同步裝置,用于應(yīng)用服務(wù)器中,如圖4所示,具體包括:
啟動(dòng)模塊41,用于在啟動(dòng)時(shí),從配置服務(wù)器中讀取配置數(shù)據(jù)并加載至緩存中。
每個(gè)應(yīng)用服務(wù)器運(yùn)行一個(gè)具體的服務(wù)實(shí)例。當(dāng)用戶訪問服務(wù)時(shí),會(huì)通過負(fù)載均衡將請(qǐng)求分發(fā)到各個(gè)服務(wù)實(shí)例中。應(yīng)用服務(wù)器的啟動(dòng)模塊在啟動(dòng)初始化過程中,向配置服務(wù)器發(fā)送業(yè)務(wù)配置請(qǐng)求,請(qǐng)求從配置服務(wù)器的數(shù)據(jù)庫中獲取所需的配置數(shù)據(jù)。
其中,配置服務(wù)器的數(shù)據(jù)庫中由用戶預(yù)先配置了各個(gè)服務(wù)實(shí)例所需的配置數(shù)據(jù),用戶也可以根據(jù)實(shí)際需要實(shí)時(shí)配置所需的配置數(shù)據(jù)。而在用戶更新配置數(shù)據(jù)后,需要將配置數(shù)據(jù)同步到各個(gè)服務(wù)實(shí)例中。
監(jiān)控模塊42,用于監(jiān)控配置服務(wù)器中配置數(shù)據(jù)的目錄節(jié)點(diǎn)是否更新。
其中,配置服務(wù)器中設(shè)置了配置中心,該配置中心存儲(chǔ)了數(shù)據(jù)庫中配置數(shù)據(jù)的目錄節(jié)點(diǎn)(即存儲(chǔ)路徑)。根據(jù)該目錄節(jié)點(diǎn),應(yīng)用服務(wù)器從數(shù)據(jù)庫存儲(chǔ)的指定位置獲取配置數(shù)據(jù)。
具體地,監(jiān)控模塊42還包括注冊單元和判斷單元:其中,
注冊單元,用于向配置服務(wù)器的配置中心發(fā)送注冊請(qǐng)求,該注冊請(qǐng)求中攜帶了應(yīng)用服務(wù)器的標(biāo)識(shí)信息;
判斷單元,用于注冊單元注冊完成后,實(shí)時(shí)監(jiān)控到配置中心發(fā)送配置數(shù)據(jù)的同步通知,根據(jù)是否有同步通知來判斷目錄節(jié)點(diǎn)是否更新。
其中,配置服務(wù)器中數(shù)據(jù)庫的配置數(shù)據(jù)發(fā)生變更后,會(huì)對(duì)配置中心的目錄節(jié)點(diǎn)進(jìn)行修改。待修改完成后,根據(jù)注冊的應(yīng)用服務(wù)器的標(biāo)識(shí)向指定的應(yīng)用服務(wù)器發(fā)送同步通知。
其中,一個(gè)實(shí)施例中,判斷單元監(jiān)控配置中心中的標(biāo)志位,確定配置中心是否發(fā)送同步通知。具體地,配置中心完成目標(biāo)節(jié)點(diǎn)的更新后,會(huì)根據(jù)注冊的標(biāo)識(shí)信息依次修改應(yīng)用服務(wù)器對(duì)應(yīng)的標(biāo)志位;判斷單元實(shí)時(shí)監(jiān)控該標(biāo)志位的變化,一旦監(jiān)聽到標(biāo)志位發(fā)生變化時(shí),則判定目標(biāo)節(jié)點(diǎn)有更新。
同步模塊43,用于當(dāng)監(jiān)控到目錄節(jié)點(diǎn)更新時(shí),則從配置服務(wù)器中同步更新的配置數(shù)據(jù)并加載至緩存中。
其中,當(dāng)監(jiān)控到配置中心的目標(biāo)節(jié)點(diǎn)有更新時(shí),則需要從數(shù)據(jù)庫中獲取更新后的配置數(shù)據(jù)并加載至內(nèi)存中。而當(dāng)監(jiān)測到配置中心的目標(biāo)節(jié)點(diǎn)沒有更新時(shí),則繼續(xù)監(jiān)控直至有配置數(shù)據(jù)有更新。
進(jìn)一步地,該裝置還包括確定模塊44,用于在從數(shù)據(jù)庫中讀取配置數(shù)據(jù)并加載至內(nèi)存后,根據(jù)預(yù)設(shè)的檢測策略確定是否繼續(xù)監(jiān)控配置數(shù)據(jù)的目錄節(jié)點(diǎn):
當(dāng)需要繼續(xù)監(jiān)控時(shí),則重新向配置服務(wù)器的配置中心發(fā)送注冊請(qǐng)求。
當(dāng)不需要繼續(xù)監(jiān)控時(shí),則直接退出監(jiān)控即可。
本發(fā)明實(shí)施例中,當(dāng)完成一次注冊請(qǐng)求后,若監(jiān)控到數(shù)據(jù)有變更,則需要確定是否需要繼續(xù)監(jiān)控。也就是說,注冊只生效一次,后續(xù)有數(shù)據(jù)更新時(shí),此次注冊就會(huì)失效。應(yīng)用服務(wù)器中預(yù)先設(shè)置了檢測策略,當(dāng)注冊失效后,則需要依據(jù)預(yù)設(shè)的檢測策略判斷是否需要繼續(xù)監(jiān)控。
其中,確定模塊44中的檢測策略根據(jù)不同的服務(wù)來進(jìn)行設(shè)置。具體地,獲取配置數(shù)據(jù)后,判斷配置數(shù)據(jù)是否符合預(yù)設(shè)的繼續(xù)監(jiān)控和停止監(jiān)控的檢測策略;當(dāng)符合時(shí),則執(zhí)行相應(yīng)的處理操作即可。
本發(fā)明實(shí)施例所提供的配置數(shù)據(jù)的同步裝置,不需要在配置數(shù)據(jù)變更時(shí),通過重啟所有服務(wù)實(shí)例來完成服務(wù)中的數(shù)據(jù)更新,只需要實(shí)時(shí)監(jiān)控配置中心中目標(biāo)節(jié)點(diǎn)的變化獲知數(shù)據(jù)有更新。這樣,各個(gè)服務(wù)實(shí)例直接根據(jù)變更的目錄節(jié)點(diǎn)從數(shù)據(jù)庫中直接加載變更后的配置數(shù)據(jù)到內(nèi)存即可。因此,本發(fā)明無論應(yīng)用服務(wù)器的多少,都可以保證進(jìn)行配置數(shù)據(jù)的同步,使得配置數(shù)據(jù)添加以及同步更加靈活,同時(shí)也可以保證新增應(yīng)用服務(wù)器的時(shí)候在上線之時(shí)能夠及時(shí)獲取到數(shù)據(jù)庫中的最新配置數(shù)據(jù)。
本發(fā)明實(shí)施例還提供了一種配置數(shù)據(jù)的同步裝置,用于配置服務(wù)器中,如圖5所示,具體包括如下步驟:
發(fā)送模塊51,用于根據(jù)應(yīng)用服務(wù)器的業(yè)務(wù)配置請(qǐng)求,向應(yīng)用服務(wù)器發(fā)送所需配置數(shù)據(jù)。
配置服務(wù)器中包括數(shù)據(jù)庫和配置中心;其中,數(shù)據(jù)庫中預(yù)先配置了服務(wù)實(shí)例所需的配置數(shù)據(jù)。配置中心中存儲(chǔ)了各個(gè)配置數(shù)據(jù)的目錄節(jié)點(diǎn),即存儲(chǔ)的路徑。
其中,配置服務(wù)器在啟動(dòng)時(shí),判斷配置中心是否存在遠(yuǎn)程目錄節(jié)點(diǎn);
若存在,則直接在數(shù)據(jù)庫對(duì)應(yīng)的位置存儲(chǔ)配置數(shù)據(jù)即可;
若不存在,則需要配置中心創(chuàng)建遠(yuǎn)程目錄節(jié)點(diǎn)
在存儲(chǔ)配置數(shù)據(jù)時(shí),需將配置數(shù)據(jù)的目錄節(jié)點(diǎn)保存至配置中心中。若當(dāng)前不存在目錄節(jié)點(diǎn),則需要配置中心創(chuàng)建遠(yuǎn)程目錄節(jié)點(diǎn);若不存在對(duì)應(yīng)的目錄節(jié)點(diǎn),則直接保存至該目錄節(jié)點(diǎn)中即可。
其中,在應(yīng)用服務(wù)器啟動(dòng)具體的服務(wù)實(shí)例中,會(huì)發(fā)送業(yè)務(wù)配置請(qǐng)求。配置服務(wù)器根據(jù)業(yè)務(wù)配置請(qǐng)求中所需的配置信息,從數(shù)據(jù)庫中獲取后,并發(fā)送至應(yīng)用服務(wù)器中。
同步模塊52,用于當(dāng)檢測到配置數(shù)據(jù)有數(shù)據(jù)更新時(shí),更新配置數(shù)據(jù)對(duì)應(yīng)的目錄節(jié)點(diǎn),并由發(fā)送模塊51向應(yīng)用服務(wù)器發(fā)送同步通知。
在該步驟中,配置服務(wù)器檢測數(shù)據(jù)庫中的配置數(shù)據(jù)是否有更新。
具體地,在用戶修改配置數(shù)據(jù)后并保存,配置服務(wù)器當(dāng)檢測到保存指令后,檢測數(shù)據(jù)庫中變化的具體的配置數(shù)據(jù);
當(dāng)檢測到某一位置的配置數(shù)據(jù)發(fā)生變化時(shí),則需要獲取該配置數(shù)據(jù)所對(duì)應(yīng)的配置中心的目錄節(jié)點(diǎn),并修改該配置中心的目錄節(jié)點(diǎn)。
進(jìn)一步地,該方法還包括接收模塊53,用于接收應(yīng)用服務(wù)器的注冊請(qǐng)求;其中,注冊請(qǐng)求中攜帶應(yīng)用服務(wù)器的標(biāo)識(shí);
同步模塊52,還用于當(dāng)檢測到配置數(shù)據(jù)有數(shù)據(jù)更新時(shí),更新配置數(shù)據(jù)對(duì)應(yīng)的目錄節(jié)點(diǎn),并根據(jù)標(biāo)識(shí)向?qū)?yīng)的應(yīng)用服務(wù)器發(fā)送同步通知。
也就是說,本發(fā)明實(shí)施例中,一旦檢測到配置數(shù)據(jù)發(fā)生更新時(shí),則向配置中心注冊的應(yīng)用服務(wù)器發(fā)送同步通知,確保應(yīng)用服務(wù)器能夠及時(shí)獲取變更通知,并及時(shí)讀取新的配置數(shù)據(jù)并加載到內(nèi)存當(dāng)中。
綜上所述,本發(fā)明所提供配置數(shù)據(jù)的同步方法及裝置,每臺(tái)應(yīng)用服務(wù)器就會(huì)收到配置信息變更通知,然后從數(shù)據(jù)庫獲取到最新的數(shù)據(jù)庫內(nèi)容并應(yīng)用到系統(tǒng)中,減少了數(shù)據(jù)庫變更需要重新修改配置信息并進(jìn)行服務(wù)實(shí)例重啟的動(dòng)作,或者避免手工同步各個(gè)服務(wù)實(shí)例的API接口,減少人工介入和出錯(cuò)率。此外,無需定時(shí)輪詢載數(shù)據(jù)庫內(nèi)容,可以有效減少數(shù)據(jù)庫連接數(shù)造成負(fù)擔(dān);無需對(duì)數(shù)據(jù)進(jìn)行任何特殊處理,且簡單易行;無需定時(shí)監(jiān)控?cái)?shù)據(jù)庫的語句更新,具有較強(qiáng)的普遍性。
需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。
上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。