本申請(qǐng)涉及消息處理技術(shù)領(lǐng)域,具體而言,涉及服務(wù)器備災(zāi)系統(tǒng)及基于備災(zāi)系統(tǒng)的處理消息的方法。
背景技術(shù):
在速度和可靠性都有很高要求的消息處理技術(shù)領(lǐng)域,目前已經(jīng)演化出很多高效的技術(shù)手段,比如基于udp廣播或組播的通信協(xié)議(可靠組播),消息補(bǔ)發(fā)機(jī)制,主備部署等等,可以在保證高可靠性的同時(shí)達(dá)到很高的消息處理速度。但是由于消息的有狀態(tài)特性,可靠性的要求對(duì)消息處理的性能還存在一些約束。
相關(guān)技術(shù)中,為了使消息處理服務(wù)器達(dá)到高可靠性的要求,在面對(duì)服務(wù)器宕機(jī)時(shí),要求消息處理不重不漏,相關(guān)技術(shù)一般是部署主備兩臺(tái)物理服務(wù)器,有的還外加一臺(tái)仲裁服務(wù)器,并要求在主備服務(wù)器之間進(jìn)行頻繁嚴(yán)格的數(shù)據(jù)同步,保證主備機(jī)擁有相同的數(shù)據(jù)備份。為了同步消息數(shù)據(jù)和消息處理的狀態(tài),每個(gè)進(jìn)入系統(tǒng)的消息,都需要在主備服務(wù)器之間轉(zhuǎn)發(fā)一遍,相互確認(rèn)。
上述相關(guān)技術(shù)為了同步消息數(shù)據(jù)和消息處理的狀態(tài),以致于每個(gè)進(jìn)入服務(wù)器的消息,都要在主備服務(wù)器之間轉(zhuǎn)發(fā)一遍,會(huì)造成消息處理的速度下降。而且,因?yàn)橹鱾湎⑼酵ㄐ诺脑O(shè)計(jì),在備機(jī)宕機(jī)的情況下,原本完好的主機(jī),也會(huì)因?yàn)槭詹坏絺錂C(jī)對(duì)消息同步請(qǐng)求的響應(yīng)而暫停服務(wù),直到仲裁服務(wù)器確認(rèn)備機(jī)宕機(jī)后,才能恢復(fù)工作。另外,上述相關(guān)技術(shù)雖然對(duì)請(qǐng)求消息進(jìn)行了主備同步,但是往往忽略了對(duì)響應(yīng)消息進(jìn)行同步,在主服務(wù)器宕機(jī)后不能準(zhǔn)確判定響應(yīng)消息的處理狀態(tài),往往導(dǎo)致重發(fā)或者漏發(fā)響應(yīng)消息。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)公開(kāi)服務(wù)器備災(zāi)系統(tǒng)及基于備災(zāi)系統(tǒng)的處理消息的方法,使得消息處理的速度提高。
本發(fā)明的其他特性和優(yōu)點(diǎn)將通過(guò)下面的詳細(xì)描述變得顯然,或部分地通過(guò)本發(fā)明的實(shí)踐而習(xí)得。
根據(jù)本發(fā)明的一個(gè)方面,提供一種服務(wù)器備災(zāi)系統(tǒng),包括:
第一服務(wù)器、第二服務(wù)器、以及仲裁機(jī),所述第一服務(wù)器和所述第二服務(wù)器部署在同一網(wǎng)段以收發(fā)同一組播;
所述第一服務(wù)器和所述第二服務(wù)器同時(shí)監(jiān)聽(tīng)消息處理終端發(fā)送的請(qǐng)求消息組播、以及外部服務(wù)器發(fā)送的用于確收消息的回報(bào)消息組播,以維護(hù)數(shù)據(jù)的一致性;
所述仲裁機(jī)用于為所述第一服務(wù)器和所述第二服務(wù)器分配角色確定當(dāng)前主服務(wù)器和當(dāng)前備服務(wù)器,并在判斷當(dāng)前主服務(wù)器宕機(jī)之后控制主備切換。
根據(jù)一些實(shí)施例,所述第一服務(wù)器和所述第二服務(wù)器維護(hù)數(shù)據(jù)的一致性包括:
所述第一服務(wù)器和所述第二服務(wù)器同時(shí)監(jiān)聽(tīng)消息處理終端發(fā)送的請(qǐng)求消息組播以及外部服務(wù)器發(fā)送的用于確收消息的回報(bào)消息組播,并根據(jù)所接收的所述請(qǐng)求消息、以及所述回報(bào)消息分別各自維護(hù)三個(gè)隊(duì)列;
當(dāng)所述第一服務(wù)器為主服務(wù)器角色而所述第二服務(wù)器為備服務(wù)器角色時(shí),所述第一服務(wù)器通過(guò)第一隊(duì)列記錄接收但未發(fā)送的消息、通過(guò)第二隊(duì)列記錄已發(fā)送但未確收的消息、以及通過(guò)第三隊(duì)列用于記錄已確收的消息,所述第二服務(wù)器通過(guò)第五隊(duì)列記錄接收但未確收的消息、以及通過(guò)第六隊(duì)列記錄已確收的消息;
當(dāng)所述第二服務(wù)器為主服務(wù)器角色而所述第一服務(wù)器為備服務(wù)器角色時(shí),所述第二服務(wù)器通過(guò)第四隊(duì)列記錄接收但未發(fā)送的消息、通過(guò)第五隊(duì)列記錄已發(fā)送但未確收的消息、以及通過(guò)第六隊(duì)列用于記錄已確收的消息,所述第一服務(wù)器通過(guò)第二隊(duì)列記錄接收但未確收的消息、以及通過(guò)第三隊(duì)列記錄已確收的消息。
根據(jù)一些實(shí)施例,所述仲裁機(jī)用于:
當(dāng)判斷當(dāng)前備服務(wù)器宕機(jī),對(duì)當(dāng)前主服務(wù)器不作處理;以及
所述仲裁機(jī)若判斷所述當(dāng)前主服務(wù)器宕機(jī)之后,則控制所述當(dāng)前主服務(wù)器與所述當(dāng)前備服務(wù)器交換主備角色進(jìn)行主備切換。
根據(jù)一些實(shí)施例,所述仲裁機(jī)用于通過(guò)心跳信道監(jiān)控所述當(dāng)前所述主服務(wù)器和所述當(dāng)前所述備服務(wù)器是否宕機(jī)。
根據(jù)一些實(shí)施例,所述仲裁機(jī)用于通過(guò)心跳信道監(jiān)控所述當(dāng)前所述主服務(wù)器和所述當(dāng)前所述備服務(wù)器是否宕機(jī)包括:當(dāng)連續(xù)n次未收到所述當(dāng)前主服務(wù)器心跳,則判定所述當(dāng)前主服務(wù)器宕機(jī),當(dāng)連續(xù)m次未收到所述當(dāng)前備服務(wù)器心跳,則判定所述當(dāng)前備服務(wù)器宕機(jī),其中n、m為自然數(shù)。
根據(jù)一些實(shí)施例,所述當(dāng)前主服務(wù)器還用于在接收到回報(bào)消息之后,發(fā)送響應(yīng)消息組播;
所述當(dāng)前備服務(wù)器還用于監(jiān)聽(tīng)所述響應(yīng)消息組播,根據(jù)所述響應(yīng)消息組播確定消息是否確收。
根據(jù)一些實(shí)施例,所述仲裁機(jī)用于為所述第一服務(wù)器和所述第二服務(wù)器分配角色包括:所述仲裁機(jī)用于為所述第一服務(wù)器與所述第二服務(wù)器中先啟動(dòng)者分配主服務(wù)器角色。
根據(jù)一些實(shí)施例,所述方法還包括在主備切換之后,所述當(dāng)前主服務(wù)器還用于依次將用于記錄已發(fā)送但未確收的消息的隊(duì)列中的消息發(fā)送給所述外部服務(wù)器。
根據(jù)本發(fā)明的另一方面,提供一種基于備災(zāi)系統(tǒng)的處理消息的方法,所述備災(zāi)系統(tǒng)包括第一服務(wù)器、第二服務(wù)器、以及仲裁機(jī),所述第一服務(wù)器和所述第二服務(wù)器部署在同一網(wǎng)段以收發(fā)同一組播;
所述第一服務(wù)器和所述第二服務(wù)器通過(guò)同時(shí)監(jiān)聽(tīng)消息處理終端發(fā)送的請(qǐng)求消息組播、以及外部服務(wù)器發(fā)送的用于確收消息的回報(bào)消息組播維護(hù)數(shù)據(jù)的一致性;
所述仲裁機(jī)為所述第一服務(wù)器和所述第二服務(wù)器分配角色確定當(dāng)前主服務(wù)器和當(dāng)前備服務(wù)器,并在判斷當(dāng)前主服務(wù)器宕機(jī)之后控制主備切換。
根據(jù)一些實(shí)施例,所述第一服務(wù)器和所述第二服務(wù)器維護(hù)數(shù)據(jù)的一致性包括:
所述第一服務(wù)器和所述第二服務(wù)器同時(shí)監(jiān)聽(tīng)消息處理終端發(fā)送的請(qǐng)求消息組播、以及外部服務(wù)器發(fā)送的用于確收消息的回報(bào)消息組播,并根據(jù)所接收的所述請(qǐng)求消息、以及所述回報(bào)消息分別各自維護(hù)預(yù)定的未報(bào)隊(duì)列、未決隊(duì)列、已決隊(duì)列;
在所述仲裁機(jī)為所述第一服務(wù)器和所述第二服務(wù)器分配角色確定當(dāng)前主服務(wù)器和當(dāng)前備服務(wù)器之后,所述當(dāng)前主服務(wù)器依次從第一未報(bào)隊(duì)列中取出所述請(qǐng)求消息發(fā)送到外部服務(wù)器,并將所取出的所述請(qǐng)求消息記錄在第一未決隊(duì)列中,當(dāng)監(jiān)聽(tīng)到請(qǐng)求消息組播時(shí),將所述請(qǐng)求消息記錄在所述第一未報(bào)隊(duì)列中,當(dāng)接收到回報(bào)消息組播,將所述回服消息組播對(duì)應(yīng)的消息從所述第一未決隊(duì)列中取出之后存放到第一已決隊(duì)列中,當(dāng)接收到最終消息回報(bào),將所述請(qǐng)求消息從所述第一已決隊(duì)列中清空;
當(dāng)所述當(dāng)前備服務(wù)器監(jiān)聽(tīng)到請(qǐng)求消息組播時(shí),將所述請(qǐng)求消息記錄在第二未決隊(duì)列中,當(dāng)接收到回報(bào)消息組播,將所述回服消息組播對(duì)應(yīng)的消息從所述第二未決隊(duì)列中取出之后存放到第二已決隊(duì)列中,當(dāng)接收到最終消息回報(bào),將所述第二已決隊(duì)列清空;
所述仲裁機(jī)判斷當(dāng)前主服務(wù)器宕機(jī)之后控制主備切換包括:所述仲裁機(jī)監(jiān)控所述當(dāng)前主服務(wù)器是否宕機(jī),若是則發(fā)送主備切換控制指令,所述備服務(wù)器依次將所述第二未決隊(duì)列中的消息發(fā)送給所述外部服務(wù)器,所述當(dāng)前主服務(wù)器和所述當(dāng)前備服務(wù)器交換角色。
根據(jù)一些實(shí)施例,所述方法還包括所述仲裁機(jī)監(jiān)控所述當(dāng)前備服務(wù)器是否宕機(jī),若是則對(duì)所述當(dāng)前主服務(wù)器不作處理。
根據(jù)一些實(shí)施例,所述仲裁機(jī)監(jiān)控所述當(dāng)前備服務(wù)器宕機(jī)或所述當(dāng)前主服務(wù)器是否宕機(jī)包括:所述仲裁機(jī)通過(guò)心跳信道監(jiān)控所述當(dāng)前所述主服務(wù)器和所述當(dāng)前所述備服務(wù)器是否宕機(jī)。
根據(jù)一些實(shí)施例,所述仲裁機(jī)通過(guò)心跳信道監(jiān)控所述當(dāng)前所述主服務(wù)器和所述當(dāng)前所述備服務(wù)器是否宕機(jī)包括:當(dāng)連續(xù)n次未收到所述當(dāng)前主服務(wù)器心跳,則判定所述當(dāng)前主服務(wù)器宕機(jī),當(dāng)連續(xù)m次未收到所述當(dāng)前備服務(wù)器心跳,則判定所述當(dāng)前備服務(wù)器宕機(jī),其中n、m為自然數(shù)。
根據(jù)一些實(shí)施例,所述當(dāng)前主服務(wù)器還用于在接收到回報(bào)消息之后,發(fā)送響應(yīng)消息組播。
根據(jù)一些實(shí)施例,所述方法還包括,所述當(dāng)前備服務(wù)器根據(jù)所述當(dāng)前主服務(wù)器發(fā)送的響應(yīng)消息組播確定消息是否確收。
根據(jù)一些實(shí)施例,所述仲裁機(jī)為所述第一服務(wù)器和所述第二服務(wù)器分配角色包括:系統(tǒng)啟動(dòng)時(shí),所述仲裁機(jī)將所述第一服務(wù)器與所述第二服務(wù)器中先啟動(dòng)者確定為主服務(wù)器,后啟動(dòng)者確定為備服務(wù)器。
本申請(qǐng)的實(shí)施例提供的技術(shù)方案可以包括以下有益效果:
本申請(qǐng)的實(shí)施例提供的技術(shù)方案通過(guò)對(duì)消息進(jìn)行未決、已決分類維護(hù)數(shù)據(jù)的一致性,能夠提高消息處理的速度。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性的,并不能限制本發(fā)明。
附圖說(shuō)明
通過(guò)參照附圖詳細(xì)描述其示例實(shí)施例,本發(fā)明的上述和其它特征及優(yōu)點(diǎn)將變得更加明顯。
圖1示出了根據(jù)本發(fā)明一實(shí)施例的務(wù)務(wù)器備災(zāi)系統(tǒng)部署示意圖;
圖2示出了根據(jù)本發(fā)明一實(shí)施例的請(qǐng)求消息組播結(jié)構(gòu)示意圖;
圖3示出了根據(jù)本發(fā)明一實(shí)施例的響應(yīng)消息組播結(jié)構(gòu)示意圖;
圖4示出了根據(jù)本發(fā)明一實(shí)施例的第一、第二服務(wù)器內(nèi)部三個(gè)隊(duì)列維護(hù)示意圖;
圖5示出了根據(jù)本發(fā)明另一實(shí)施例的基于備災(zāi)系統(tǒng)的處理消息的方法;
圖6示出了根據(jù)本發(fā)明另一實(shí)施例的主服務(wù)器宕機(jī)處理方法流程示意圖;
圖7示出了根據(jù)本發(fā)明另一實(shí)施例的備服務(wù)器宕機(jī)處理方法流程示意圖;
圖8示出了根據(jù)本發(fā)明另一實(shí)施例的服務(wù)器恢復(fù)流程示意圖。
具體實(shí)施方式
現(xiàn)在將參考附圖更全面地描述示例實(shí)施例。然而,示例實(shí)施例能夠以多種形式實(shí)施,且不應(yīng)被理解為限于在此闡述的實(shí)施例;相反,提供這些實(shí)施例使得本發(fā)明將全面和完整,并將示例實(shí)施例的構(gòu)思全面地傳達(dá)給本領(lǐng)域的技術(shù)人員。在圖中相同的附圖標(biāo)記表示相同或類似的部分,因而將省略對(duì)它們的重復(fù)描述。
此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個(gè)或更多實(shí)施例中。在下面的描述中,提供許多具體細(xì)節(jié)從而給出對(duì)本發(fā)明的實(shí)施例的充分理解。然而,本領(lǐng)域技術(shù)人員將意識(shí)到,可以實(shí)踐本發(fā)明的技術(shù)方案而沒(méi)有特定細(xì)節(jié)中的一個(gè)或更多,或者可以采用其它的方法、組元、裝置、步驟等。在其它情況下,不詳細(xì)示出或描述公知方法、裝置、實(shí)現(xiàn)或者操作以避免模糊本發(fā)明的各方面。
附圖中所示的方框圖僅僅是功能實(shí)體,不一定必須與物理上獨(dú)立的實(shí)體相對(duì)應(yīng)。即,可以采用軟件形式來(lái)實(shí)現(xiàn)這些功能實(shí)體,或在一個(gè)或多個(gè)硬件模塊或集成電路中實(shí)現(xiàn)這些功能實(shí)體,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實(shí)現(xiàn)這些功能實(shí)體。
附圖中所示的流程圖僅是示例性說(shuō)明,不是必須包括所有的內(nèi)容和操作/步驟,也不是必須按所描述的順序執(zhí)行。例如,有的操作/步驟還可以分解,而有的操作/步驟可以合并或部分合并,因此實(shí)際執(zhí)行的順序有可能根據(jù)實(shí)際情況改變。
圖1示出了根據(jù)本發(fā)明一實(shí)施例的務(wù)務(wù)器備災(zāi)系統(tǒng)部署示意圖,根據(jù)本發(fā)明一實(shí)施例的服務(wù)器備災(zāi)系統(tǒng),本實(shí)施例可適用于通過(guò)主備兩個(gè)服務(wù)器進(jìn)行消息安全處理的情況,如圖1所示,本實(shí)施例所述的服務(wù)器備災(zāi)系統(tǒng)包括:
第一服務(wù)器、第二服務(wù)器、以及仲裁機(jī),所述第一服務(wù)器和所述第二服務(wù)器部署在同一網(wǎng)段以收發(fā)同一組播;
所述第一服務(wù)器和所述第二服務(wù)器同時(shí)監(jiān)聽(tīng)消息處理終端發(fā)送的請(qǐng)求消息組播、以及外部服務(wù)器發(fā)送的用于確收消息的回報(bào)消息組播,以維護(hù)數(shù)據(jù)的一致性;
所述仲裁機(jī)用于為所述第一服務(wù)器和所述第二服務(wù)器分配角色確定當(dāng)前主服務(wù)器和當(dāng)前備服務(wù)器,并在判斷當(dāng)前主服務(wù)器宕機(jī)之后控制主備切換。
可見(jiàn),本實(shí)施例所述的服務(wù)器備災(zāi)系統(tǒng),通過(guò)雙服務(wù)器部署,一主一備。主服務(wù)器宕機(jī)后,備服務(wù)器自動(dòng)接管。冷備仲裁機(jī),監(jiān)控主備服務(wù)器狀態(tài)、分配服務(wù)器角色和控制主備切換。主備服務(wù)器同一網(wǎng)段部署,中間不跨交換機(jī),保證能收發(fā)同一組播,主備服務(wù)器與外部服務(wù)器的可靠通信連接。該部署結(jié)構(gòu)至少具有以下優(yōu)點(diǎn):首先,通主備服務(wù)器同時(shí)監(jiān)聽(tīng)請(qǐng)求消息組播,能保證請(qǐng)求消息可靠有序的分發(fā)到每個(gè)服務(wù)器;其次,主備服務(wù)器同時(shí)與外部服務(wù)器建立連接,外部服務(wù)器保證其回報(bào)消息分發(fā)到每個(gè)連接;另外,主備服務(wù)器之間沒(méi)有直接的數(shù)據(jù)同步通信,備服務(wù)器能夠通過(guò)監(jiān)聽(tīng)響應(yīng)消息組播獲取主服務(wù)器的響應(yīng)消息。
本實(shí)施例的請(qǐng)求消息組播結(jié)構(gòu)示意圖如圖2所示,主備服務(wù)器同時(shí)監(jiān)聽(tīng)請(qǐng)求消息組播,保證獲取到同樣的待處理消息。本實(shí)施例的響應(yīng)消息組播結(jié)構(gòu)示意圖如圖3所示,消息處理終端和備服務(wù)器同時(shí)監(jiān)聽(tīng)響應(yīng)消息組播,保證獲取到同樣的響應(yīng)消息。
例如,所述第一服務(wù)器和所述第二服務(wù)器維護(hù)數(shù)據(jù)的一致性可通過(guò)如下方法實(shí)現(xiàn):
所述第一服務(wù)器和所述第二服務(wù)器同時(shí)監(jiān)聽(tīng)消息處理終端發(fā)送的請(qǐng)求消息組播以及外部服務(wù)器發(fā)送的用于確收消息的回報(bào)消息組播,并根據(jù)所接收的所述請(qǐng)求消息、以及所述回報(bào)消息分別各自維護(hù)三個(gè)隊(duì)列;
當(dāng)所述第一服務(wù)器為主服務(wù)器角色而所述第二服務(wù)器為備服務(wù)器角色時(shí),所述第一服務(wù)器通過(guò)第一隊(duì)列記錄接收但未發(fā)送的消息、通過(guò)第二隊(duì)列記錄已發(fā)送但未確收的消息、以及通過(guò)第三隊(duì)列用于記錄已確收的消息,所述第二服務(wù)器通過(guò)第五隊(duì)列記錄接收但未確收的消息、以及通過(guò)第六隊(duì)列記錄已確收的消息;
當(dāng)所述第二服務(wù)器為主服務(wù)器角色而所述第一服務(wù)器為備服務(wù)器角色時(shí),所述第二服務(wù)器通過(guò)第四隊(duì)列記錄接收但未發(fā)送的消息、通過(guò)第五隊(duì)列記錄已發(fā)送但未確收的消息、以及通過(guò)第六隊(duì)列用于記錄已確收的消息,所述第一服務(wù)器通過(guò)第二隊(duì)列記錄接收但未確收的消息、以及通過(guò)第三隊(duì)列記錄已確收的消息。
若將記錄接收但未發(fā)送的消息的隊(duì)列稱為未報(bào)隊(duì)列、將記錄已發(fā)送但未確收的消息的隊(duì)列稱為未決隊(duì)列、以及將記錄已確收的消息的隊(duì)列稱為已決隊(duì)列,則根據(jù)本發(fā)明一實(shí)施例的第一服務(wù)器、以及第二服務(wù)器內(nèi)部三個(gè)隊(duì)列維護(hù)示意圖如圖4所示。第一服務(wù)器與第二服務(wù)器的內(nèi)部結(jié)構(gòu)是相同的,根據(jù)主備模式不同啟用不同的部分,運(yùn)行不同的邏輯。
主服務(wù)器收到的消息首先進(jìn)入未報(bào)隊(duì)列,報(bào)送后進(jìn)入未決隊(duì)列,因?yàn)檫€未確認(rèn)該消息是否發(fā)送到外部服務(wù)器,一直到收到外部服務(wù)器發(fā)送的消息回報(bào),才確認(rèn)消息已報(bào)送,進(jìn)入已決隊(duì)列。
備服務(wù)器收到的消息直接進(jìn)入未決隊(duì)列,因?yàn)椴恢乐鞣?wù)器是否已經(jīng)報(bào)送該消息,一直到收到外部服務(wù)器或者主服務(wù)器發(fā)送的消息回報(bào),才確認(rèn)消息已報(bào)送,進(jìn)入已決隊(duì)列。
主備服務(wù)器收到最終消息回報(bào),消息處理流程結(jié)束,從已決隊(duì)列中刪除該消息,消息處理完成。
例如,所述仲裁機(jī)可具體用于:當(dāng)判斷當(dāng)前備服務(wù)器宕機(jī),對(duì)當(dāng)前主服務(wù)器不作處理;以及所述仲裁機(jī)若判斷所述當(dāng)前主服務(wù)器宕機(jī)之后,則控制所述當(dāng)前主服務(wù)器與所述當(dāng)前備服務(wù)器交換主備角色進(jìn)行主備切換。
其中判斷服務(wù)器宕機(jī)的方法包括多種,例如,可以通過(guò)心跳信道監(jiān)控服務(wù)器是否宕機(jī)。如:當(dāng)連續(xù)n次未收到所述當(dāng)前主服務(wù)器心跳,則判定所述當(dāng)前主服務(wù)器宕機(jī),當(dāng)連續(xù)m次未收到所述當(dāng)前備服務(wù)器心跳,則判定所述當(dāng)前備服務(wù)器宕機(jī),其中n、m為自然數(shù),原則上n應(yīng)該不大于m,m、n也可以相同。又如,還可以通過(guò)硬件檢測(cè)與心跳檢測(cè)結(jié)合監(jiān)控服務(wù)器是否宕機(jī)。再如,還可以通過(guò)仲裁機(jī)加未宕機(jī)服務(wù)器雙重確認(rèn)法監(jiān)控服務(wù)器是否宕機(jī),如在仲載機(jī)判斷主服務(wù)器疑似宕機(jī)之后,命令完好的備服務(wù)器嘗試聯(lián)絡(luò)所述主服務(wù)器,若所述備服務(wù)器聯(lián)絡(luò)所述主服務(wù)器失敗,判定所述主服務(wù)器宕機(jī)。
例如,根據(jù)本發(fā)明的一些實(shí)施例,可通過(guò)以下仲裁機(jī)制進(jìn)行仲裁:
(1)仲裁機(jī)通過(guò)心跳信道監(jiān)控主備服務(wù)器的狀態(tài);
(2)仲裁機(jī)判斷備服務(wù)器宕機(jī)后,主服務(wù)器不受影響,不作任何處理;
(3)仲裁機(jī)判斷主服務(wù)器宕機(jī)后,通知備服務(wù)器切換為主服務(wù)器后繼續(xù)工作;
(4)主備服務(wù)器同時(shí)接收終端通過(guò)可靠組播發(fā)送的消息,但是備服務(wù)器不報(bào)送消息;
(5)主備服務(wù)器同時(shí)接收外部服務(wù)器的可靠回報(bào),但是備服務(wù)器不發(fā)送回報(bào);
(6)備服務(wù)器接收主服務(wù)器通過(guò)可靠組播發(fā)回終端的回報(bào);
(7)備服務(wù)器通過(guò)接收的終端消息、外部服務(wù)器回報(bào)、主服務(wù)器回報(bào),維持?jǐn)?shù)據(jù)同步。
通過(guò)該仲裁機(jī)制,主服務(wù)器負(fù)責(zé)消息報(bào)送,處理外部服務(wù)器回報(bào)并發(fā)送回報(bào)給終端;備服務(wù)器通過(guò)接收消息、外部服務(wù)器回報(bào)和主服務(wù)器回報(bào),同步數(shù)據(jù);主服務(wù)器宕機(jī)后,備服務(wù)器切換為主服務(wù)器,先處理未決消息,再正常工作;未決消息通過(guò)查詢外部服務(wù)器判定,未發(fā)送則補(bǔ)發(fā)送。
根據(jù)本發(fā)明的一些實(shí)施例,所述仲裁機(jī)可用于為所述第一服務(wù)器與所述第二服務(wù)器分配主備服務(wù)器角色。其中分配角色時(shí)可參考啟動(dòng)順序、硬件配置、ip大小、機(jī)器性能等信息。例如將所述第一服務(wù)器與所述第二服務(wù)器中先啟動(dòng)者分配主服務(wù)器角色。
所述方法還包括在主備切換之后,所述當(dāng)前主服務(wù)器還用于依次將用于記錄已發(fā)送但未確收的消息的隊(duì)列中的消息發(fā)送給所述外部服務(wù)器。
根據(jù)本發(fā)明的一些實(shí)施例,所述當(dāng)前主服務(wù)器還用于在接收到回報(bào)消息之后,發(fā)送響應(yīng)消息組播。所述當(dāng)前備服務(wù)器還用于監(jiān)聽(tīng)所述響應(yīng)消息組播,根據(jù)所述響應(yīng)消息組播確定消息是否確收。
本實(shí)施例所述的服務(wù)器備災(zāi)系統(tǒng)包括第一服務(wù)器、第二服務(wù)器、以及仲裁機(jī),所述第一服務(wù)器和所述第二服務(wù)器部署在同一網(wǎng)段以收發(fā)同一組播,通過(guò)同時(shí)監(jiān)聽(tīng)消息處理終端發(fā)送的請(qǐng)求消息組播、以及外部服務(wù)器發(fā)送的用于確收消息的回報(bào)消息組播,以維護(hù)數(shù)據(jù)的一致性,并在當(dāng)前主服務(wù)器宕機(jī)之后控制主備切換。能夠提高消息處理的速度。
圖5示出了根據(jù)本發(fā)明另一實(shí)施例的基于備災(zāi)系統(tǒng)的處理消息的方法,該方法基于上述服務(wù)器備災(zāi)系統(tǒng)。所述備災(zāi)系統(tǒng)包括第一服務(wù)器、第二服務(wù)器、以及仲裁機(jī),所述第一服務(wù)器和所述第二服務(wù)器部署在同一網(wǎng)段以收發(fā)同一組播。如圖5所示,本實(shí)施例所述的基于備災(zāi)系統(tǒng)的處理消息的方法包括:
所述第一服務(wù)器和所述第二服務(wù)器通過(guò)同時(shí)監(jiān)聽(tīng)消息處理終端發(fā)送的請(qǐng)求消息組播、以及外部服務(wù)器發(fā)送的用于確收消息的回報(bào)消息組播維護(hù)數(shù)據(jù)的一致性;
所述仲裁機(jī)為所述第一服務(wù)器和所述第二服務(wù)器分配角色確定當(dāng)前主服務(wù)器和當(dāng)前備服務(wù)器,并在判斷當(dāng)前主服務(wù)器宕機(jī)之后控制主備切換。
本領(lǐng)域的普通技術(shù)人員通過(guò)圖5可知:主備服務(wù)器同時(shí)接收終端組播出來(lái)的待處理請(qǐng)求消息;主服務(wù)器負(fù)責(zé)報(bào)送請(qǐng)求消息和發(fā)送響應(yīng)消息;主備服務(wù)器同時(shí)接收外部服務(wù)器回報(bào),各自更新消息狀態(tài);主備服務(wù)器同時(shí)接收外部服務(wù)器最終回報(bào),各自刪除消息。
圖6示出了根據(jù)本發(fā)明另一實(shí)施例的主服務(wù)器宕機(jī)處理方法流程示意圖,通過(guò)圖6可知:備服務(wù)器處理的一切,就是為了準(zhǔn)備主服務(wù)器宕機(jī)時(shí)的無(wú)縫切換;備服務(wù)器切換后,收到的消息進(jìn)入未報(bào)隊(duì)列,因?yàn)榭梢源_定消息未報(bào)(主服務(wù)器已宕);備服務(wù)器切換的主要工作,就是處理未決消息,即不知道主服務(wù)是否報(bào)送、是否報(bào)送成功的消息,通過(guò)查詢外部服務(wù)器消息是否報(bào)送的方法完成判決;未決消息處理完成后,備服務(wù)器即可啟動(dòng)主服務(wù)器模式組件,切換為主服務(wù)器處理邏輯。
圖7示出了根據(jù)本發(fā)明另一實(shí)施例的備服務(wù)器宕機(jī)處理方法流程示意圖,通過(guò)圖7可知:備服務(wù)器宕機(jī)對(duì)整個(gè)消息處理系統(tǒng)沒(méi)有影響,主服務(wù)器正常處理消息。
圖8示出了根據(jù)本發(fā)明另一實(shí)施例的服務(wù)器恢復(fù)流程示意圖,通過(guò)圖8可知:宕機(jī)服務(wù)器作為備服務(wù)器啟動(dòng);備服務(wù)器啟動(dòng)后,通過(guò)監(jiān)聽(tīng)終端的請(qǐng)求消息組播、外部服務(wù)器的回報(bào)消息、主服務(wù)器的響應(yīng)消息組播,同步消息數(shù)據(jù)和消息處理狀態(tài),為下次主服務(wù)宕機(jī)做準(zhǔn)備。
例如,所述第一服務(wù)器和所述第二服務(wù)器維護(hù)數(shù)據(jù)的一致性可通過(guò)如下方法實(shí)現(xiàn):
所述第一服務(wù)器和所述第二服務(wù)器同時(shí)監(jiān)聽(tīng)消息處理終端發(fā)送的請(qǐng)求消息組播、以及外部服務(wù)器發(fā)送的用于確收消息的回報(bào)消息組播,并根據(jù)所接收的所述請(qǐng)求消息、以及所述回報(bào)消息分別各自維護(hù)預(yù)定的未報(bào)隊(duì)列、未決隊(duì)列、已決隊(duì)列;
在所述仲裁機(jī)為所述第一服務(wù)器和所述第二服務(wù)器分配角色確定當(dāng)前主服務(wù)器和當(dāng)前備服務(wù)器之后,所述當(dāng)前主服務(wù)器依次從第一未報(bào)隊(duì)列中取出所述請(qǐng)求消息發(fā)送到外部服務(wù)器,并將所取出的所述請(qǐng)求消息記錄在第一未決隊(duì)列中,當(dāng)監(jiān)聽(tīng)到請(qǐng)求消息組播時(shí),將所述請(qǐng)求消息記錄在所述第一未報(bào)隊(duì)列中,當(dāng)接收到回報(bào)消息組播,將所述回服消息組播對(duì)應(yīng)的消息從所述第一未決隊(duì)列中取出之后存放到第一已決隊(duì)列中,當(dāng)接收到最終消息回報(bào),將所述請(qǐng)求消息從所述第一已決隊(duì)列中清空;
當(dāng)所述當(dāng)前備服務(wù)器監(jiān)聽(tīng)到請(qǐng)求消息組播時(shí),將所述請(qǐng)求消息記錄在第二未決隊(duì)列中,當(dāng)接收到回報(bào)消息組播,將所述回服消息組播對(duì)應(yīng)的消息從所述第二未決隊(duì)列中取出之后存放到第二已決隊(duì)列中,當(dāng)接收到最終消息回報(bào),將所述第二已決隊(duì)列清空;
例如,所述仲裁機(jī)判斷當(dāng)前主服務(wù)器宕機(jī)之后控制主備切換可通過(guò)如下方法實(shí)現(xiàn):所述仲裁機(jī)監(jiān)控所述當(dāng)前主服務(wù)器是否宕機(jī),若是則發(fā)送主備切換控制指令,所述備服務(wù)器依次將所述第二未決隊(duì)列中的消息發(fā)送給所述外部服務(wù)器,所述當(dāng)前主服務(wù)器和所述當(dāng)前備服務(wù)器交換角色。
另外,所述仲裁機(jī)還可監(jiān)控所述當(dāng)前備服務(wù)器是否宕機(jī),若是則對(duì)所述當(dāng)前主服務(wù)器不作處理。具體地,可具體通過(guò)如下方法:所述仲裁機(jī)通過(guò)心跳信道監(jiān)控所述當(dāng)前所述主服務(wù)器和所述當(dāng)前所述備服務(wù)器是否宕機(jī)。例如,當(dāng)連續(xù)n次未收到所述當(dāng)前主服務(wù)器心跳,則判定所述當(dāng)前主服務(wù)器宕機(jī),當(dāng)連續(xù)m次未收到所述當(dāng)前備服務(wù)器心跳,則判定所述當(dāng)前備服務(wù)器宕機(jī),其中n、m為自然數(shù)。
所述當(dāng)前主服務(wù)器還可用于在接收到回報(bào)消息之后,發(fā)送響應(yīng)消息組播。所述當(dāng)前備服務(wù)器可根據(jù)所述當(dāng)前主服務(wù)器發(fā)送的響應(yīng)消息組播確定消息是否確收。
系統(tǒng)啟動(dòng)時(shí),所述仲裁機(jī)為所述第一服務(wù)器與所述第二服務(wù)器分配主備服務(wù)器角色。其中分配角色時(shí)可參考啟動(dòng)順序、硬件配置、ip大小、機(jī)器性能等信息。例如所述仲裁機(jī)將所述第一服務(wù)器與所述第二服務(wù)器中先啟動(dòng)者確定為主服務(wù)器,后啟動(dòng)者確定為備服務(wù)器。
綜上,本實(shí)施例最大特點(diǎn)是主備消息處理服務(wù)器之間沒(méi)有直接的消息同步通信,互相不知道對(duì)方的存在主服務(wù)器甚至不知道備服務(wù)器的存在,相應(yīng)的,消息處理服務(wù)器就沒(méi)有單機(jī)模式,只有主備模式。主消息處理服務(wù)器可以全速的處理消息,完全不必考慮備服務(wù)器的存在。備服務(wù)器的工作就是同步數(shù)據(jù)。
與現(xiàn)有技術(shù)相比,備服務(wù)器不用從主服務(wù)器獲取并同步數(shù)據(jù),而是改用黑箱法則,把主服務(wù)器看成一個(gè)不透明的黑箱,純粹從消息處理服務(wù)器系統(tǒng)的外部接口觀察輸入輸出,利用可靠組播和外部服務(wù)器數(shù)據(jù)流的分發(fā)和恢復(fù)機(jī)制,達(dá)到同步數(shù)據(jù)的目的。
相比現(xiàn)有的相關(guān)技術(shù),本實(shí)施例具有如下特點(diǎn):
首先,相關(guān)技術(shù)為了同步消息數(shù)據(jù)和消息處理的狀態(tài),每個(gè)進(jìn)入服務(wù)器的消息,都要在主備服務(wù)器之間轉(zhuǎn)發(fā)一遍,相互確認(rèn),這樣會(huì)造成消息處理的速度下降。
本實(shí)施例的技術(shù)在此基礎(chǔ)上,設(shè)計(jì)了新的數(shù)據(jù)同步方案,取消了主備之間的同步通信,在保證可靠性的同時(shí),提高了消息處理的速度?,F(xiàn)有技術(shù)用降低速度的代價(jià)維護(hù)主備數(shù)據(jù)時(shí)刻保持一致,本發(fā)明則為了最大化數(shù)據(jù)處理的速度,取消主備數(shù)據(jù)時(shí)刻保持一致的特性,改為采用對(duì)消息進(jìn)行未決、已決分類的方法,維護(hù)數(shù)據(jù)的滯后一致性,即數(shù)據(jù)雖然不是時(shí)刻一致的,但延遲一小段時(shí)間后,最終會(huì)達(dá)到一致的狀態(tài)。這樣,就用主備切換時(shí)的一點(diǎn)點(diǎn)時(shí)間損耗,換來(lái)了日常消息處理速度的極大提升,是非常劃算的時(shí)間再平衡,畢竟主備切換發(fā)生的概率還是非常小的。
其次,相關(guān)技術(shù)因?yàn)橹鱾湎⑼酵ㄐ诺脑O(shè)計(jì),在備機(jī)宕機(jī)的情況下,原本完好的主機(jī),也會(huì)因?yàn)槭詹坏絺錂C(jī)對(duì)消息同步請(qǐng)求的響應(yīng)而暫停服務(wù),一直到仲裁服務(wù)器確認(rèn)備機(jī)宕機(jī)后,才能恢復(fù)。
本實(shí)施例的技術(shù)由于取消了主備之間的同步通信,除了能提高日常情況下的消息處理速度,也消除了備機(jī)宕機(jī)時(shí)對(duì)主機(jī)的影響,備機(jī)宕機(jī)時(shí),主機(jī)完全不知道,可以一直正常處理消息。
另外,現(xiàn)有技術(shù)往往對(duì)請(qǐng)求消息進(jìn)行了主備同步,但是忽略了對(duì)響應(yīng)消息的同步,造成主服務(wù)器宕機(jī)后不能準(zhǔn)確判定響應(yīng)消息的處理狀態(tài),后果往往是重發(fā)或者漏發(fā)響應(yīng)消息。
本實(shí)施例的技術(shù)由于備服務(wù)器通過(guò)可靠組播監(jiān)聽(tīng)了主服務(wù)器的響應(yīng)消息,獲取了精確的響應(yīng)消息處理狀態(tài),所以對(duì)響應(yīng)消息的處理也可以做到不重不漏?,F(xiàn)有技術(shù),在主備切換發(fā)生時(shí),往往會(huì)存在丟棄(一批)消息,或者重復(fù)處理(一批)消息的情況,而本發(fā)明由于完整的監(jiān)控了主服務(wù)器的輸入和輸出數(shù)據(jù),對(duì)每一條消息的數(shù)據(jù)和狀態(tài)都可以精確的同步,所以對(duì)任何一條進(jìn)入系統(tǒng)的消息,即使在主服務(wù)器宕機(jī)的情況下,其處理的對(duì)外表現(xiàn),都可以做到不重不漏。
根據(jù)一些實(shí)施例,本發(fā)明還提供一種非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),例如包括指令的存儲(chǔ)器,上述指令可由裝置的處理器執(zhí)行以完成上述方法。例如,非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是rom、隨機(jī)存取存儲(chǔ)器(ram)、cd-rom、磁帶、軟盤(pán)和光數(shù)據(jù)存儲(chǔ)設(shè)備等。當(dāng)存儲(chǔ)介質(zhì)中的指令由終端的處理器執(zhí)行時(shí),使得終端能夠執(zhí)行下述方法:將腳本模塊中的原生資源名稱變換為原生資源id;原生應(yīng)用模塊通過(guò)原生資源id獲取相應(yīng)的原生資源。
本領(lǐng)域技術(shù)人員可以理解,附圖只是示例實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的,因此不能用于限制本發(fā)明的保護(hù)范圍。
本領(lǐng)域技術(shù)人員可以理解上述各模塊可以按照實(shí)施例的描述分布于裝置中,也可以進(jìn)行相應(yīng)變化唯一不同于本實(shí)施例的一個(gè)或多個(gè)裝置中。上述實(shí)施例的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。
以上具體地示出和描述了本發(fā)明的示例性實(shí)施例。應(yīng)該理解,本發(fā)明不限于所公開(kāi)的實(shí)施例,相反,本發(fā)明意圖涵蓋包含在所附權(quán)利要求的精神和范圍內(nèi)的各種修改和等效布置。