對服務(wù)器集群進行配置的方法及配置中心服務(wù)器的制造方法
【專利摘要】本發(fā)明公開了對服務(wù)器集群進行配置的方法及配置中心服務(wù)器,其中,該方法包括:判斷信號處理函數(shù)是否為預(yù)設(shè)退出值,如果是,則退出;否則:確定接收到來自待配置服務(wù)器的配置請求;從共享內(nèi)存獲取寫鎖,從數(shù)據(jù)庫獲取配置信息,寫入共享內(nèi)存中,釋放寫鎖;若在獲取寫鎖與釋放寫鎖之間接收退出信號,則將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值;從共享內(nèi)存獲取讀鎖,從共享內(nèi)存中讀取配置信息,下發(fā)讀取的配置信息,釋放讀鎖,返回執(zhí)行所述判斷信號處理函數(shù)是否為預(yù)設(shè)退出值的步驟;若在獲取讀鎖與釋放讀鎖之間接收退出信號,則將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值。本發(fā)明方案能夠避免異常退出而導(dǎo)致死鎖,實現(xiàn)將配置信息成功下發(fā)給待配置服務(wù)器。
【專利說明】對服務(wù)器集群進行配置的方法及配置中心服務(wù)器
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及服務(wù)器配置技術(shù),尤其涉及對服務(wù)器集群進行配置的方法及配置中心 服務(wù)器。
【背景技術(shù)】
[0002] 目前,隨著互聯(lián)網(wǎng)業(yè)務(wù)的普及,用戶量極大增加;針對某項業(yè)務(wù),單臺服務(wù)器已經(jīng) 遠遠不能提供服務(wù),基于此,大規(guī)模的服務(wù)器集群應(yīng)運而生。服務(wù)器集群指互聯(lián)網(wǎng)業(yè)務(wù)中, 協(xié)作完成一個或者多個特定功能的一批服務(wù)器。對服務(wù)器集群的所有服務(wù)器的配置由配置 系統(tǒng)完成,配置系統(tǒng)的配置中心服務(wù)器從數(shù)據(jù)庫中讀取配置信息,下發(fā)給服務(wù)器。
[0003] 現(xiàn)有技術(shù)中對服務(wù)器集群進行配置的方案包括:配置中心服務(wù)器接收來自待配置 服務(wù)器的配置請求后,從本地共享內(nèi)存獲取寫鎖,從配置中心的數(shù)據(jù)庫獲取配置信息寫入 共享內(nèi)存中,釋放寫鎖;獲取讀鎖,從本地共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā) 送給待配置服務(wù)器,釋放讀鎖。
[0004] 寫鎖和讀鎖都存儲在配置中心服務(wù)器的共享內(nèi)存中。讀鎖和寫鎖用于linux進程 間的通信,讀鎖也叫做共享鎖,寫鎖也叫做獨占鎖;讀鎖和寫鎖常合稱為讀寫鎖,當(dāng)讀寫鎖 以讀模式鎖住時,是以共享模式鎖住的,當(dāng)讀寫鎖以寫模式鎖住時,是以獨占模式鎖住的。 也即是,多個進程或線程,可以同時處于讀模式下的讀寫鎖,而當(dāng)處于寫模式下的讀寫鎖 時,只有一個進程是獨占的。
[0005] 上述流程中,寫鎖和釋放寫鎖之間,以及讀鎖和釋放讀鎖之間的處理時間較長,也 就是寫入數(shù)據(jù)和讀取數(shù)據(jù)需要較長的時間。一旦在寫鎖和釋放寫鎖之間出現(xiàn)異常,接收到 退出信號,進程將退出,將來不及釋放共享內(nèi)存中保存的寫鎖;如果后續(xù)配置中心服務(wù)器接 收到來自待配置服務(wù)器的配置請求,將導(dǎo)致死鎖,從數(shù)據(jù)庫獲取配置信息后將無法寫入共 享內(nèi)存,后續(xù)也就無法從共享內(nèi)存中讀取配置信息并下發(fā)給待配置服務(wù)器。類似地,一旦在 讀鎖和釋放讀鎖之間出現(xiàn)異常,進程將退出,將來不及釋放共享內(nèi)存中保存的讀鎖;如果后 續(xù)配置中心服務(wù)器接收到來自待配置服務(wù)器的配置請求,卻沒有可用的讀鎖,將導(dǎo)致死鎖, 無法將配置信息下發(fā)給待配置服務(wù)器。
[0006] 綜上,現(xiàn)有對服務(wù)器集群進行配置的方案存在以下缺陷:出現(xiàn)異常退出時,將導(dǎo)致 死鎖,無法將配置信息成功下發(fā)給待配置服務(wù)器。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明提供了一種對服務(wù)器集群進行配置的方法,該方法能夠避免異常退出而導(dǎo) 致死鎖,實現(xiàn)將配置信息成功下發(fā)給待配置服務(wù)器。
[0008] 本發(fā)明提供了一種對服務(wù)器集群進行配置的配置中心服務(wù)器,該配置中心服務(wù)器 能夠避免異常退出而導(dǎo)致死鎖,實現(xiàn)將配置信息成功下發(fā)給待配置服務(wù)器。
[0009] -種對服務(wù)器集群進行配置的方法,設(shè)置信號處理函數(shù),該方法包括:
[0010] 判斷信號處理函數(shù)是否為預(yù)設(shè)退出值,如果是,則退出,結(jié)束流程;否則: toon] 確定接收到來自待配置服務(wù)器的配置請求;
[0012] 從共享內(nèi)存獲取寫鎖,從數(shù)據(jù)庫獲取配置信息,寫入共享內(nèi)存中,釋放寫鎖;若在 獲取寫鎖與釋放寫鎖之間接收退出信號,則將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值;
[0013] 從共享內(nèi)存獲取讀鎖,從共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā)送給待 配置服務(wù)器,釋放讀鎖,返回執(zhí)行所述判斷信號處理函數(shù)是否為預(yù)設(shè)退出值的步驟;若在獲 取讀鎖與釋放讀鎖之間接收退出信號,則將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值。
[0014] 一種對服務(wù)器集群進行配置的配置中心服務(wù)器,該配置中心服務(wù)器包括設(shè)置單 元、函數(shù)判斷單元、配置請求處理單元、寫入處理單元和讀取處理單元;
[0015] 所述設(shè)置單元,設(shè)置信號處理函數(shù),并接收來自所述寫入處理單元和所述讀取處 理單元的設(shè)置指令,將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值;
[0016] 所述函數(shù)判斷單元,判斷信號處理函數(shù)是否為預(yù)設(shè)退出值,如果是,則不向所述配 置請求處理單元發(fā)送啟動指令;否則,向所述配置請求處理單元發(fā)送啟動指令;
[0017] 所述配置請求處理單元,接收來自所述函數(shù)判斷單元的啟動指令,確定接收到來 自待配置服務(wù)器的配置請求,向所述寫入處理單元發(fā)送寫入指令;
[0018] 所述寫入處理單元,接收來自所述配置請求處理單元的寫入指令后,從本地共享 內(nèi)存獲取寫鎖,從數(shù)據(jù)庫獲取配置信息,寫入共享內(nèi)存中,釋放寫鎖,向所述讀取處理單元 發(fā)送讀取指令;若在獲取寫鎖與釋放寫鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置 指令;
[0019] 所述讀取處理單元,接收來自所述寫入處理單元的讀取指令,從共享內(nèi)存獲取讀 鎖,從共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā)送給待配置服務(wù)器,釋放讀鎖;若在 獲取讀鎖與釋放讀鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置指令。
[0020] 從上述方案可以看出,本發(fā)明中,先對信號處理函數(shù)進行判斷,如果信號處理函數(shù) 不為預(yù)設(shè)退出值,且接收到來自待配置服務(wù)器的配置請求,則從共享內(nèi)存獲取寫鎖,從數(shù)據(jù) 庫獲取配置信息,寫入共享內(nèi)存中,釋放寫鎖;若在獲取寫鎖與釋放寫鎖之間接收退出信 號,則將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值;然后,從共享內(nèi)存獲取讀鎖,從共享內(nèi)存中讀取 配置信息,將讀取的配置信息發(fā)送給待配置服務(wù)器,釋放讀鎖,返回執(zhí)行所述判斷信號處理 函數(shù)是否為預(yù)設(shè)退出值的步驟;若在獲取讀鎖與釋放讀鎖之間接收退出信號,則將信號處 理函數(shù)設(shè)置為預(yù)設(shè)退出值。對于在寫鎖和釋放寫鎖之間,以及讀鎖和釋放讀鎖之間接收到 退出信號的情況,本發(fā)明結(jié)合信號處理函數(shù),在釋放完寫鎖和讀鎖之后才執(zhí)行退出信號,避 免了因異常退出而導(dǎo)致的死鎖,實現(xiàn)了將配置信息成功下發(fā)給待配置服務(wù)器。
【專利附圖】
【附圖說明】
[0021] 圖1為本發(fā)明對服務(wù)器集群進行配置的方法示意性流程圖;
[0022] 圖2為本發(fā)明對服務(wù)器集群進行配置的方法流程圖實例;
[0023] 圖3為本發(fā)明對服務(wù)器集群進行配置的配置中心服務(wù)器的結(jié)構(gòu)示意圖。
【具體實施方式】
[0024] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下面結(jié)合實施例和附圖,對本 發(fā)明進一步詳細說明。
[0025] 對于在寫鎖和釋放寫鎖之間,以及讀鎖和釋放讀鎖之間接收到退出信號的情況, 本發(fā)明結(jié)合信號處理函數(shù),在釋放完寫鎖和讀鎖之后才執(zhí)行退出信號,避免了因異常退出 而導(dǎo)致的死鎖。參見圖1,為本發(fā)明對服務(wù)器集群進行配置的方法示意性流程圖,本發(fā)明方 法預(yù)先設(shè)置信號處理函數(shù),初始時,可將信號處理函數(shù)設(shè)置默認(rèn)值,例如為〇 ;后續(xù)流程中, 如果在獲取寫鎖與釋放寫鎖之間,或者在獲取讀鎖與釋放讀鎖之間接收退出信號,則將信 號處理函數(shù)設(shè)置為預(yù)設(shè)退出值,例如為1。
[0026] 圖1的流程包括以下步驟:
[0027] 步驟101,判斷信號處理函數(shù)是否為預(yù)設(shè)退出值,如果是,則退出,結(jié)束流程;否 貝1J,執(zhí)行步驟102。
[0028] 對信號處理函數(shù)的判斷可隨機執(zhí)行,也可周期性地執(zhí)行。
[0029] 步驟102,確定接收到來自待配置服務(wù)器的配置請求。
[0030] 判斷出信號函數(shù)不為預(yù)設(shè)退出值時,如果確定出沒有接收到來自待配置服務(wù)器的 配置請求,可返回執(zhí)行步驟101,直到接收到來自待配置服務(wù)器的配置請求。
[0031] 步驟103,從共享內(nèi)存獲取寫鎖,從數(shù)據(jù)庫獲取配置信息,寫入共享內(nèi)存中,釋放寫 鎖;若在獲取寫鎖與釋放寫鎖之間接收退出信號,則將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值。
[0032] 對于配置信息沒有更新,仍為舊版的情況,無需向本地的共享內(nèi)存重新寫入配置 信息,可直接執(zhí)行步驟104。為了簡化流程,本步驟之前,還可具體包括:判斷配置信息是否 有更新,如果有,則執(zhí)行步驟103 ;否則,執(zhí)行步驟104。共享內(nèi)存中配置信息是否有更新可 通過標(biāo)注實現(xiàn),具體如:如果配置中心的數(shù)據(jù)庫存儲的配置信息進行了更新,則向配置中心 服務(wù)器發(fā)送帶有最新版本號的更新指示,配置中心服務(wù)器接收更新指示后確定配置信息有 更新。
[0033] 步驟104,從共享內(nèi)存獲取讀鎖,從共享內(nèi)存中讀取配置信息,將讀取的配置信息 發(fā)送給待配置服務(wù)器,釋放讀鎖,返回執(zhí)行步驟101 ;若在獲取讀鎖與釋放讀鎖之間接收退 出信號,則將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值。
[0034] 由于服務(wù)器集群中包含較多服務(wù)器,且配置信息容量大,每次為待配置服務(wù)器下 發(fā)配置信息將占用加大的流量資源。本發(fā)明中,為了改進該缺陷,可在步驟102的配置請求 中攜帶待配置服務(wù)器當(dāng)前使用的配置信息的版本號,配置中心服務(wù)器接收配置請求后,進 行版本號比較,如果版本號不相同,才進行配置信息的下發(fā);具體地,可采用下述兩種實現(xiàn) 方式:
[0035] 方式一,圖1流程的步驟104之前,該方法還包括:判斷配置請求包含的版本號與 共享內(nèi)存中配置信息的版本號是否相同,如果是,則向待配置服務(wù)器反饋無需更新的響應(yīng) 消息,否則,執(zhí)行步驟104。
[0036] 方式二,步驟104獲取讀鎖之后,該方法還包括:判斷配置請求包含的版本號與共 享內(nèi)存中配置信息的版本號是否相同,如果是,則向待配置服務(wù)器反饋無需更新的響應(yīng)消 息,釋放讀鎖,否則,執(zhí)行步驟104中所述從本地共享內(nèi)存中獲取配置信息的步驟。
[0037] 采用本發(fā)明方案,對于在寫鎖和釋放寫鎖之間,以及讀鎖和釋放讀鎖之間接收到 退出信號的情況,本發(fā)明結(jié)合信號處理函數(shù),在釋放完寫鎖和讀鎖之后才執(zhí)行退出信號,避 免了因異常退出而導(dǎo)致的死鎖,實現(xiàn)了將配置信息成功下發(fā)給待配置服務(wù)器。
[0038] 下面通過圖2,對本發(fā)明為服務(wù)器集群進行配置的方法進行實例說明,該實例預(yù)先 設(shè)置信號處理函數(shù),圖2的流程包括以下步驟:
[0039] 步驟201,判斷信號處理函數(shù)是否為預(yù)設(shè)退出值,如果是,則退出,結(jié)束流程;否則 執(zhí)行步驟202。
[0040] 將信號處理函數(shù)的默認(rèn)值設(shè)置為0,預(yù)設(shè)退出值設(shè)置為1。
[0041] 信號處理函數(shù)的設(shè)置與關(guān)于信號處理函數(shù)是否為預(yù)設(shè)退出值的判斷,兩者是異步 的。當(dāng)退出信號發(fā)生時,會立即對信號處理函數(shù)進行設(shè)置;而對信號處理函數(shù)是否為預(yù)設(shè)退 出值的判斷,可周期性地或隨機地執(zhí)行。具體實現(xiàn)時,信號處理函數(shù)(g_iShutDown )可采用 下述配置方式:
[0042] int g_iShutDown = 0; --------將 g_iShutDown 設(shè)置為 0 void SetShutDownFlag(int signo) { if(signo == SIGQUIT) { printf("catch SIGQUIT!\n〃); g_iShutDown = 1; ]--如果捕獲到設(shè)置指令SIGQUIT,則將gJShutDown設(shè)置為1 if(signo == SIGUSR1) { printf(〃catch SIGUSR1!\n〃); g-iShutDown = 1; }--如i捕獲到設(shè)置指令SIGQUIT1,則將gJShutDown設(shè)置為1 }
[0043] 其中,SIGQUIT在為寫鎖與釋放寫鎖之間接收到退出信號時的設(shè)置指令,SIGQUIT1 為在讀鎖與釋放讀鎖之間接收到退出信號時的設(shè)置指令。
[0044] 步驟202,判斷是否接收到來自待配置服務(wù)器的配置請求,如果是,則執(zhí)行步驟 203 ;否則,返回執(zhí)行步驟201。
[0045] 配置請求中包含版本號,本步驟中,如果沒有接收到配置請求,則繼續(xù)對信號處理 函數(shù)進行判斷。
[0046] 步驟203,判斷配置信息是否有更新,如果是,則執(zhí)行步驟204,否則執(zhí)行步驟208。
[0047] 配置信息由工作人員錄入配置中心的數(shù)據(jù)庫中,之后工作人員可對數(shù)據(jù)庫中的配 置信息進行更新,更新后,數(shù)據(jù)庫向配置中心服務(wù)器發(fā)送包含最新版本號的更新指示,配置 中心服務(wù)器將更新項設(shè)置為已更新。本步驟中,如果配置中心服務(wù)器獲知更新項設(shè)置為已 更新,則確定出配置信息有更新。
[0048] 步驟204,從共享內(nèi)存中獲取寫鎖。
[0049] 寫鎖和讀鎖都保存在配置中心服務(wù)器的共享內(nèi)存中。
[0050] 寫鎖和讀鎖都存儲在配置中心服務(wù)器的共享內(nèi)存中。讀鎖和寫鎖用于linux進程 間的通信,讀鎖也叫做共享鎖,寫鎖也叫做獨占鎖;讀鎖和寫鎖常合稱為讀寫鎖,當(dāng)讀寫鎖 以讀模式鎖住時,是以共享模式鎖住的,當(dāng)讀寫鎖以寫模式鎖住時,是以獨占模式鎖住的。 也即是,多個進程或線程,可以同時處于讀模式下的讀寫鎖,而當(dāng)處于寫模式下的讀寫鎖 時,只有一個進程是獨占的。
[0051] 步驟205,從數(shù)據(jù)庫中獲取配置信息,將獲取的配置信息寫入共享內(nèi)存。
[0052] 寫鎖進行寫入的過程中,不能進行讀取,避免讀取的數(shù)據(jù)不完整。將獲取的配置信 息寫入共享內(nèi)存,將覆蓋共享內(nèi)存中之前存儲的配置信息,以進行更新。
[0053] 步驟206,接收退出信號,將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值。
[0054] 步驟207,釋放寫鎖。
[0055] 步驟208,從共享內(nèi)存中獲取讀鎖。
[0056] 具體實踐時,可采用Fork子進程實現(xiàn)讀鎖、版本號判斷、數(shù)據(jù)讀取、數(shù)據(jù)下發(fā)以及 釋放讀鎖的步驟。
[0057] 步驟209,判斷配置請求包含的版本號與共享內(nèi)存中配置信息的版本號是否相同, 如果是,則向待配置服務(wù)器反饋無需更新的響應(yīng)消息,否則,從共享內(nèi)存中讀取配置信息, 將讀取的配置信息發(fā)送給待配置服務(wù)器。
[0058] 步驟210,釋放讀鎖,返回執(zhí)行步驟201。
[0059] 執(zhí)行步驟201時,由于步驟206中已經(jīng)信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值,則執(zhí)行退 出,結(jié)束流程。
[0060] 采用上述流程方案,如果在步驟204寫鎖和步驟207釋放寫鎖之間,步驟208讀鎖 和步驟210釋放讀鎖之間接收到退出信號,將暫時不對退出信號進行響應(yīng);將繼續(xù)執(zhí)行后 續(xù)的步驟,直到釋放完寫鎖和讀鎖之后,再執(zhí)行退出。這樣,對于在寫鎖和釋放寫鎖之間, 以及讀鎖和釋放讀鎖之間接收到退出信號的情況,可在釋放完寫鎖和讀鎖之后進行退出, 避免了現(xiàn)有技術(shù)中在這種情況下的死鎖;并且,通過對版本號進行比較,減少了下發(fā)的數(shù)據(jù) 量,節(jié)省了資源,簡化了流程。
[0061] 配置中心包括配置中心服務(wù)器和數(shù)據(jù)庫,數(shù)據(jù)庫用于存儲配置信息,在需要時,配 置中心服務(wù)器可從數(shù)據(jù)庫獲取配置信息。參見圖3,為本發(fā)明配置中心服務(wù)器的結(jié)構(gòu)示意 圖,其包括設(shè)置單元、函數(shù)判斷單元、配置請求處理單元、寫入處理單元和讀取處理單元; [0062] 所述設(shè)置單元,設(shè)置信號處理函數(shù),并接收來自所述寫入處理單元和所述讀取處 理單元的設(shè)置指令,將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值;
[0063] 所述函數(shù)判斷單元,判斷信號處理函數(shù)是否為預(yù)設(shè)退出值,如果是,則不向所述配 置請求處理單元發(fā)送啟動指令;否則,向所述配置請求處理單元發(fā)送啟動指令;
[0064] 所述配置請求處理單元,接收來自所述函數(shù)判斷單元的啟動指令,確定接收到來 自待配置服務(wù)器的配置請求,向所述寫入處理單元發(fā)送寫入指令;
[0065] 所述寫入處理單元,接收來自所述配置請求處理單元的寫入指令后,從本地共享 內(nèi)存獲取寫鎖,從數(shù)據(jù)庫獲取配置信息,寫入共享內(nèi)存中,釋放寫鎖,向所述讀取處理單元 發(fā)送讀取指令;若在獲取寫鎖與釋放寫鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置 指令;
[0066] 所述讀取處理單元,接收來自所述寫入處理單元的讀取指令,從共享內(nèi)存獲取讀 鎖,從共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā)送給待配置服務(wù)器,釋放讀鎖;若在 獲取讀鎖與釋放讀鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置指令。
[0067] 較佳地,所述配置請求包含版本號,所述讀取處理單元包括第一版本號判斷子單 元和第一讀取子單元;
[0068] 所述第一版本號判斷子單元,接收來自所述寫入處理單元的讀取指令,判斷來自 待配置服務(wù)器的配置請求包含的版本號與共享內(nèi)存中配置信息的版本號是否相同,如果 是,則向待配置服務(wù)器反饋無需更新的響應(yīng)消息;否則向所述第一讀取子單元發(fā)送啟動指 令;
[0069] 所述第一讀取子單元,接收來自所述版本號判斷子單元的啟動指令,從共享內(nèi)存 獲取讀鎖,從共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā)送給待配置服務(wù)器,釋放讀 鎖;若在獲取讀鎖與釋放讀鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置指令。
[0070] 較佳地,所述配置請求包含版本號,所述讀取處理單元包括第二版本號判斷子單 元和第二讀取子單元;
[0071] 所述第二讀取子單元,接收來自所述寫入處理單元的讀取指令,從共享內(nèi)存獲取 讀鎖,向所述第二版本號判斷子單元發(fā)送版本號判斷指令;接收來自所述第二版本號判斷 子單元的配置信息讀取指令,從共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā)送給待配 置服務(wù)器,釋放讀鎖;若在獲取讀鎖與釋放讀鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送 設(shè)置指令;
[0072] 所述第二版本號判斷子單元,接收來自所述第二讀取子單元的版本號判斷指令, 判斷來自待配置服務(wù)器的配置請求包含的版本號與共享內(nèi)存中配置信息的版本號是否相 同,如果是,則向待配置服務(wù)器反饋無需更新的響應(yīng)消息,釋放讀鎖;否則向所述第二讀取 子單元發(fā)送配置信息讀取指令。
[0073] 較佳地,所述寫入處理單元包括更新判斷子單元和寫入子單元;
[0074] 所述更新判斷子單元,接收來自所述配置請求處理單元的寫入指令后,判斷配置 信息是否有更新,如果有,則向所述寫入子單元發(fā)送啟動指令,否則,向所述讀取處理單元 發(fā)送讀取指令;
[0075] 所述寫入子單元,接收來自所述更新判斷子單元的啟動指令,從共享內(nèi)存獲取寫 鎖,從數(shù)據(jù)庫獲取配置信息,寫入共享內(nèi)存中,釋放寫鎖,向所述讀取處理單元發(fā)送讀取指 令;若在獲取寫鎖與釋放寫鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置指令。
[0076] 以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。
【權(quán)利要求】
1. 一種對服務(wù)器集群進行配置的方法,其特征在于,設(shè)置信號處理函數(shù),該方法包括: 判斷信號處理函數(shù)是否為預(yù)設(shè)退出值,如果是,則退出,結(jié)束流程;否則: 確定接收到來自待配置服務(wù)器的配置請求; 從共享內(nèi)存獲取寫鎖,從數(shù)據(jù)庫獲取配置信息,寫入共享內(nèi)存中,釋放寫鎖;若在獲取 寫鎖與釋放寫鎖之間接收退出信號,則將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值; 從共享內(nèi)存獲取讀鎖,從共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā)送給待配置 服務(wù)器,釋放讀鎖,返回執(zhí)行所述判斷信號處理函數(shù)是否為預(yù)設(shè)退出值的步驟;若在獲取讀 鎖與釋放讀鎖之間接收退出信號,則將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值。
2. 如權(quán)利要求1所述的方法,其特征在于,所述配置請求包含版本號,所述獲取讀鎖之 前,該方法還包括: 判斷配置請求包含的版本號與共享內(nèi)存中配置信息的版本號是否相同,如果是,則向 待配置服務(wù)器反饋無需更新的響應(yīng)消息,否則,執(zhí)行所述獲取讀鎖的步驟。
3. 如權(quán)利要求1所述的方法,其特征在于,所述配置請求包含版本號,所述獲取讀鎖之 后,該方法還包括: 判斷配置請求包含的版本號與共享內(nèi)存中配置信息的版本號是否相同,如果是,則向 待配置服務(wù)器反饋無需更新的響應(yīng)消息,釋放讀鎖,否則,執(zhí)行所述從本地共享內(nèi)存中獲取 配置信息的步驟。
4. 如權(quán)利要求1所述的方法,其特征在于,所述獲取寫鎖之前,該方法還包括:判斷配 置信息是否有更新,如果有,則執(zhí)行所述獲取寫鎖的步驟;否則,執(zhí)行所述獲取讀鎖的步驟。
5. 如權(quán)利要求1所述的方法,其特征在于,所述判斷信號處理函數(shù)是否為預(yù)設(shè)退出值 為:周期性地判斷信號處理函數(shù)是否為預(yù)設(shè)退出值。
6. 如權(quán)利要求1至5中任一項所述的方法,其特征在于,判斷出信號函數(shù)不為預(yù)設(shè)退出 值時,如果確定出沒有接收到來自待配置服務(wù)器的配置請求,則返回執(zhí)行所述判斷信號函 數(shù)是否為預(yù)設(shè)退出值的步驟。
7. -種對服務(wù)器集群進行配置的配置中心服務(wù)器,其特征在于,該配置中心服務(wù)器包 括設(shè)置單元、函數(shù)判斷單元、配置請求處理單元、寫入處理單元和讀取處理單元; 所述設(shè)置單元,設(shè)置信號處理函數(shù),并接收來自所述寫入處理單元和所述讀取處理單 元的設(shè)置指令,將信號處理函數(shù)設(shè)置為預(yù)設(shè)退出值; 所述函數(shù)判斷單元,判斷信號處理函數(shù)是否為預(yù)設(shè)退出值,如果是,則不向所述配置請 求處理單元發(fā)送啟動指令;否則,向所述配置請求處理單元發(fā)送啟動指令; 所述配置請求處理單元,接收來自所述函數(shù)判斷單元的啟動指令,確定接收到來自待 配置服務(wù)器的配置請求,向所述寫入處理單元發(fā)送寫入指令; 所述寫入處理單元,接收來自所述配置請求處理單元的寫入指令后,從本地共享內(nèi)存 獲取寫鎖,從數(shù)據(jù)庫獲取配置信息,寫入共享內(nèi)存中,釋放寫鎖,向所述讀取處理單元發(fā)送 讀取指令;若在獲取寫鎖與釋放寫鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置指 令; 所述讀取處理單元,接收來自所述寫入處理單元的讀取指令,從共享內(nèi)存獲取讀鎖,從 共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā)送給待配置服務(wù)器,釋放讀鎖;若在獲取讀 鎖與釋放讀鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置指令。
8. 如權(quán)利要求7所述的配置中心服務(wù)器,其特征在于,所述配置請求包含版本號,所述 讀取處理單元包括第一版本號判斷子單元和第一讀取子單元; 所述第一版本號判斷子單元,接收來自所述寫入處理單元的讀取指令,判斷來自待配 置服務(wù)器的配置請求包含的版本號與共享內(nèi)存中配置信息的版本號是否相同,如果是,則 向待配置服務(wù)器反饋無需更新的響應(yīng)消息;否則向所述第一讀取子單元發(fā)送啟動指令; 所述第一讀取子單元,接收來自所述版本號判斷子單元的啟動指令,從共享內(nèi)存獲取 讀鎖,從共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā)送給待配置服務(wù)器,釋放讀鎖;若 在獲取讀鎖與釋放讀鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置指令。
9. 如權(quán)利要求7所述的配置中心服務(wù)器,其特征在于,所述配置請求包含版本號,所述 讀取處理單元包括第二版本號判斷子單元和第二讀取子單元; 所述第二讀取子單元,接收來自所述寫入處理單元的讀取指令,從共享內(nèi)存獲取讀鎖, 向所述第二版本號判斷子單元發(fā)送版本號判斷指令;接收來自所述第二版本號判斷子單元 的配置信息讀取指令,從共享內(nèi)存中讀取配置信息,將讀取的配置信息發(fā)送給待配置服務(wù) 器,釋放讀鎖;若在獲取讀鎖與釋放讀鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置指 令; 所述第二版本號判斷子單元,接收來自所述第二讀取子單元的版本號判斷指令,判斷 來自待配置服務(wù)器的配置請求包含的版本號與共享內(nèi)存中配置信息的版本號是否相同,如 果是,則向待配置服務(wù)器反饋無需更新的響應(yīng)消息,釋放讀鎖;否則向所述第二讀取子單元 發(fā)送配置信息讀取指令。
10. 如權(quán)利要求7、8或9所述的配置中心服務(wù)器,其特征在于,所述寫入處理單元包括 更新判斷子單元和寫入子單元; 所述更新判斷子單元,接收來自所述配置請求處理單元的寫入指令后,判斷配置信息 是否有更新,如果有,則向所述寫入子單元發(fā)送啟動指令,否則,向所述讀取處理單元發(fā)送 讀取指令; 所述寫入子單元,接收來自所述更新判斷子單元的啟動指令,從共享內(nèi)存獲取寫鎖,從 數(shù)據(jù)庫獲取配置信息,寫入共享內(nèi)存中,釋放寫鎖,向所述讀取處理單元發(fā)送讀取指令;若 在獲取寫鎖與釋放寫鎖之間接收退出信號,則向所述設(shè)置單元發(fā)送設(shè)置指令。
【文檔編號】G06F15/177GK104063355SQ201310091366
【公開日】2014年9月24日 申請日期:2013年3月21日 優(yōu)先權(quán)日:2013年3月21日
【發(fā)明者】邢玉東 申請人:騰訊科技(北京)有限公司