两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法

文檔序號(hào):7795718閱讀:432來(lái)源:國(guó)知局
一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法
【專(zhuān)利摘要】本發(fā)明提供了一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法,包括如下步驟:a)在共享會(huì)話數(shù)據(jù)的多個(gè)節(jié)點(diǎn)中間選舉主節(jié)點(diǎn);b)非主節(jié)點(diǎn)檢測(cè)變化的會(huì)話數(shù)據(jù);d)非主節(jié)點(diǎn)對(duì)產(chǎn)生的二進(jìn)制數(shù)據(jù)流進(jìn)行數(shù)據(jù)壓縮操作;e)非主節(jié)點(diǎn)使用簽名生成算法對(duì)準(zhǔn)備傳輸?shù)膲嚎s后的數(shù)據(jù)生成簽名;f)非主節(jié)點(diǎn)將經(jīng)壓縮和簽名后的變化的會(huì)話數(shù)據(jù)發(fā)往主節(jié)點(diǎn);g)進(jìn)行數(shù)據(jù)校驗(yàn)操作;h)主節(jié)點(diǎn)將非主節(jié)點(diǎn)中變化的會(huì)話數(shù)據(jù)向其他非主節(jié)點(diǎn)廣播轉(zhuǎn)發(fā);i)數(shù)據(jù)校驗(yàn)操作;j)各非主節(jié)點(diǎn)對(duì)數(shù)據(jù)進(jìn)行解壓縮操作。利用本發(fā)明能夠有效提高服務(wù)器集群處理性能,有效地降低服務(wù)器間數(shù)據(jù)傳輸量,降低網(wǎng)絡(luò)和CPU壓力,并且有效地同步異構(gòu)的服務(wù)器的會(huì)話數(shù)據(jù),整合服務(wù)器資源。
【專(zhuān)利說(shuō)明】一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)【技術(shù)領(lǐng)域】,特別是一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)已經(jīng)深入到千家萬(wàn)戶(hù)。為了盡可能地方便用戶(hù)、提高網(wǎng)絡(luò)速度,作為一些大型的業(yè)務(wù)系統(tǒng),常常要處理成千上萬(wàn)的用戶(hù)的數(shù)據(jù)處理,因此從業(yè)務(wù)系統(tǒng)性能和部署等發(fā)面考慮通將大型的業(yè)務(wù)系統(tǒng)拆分成數(shù)個(gè)子系統(tǒng),并以集群服務(wù)器處理業(yè)務(wù)。在這種情況下,若客戶(hù)端與某個(gè)服務(wù)器進(jìn)行會(huì)話,集群服務(wù)器中的其他服務(wù)器也需要更新該會(huì)話數(shù)據(jù),從而保證會(huì)話數(shù)據(jù)的一致性。
[0003]一種現(xiàn)有的服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享的方法是,若某一會(huì)話通信節(jié)點(diǎn)(服務(wù)器)與客戶(hù)端進(jìn)行了會(huì)話而產(chǎn)生了會(huì)話數(shù)據(jù),則將該節(jié)點(diǎn)向其他所有節(jié)點(diǎn)以廣播的形式進(jìn)行無(wú)壓縮機(jī)制的會(huì)話數(shù)據(jù)的全量同步,即將該節(jié)點(diǎn)的所有會(huì)話數(shù)據(jù)直接向其他所有節(jié)點(diǎn)進(jìn)行廣播來(lái)更新所有節(jié)點(diǎn)的會(huì)話數(shù)據(jù)。這種會(huì)話數(shù)據(jù)共享方法導(dǎo)致數(shù)據(jù)傳輸量極大,產(chǎn)生過(guò)大的網(wǎng)絡(luò)流量,給所有服務(wù)器帶來(lái)了過(guò)大的負(fù)荷。
[0004]并且,圖3示意性示出了一種現(xiàn)有方案的節(jié)點(diǎn)間的通訊會(huì)話數(shù)據(jù)模型示意圖。如圖3所示,由于每臺(tái)服務(wù)器的會(huì)話數(shù)據(jù)均采用廣播模式同步到其它機(jī)器,所以還存在以下問(wèn)題,每臺(tái)服務(wù)器都具有過(guò)多的會(huì)話數(shù)據(jù)傳輸次數(shù),使所有服務(wù)器都具有相當(dāng)大的CPU壓力和網(wǎng)絡(luò)吞吐量。此外,由于會(huì)話數(shù)據(jù)傳輸時(shí)無(wú)校驗(yàn),從而還存在由于在數(shù)據(jù)傳輸過(guò)程中的極小的數(shù)據(jù)錯(cuò)誤而導(dǎo)致全部服務(wù)器的會(huì)話數(shù)據(jù)失效的問(wèn)題。
[0005]因此,需要一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法,來(lái)降低絕大多數(shù)服務(wù)器的CPU壓力以及網(wǎng)絡(luò)吞吐量。

【發(fā)明內(nèi)容】

[0006]本發(fā)明的目的是提供一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法。
[0007]根據(jù)本發(fā)明的一個(gè)方面,提供了一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法,所述服務(wù)器作為會(huì)話通訊的節(jié)點(diǎn),所述方法包括如下步驟:a)在共享會(huì)話數(shù)據(jù)的多個(gè)節(jié)點(diǎn)中間選舉主節(jié)點(diǎn)山)非主節(jié)點(diǎn)檢測(cè)變化的會(huì)話數(shù)據(jù);c)非主節(jié)點(diǎn)對(duì)檢測(cè)出的變化的會(huì)話數(shù)據(jù)進(jìn)行序列化操作,轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)流;d)非主節(jié)點(diǎn)對(duì)產(chǎn)生的二進(jìn)制數(shù)據(jù)流進(jìn)行數(shù)據(jù)壓縮操作;e)非主節(jié)點(diǎn)使用簽名生成算法對(duì)準(zhǔn)備傳輸?shù)膲嚎s后的數(shù)據(jù)生成簽名,并將其附加在數(shù)據(jù)頭部或者尾部;f)非主節(jié)點(diǎn)將經(jīng)壓縮和簽名后的變化的會(huì)話數(shù)據(jù)發(fā)往主節(jié)點(diǎn);g)在所述主節(jié)點(diǎn)接收到來(lái)自非主節(jié)點(diǎn)的數(shù)據(jù)時(shí),進(jìn)行數(shù)據(jù)校驗(yàn)操作;h)所述主節(jié)點(diǎn)將非主節(jié)點(diǎn)中變化的會(huì)話數(shù)據(jù)向其他非主節(jié)點(diǎn)廣播轉(zhuǎn)發(fā);i)所述其他各非主節(jié)點(diǎn)收到來(lái)自主節(jié)點(diǎn)的數(shù)據(jù)時(shí),進(jìn)行數(shù)據(jù)校驗(yàn)操作;j)所述各非主節(jié)點(diǎn)對(duì)數(shù)據(jù)進(jìn)行解壓縮操作;k)所述各非主節(jié)點(diǎn)對(duì)接收到的數(shù)據(jù)進(jìn)行反序列化操作,來(lái)將二進(jìn)制數(shù)據(jù)恢復(fù)為原始數(shù)據(jù)。
[0008]優(yōu)選地,所述主節(jié)點(diǎn)指具備將會(huì)話數(shù)據(jù)轉(zhuǎn)發(fā)到其他非主節(jié)點(diǎn)的功能的服務(wù)器。[0009]優(yōu)選地,所述非主節(jié)點(diǎn)指能夠與客戶(hù)端直接進(jìn)行會(huì)話并產(chǎn)生會(huì)話數(shù)據(jù)的節(jié)點(diǎn)。
[0010]優(yōu)選地,在步驟a中,主節(jié)點(diǎn)選舉的過(guò)程包括準(zhǔn)備階段和提交階段,包括如下步驟:al)每個(gè)節(jié)點(diǎn)向所有其它節(jié)點(diǎn)廣播發(fā)送一個(gè)準(zhǔn)備階段請(qǐng)求;a2)根據(jù)接受的請(qǐng)求中的編號(hào)大小回復(fù)響應(yīng);a3)判斷是否收到來(lái)自多數(shù)派的接受響應(yīng),若是則進(jìn)入步驟a4,否則進(jìn)入步驟a5;a4)向所有其他節(jié)點(diǎn)發(fā)送提交階段請(qǐng)求;a5)加大提議編號(hào)重新提交準(zhǔn)備階段請(qǐng)求;a6)根據(jù)請(qǐng)求中的編號(hào)大小回復(fù)響應(yīng);a7)將第一個(gè)收到來(lái)自多數(shù)派的接受響應(yīng)的節(jié)點(diǎn)作為主節(jié)點(diǎn)。
[0011]優(yōu)選地,所述步驟b是通過(guò)非主節(jié)點(diǎn)檢測(cè)數(shù)據(jù)差量變化來(lái)檢測(cè)變化的會(huì)話數(shù)據(jù)
[0012]優(yōu)選地,利用專(zhuān)用于會(huì)話數(shù)據(jù)管理的數(shù)據(jù)類(lèi)型庫(kù),并且提供操作對(duì)應(yīng)會(huì)話數(shù)據(jù)的API接口,若使用會(huì)話數(shù)據(jù)管理庫(kù)提供的API修改會(huì)話數(shù)據(jù)時(shí),則檢測(cè)該變化了的數(shù)據(jù)。
[0013]優(yōu)選地,對(duì)于基于虛擬機(jī)解釋的語(yǔ)言,提供虛擬機(jī)之上的中間層,該中間層能夠監(jiān)測(cè)到服務(wù)器應(yīng)用程序的會(huì)話數(shù)據(jù)內(nèi)存分配和修改,從而實(shí)現(xiàn)會(huì)話數(shù)據(jù)監(jiān)測(cè)。
[0014]優(yōu)選地,所述步驟d和j中的壓縮算法是zlib。
[0015]優(yōu)選地,所述步驟e中的簽名算法是MD5或者SHA-1摘要算法。
[0016]優(yōu)選地,所述步驟i中的數(shù)據(jù)校驗(yàn)的過(guò)程是,接收方從接收到的數(shù)據(jù)頭部或尾部中讀出簽名,并使用與數(shù)據(jù)發(fā)送方相同的簽名生成算法計(jì)算簽名,然后比較從數(shù)據(jù)頭部或尾部中讀出的簽名與接收方計(jì)算得出的簽名,若簽名不一致,則通知數(shù)據(jù)發(fā)送方重新傳送此數(shù)據(jù);若校驗(yàn)無(wú)誤,則繼續(xù)進(jìn)行下一步操作。
[0017]利用本發(fā)明的服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法,能夠有效提高服務(wù)器集群處理性能,能夠有效地降低服務(wù)器間數(shù)據(jù)傳輸量,降低網(wǎng)絡(luò)壓力和CPU壓力,并且能夠有效地同步異構(gòu)的服務(wù)器的會(huì)話數(shù)據(jù),整合服務(wù)器資源。
【專(zhuān)利附圖】

【附圖說(shuō)明】
[0018]參考隨附的附圖,本發(fā)明更多的目的、功能和優(yōu)點(diǎn)將通過(guò)本發(fā)明實(shí)施方式的如下描述得以闡明,其中:
[0019]圖1示意性示出了本發(fā)明的一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法的流程圖。
[0020]圖2示意性示出了本發(fā)明的主節(jié)點(diǎn)與非主節(jié)點(diǎn)間的會(huì)話數(shù)據(jù)通訊模型示意圖。
[0021]圖3示意性示出了一種現(xiàn)有方案的節(jié)點(diǎn)間的會(huì)話數(shù)據(jù)通訊模型示意圖。
[0022]圖4示意性示出了主節(jié)點(diǎn)選舉的流程圖。
【具體實(shí)施方式】
[0023]通過(guò)參考示范性實(shí)施例,本發(fā)明的目的和功能以及用于實(shí)現(xiàn)這些目的和功能的方法將得以闡明。然而,本發(fā)明并不受限于以下所公開(kāi)的示范性實(shí)施例;可以通過(guò)不同形式來(lái)對(duì)其加以實(shí)現(xiàn)。說(shuō)明書(shū)的實(shí)質(zhì)僅僅是幫助相關(guān)領(lǐng)域技術(shù)人員綜合理解本發(fā)明的具體細(xì)節(jié)。
[0024]在下文中,將參考附圖描述本發(fā)明的實(shí)施例。在附圖中,相同的附圖標(biāo)記代表相同或類(lèi)似的部件,或者相同或類(lèi)似的步驟。
[0025]利用本發(fā)明的一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法的系統(tǒng)支持任意數(shù)量任意類(lèi)型服務(wù)器間高效的會(huì)話數(shù)據(jù)共享。服務(wù)器可以是由不同操作系統(tǒng)中的不同語(yǔ)言開(kāi)發(fā)的應(yīng)用服務(wù)器,即本發(fā)明具有跨平臺(tái)跨語(yǔ)言支持能力。例如,本發(fā)明可以支持windows下的JAVA語(yǔ)言開(kāi)發(fā)的web服務(wù)器與Linux下的C++開(kāi)發(fā)的web服務(wù)器之間的會(huì)話數(shù)據(jù)同步。即使分別使用不同的語(yǔ)言而實(shí)現(xiàn)不同操作系統(tǒng)的庫(kù),由于對(duì)上層提供的接口是一致的,從而能夠?qū)崿F(xiàn)由不同操作系統(tǒng)中的不同語(yǔ)言開(kāi)發(fā)的服務(wù)器之間正常的會(huì)話數(shù)據(jù)共享。
[0026]圖1示意性示出了本發(fā)明的一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法的流程圖。如圖1所不:
[0027]步驟105,在共享會(huì)話數(shù)據(jù)的多個(gè)節(jié)點(diǎn)中間選舉主節(jié)點(diǎn)。在本發(fā)明中,服務(wù)器作為會(huì)話通訊的節(jié)點(diǎn)(以下,稱(chēng)其為節(jié)點(diǎn))。當(dāng)所有節(jié)點(diǎn)的服務(wù)器被啟動(dòng)的時(shí)候,基礎(chǔ)庫(kù)進(jìn)行一系列初始化工作,包括與其它節(jié)點(diǎn)建立網(wǎng)絡(luò)連接,向各節(jié)點(diǎn)發(fā)送分布式選舉算法協(xié)議報(bào)文,利用主節(jié)點(diǎn)的選舉算法,在所有節(jié)點(diǎn)中選舉出主節(jié)點(diǎn),主節(jié)點(diǎn)以外的節(jié)點(diǎn)為非主節(jié)點(diǎn)。其中,主節(jié)點(diǎn)指具備將從某一非主節(jié)點(diǎn)接收的會(huì)話數(shù)據(jù)向所有其他非主節(jié)點(diǎn)進(jìn)行廣播轉(zhuǎn)發(fā)的功能的節(jié)點(diǎn)。非主節(jié)點(diǎn)指能夠與客戶(hù)端直接進(jìn)行會(huì)話并產(chǎn)生會(huì)話數(shù)據(jù)的節(jié)點(diǎn)。主節(jié)點(diǎn)的選舉算法將在下文進(jìn)行詳細(xì)描述。
[0028]步驟110,非主節(jié)點(diǎn)檢測(cè)變化的會(huì)話數(shù)據(jù)。具體地,通過(guò)非主節(jié)點(diǎn)檢測(cè)數(shù)據(jù)差量變化來(lái)檢測(cè)變化的會(huì)話數(shù)據(jù)。圖2示意性示出了本發(fā)明的主節(jié)點(diǎn)與非主節(jié)點(diǎn)間的通訊模型示意圖。如圖2所示,非主節(jié)點(diǎn)檢測(cè)會(huì)話數(shù)據(jù)變化的具體方式如下所示:
[0029]方法一:利用專(zhuān)用于會(huì)話數(shù)據(jù)管理的數(shù)據(jù)類(lèi)型庫(kù),該庫(kù)是對(duì)服務(wù)器編程語(yǔ)言庫(kù)中基本類(lèi)型的簡(jiǎn)單封裝,并且提供操作對(duì)應(yīng)會(huì)話數(shù)據(jù)的API接口。為每一種編程語(yǔ)言基本數(shù)據(jù)類(lèi)型添加一個(gè)屬性,該屬性用于記錄該會(huì)話數(shù)據(jù)的變化狀態(tài),若使用會(huì)話數(shù)據(jù)管理庫(kù)提供的API修改會(huì)話數(shù)據(jù)時(shí),該屬性將被置為“已經(jīng)修改”,此時(shí)數(shù)據(jù)差量檢測(cè)模塊能檢測(cè)到這個(gè)變化了的數(shù)據(jù)。
[0030]方法二:對(duì)于JAVA語(yǔ)言或者其它基于虛擬機(jī)解釋的語(yǔ)言,可以提供一個(gè)虛擬機(jī)之上的中間層,該中間層能夠監(jiān)測(cè)到服務(wù)器應(yīng)用程序的會(huì)話數(shù)據(jù)內(nèi)存分配和修改,從而實(shí)現(xiàn)會(huì)話數(shù)據(jù)監(jiān)測(cè)。
[0031]步驟115,非主節(jié)點(diǎn)對(duì)檢測(cè)出的變化的會(huì)話數(shù)據(jù)進(jìn)行序列化操作,來(lái)將零散的數(shù)據(jù)序列化為二進(jìn)制數(shù)據(jù)流。
[0032]步驟120,非主節(jié)點(diǎn)對(duì)產(chǎn)生的二進(jìn)制數(shù)據(jù)流進(jìn)行數(shù)據(jù)壓縮操作。壓縮算法可以采用本領(lǐng)域常用的數(shù)據(jù)壓縮算法,本發(fā)明使用的壓縮方案例如是zlib ;
[0033]步驟125,非主節(jié)點(diǎn)使用簽名生成算法對(duì)準(zhǔn)備傳輸?shù)膲嚎s后的數(shù)據(jù)生成簽名,并將其附加在數(shù)據(jù)頭部或者尾部。簽名算法可以采用本領(lǐng)域常用的算法,本發(fā)明采用的簽名生成算法例如是MD5或者SHA-1摘要算法;
[0034]步驟130,非主節(jié)點(diǎn)將經(jīng)壓縮和簽名后的變化的會(huì)話數(shù)據(jù)發(fā)往主節(jié)點(diǎn)。主節(jié)點(diǎn)指具備將會(huì)話數(shù)據(jù)轉(zhuǎn)發(fā)到其他非主節(jié)點(diǎn)的功能的服務(wù)器。
[0035]步驟135,在主節(jié)點(diǎn)接收到來(lái)自非主節(jié)點(diǎn)的數(shù)據(jù)時(shí),進(jìn)行數(shù)據(jù)校驗(yàn)操作。數(shù)據(jù)校驗(yàn)的過(guò)程是,接收方從接收到的數(shù)據(jù)頭部或尾部中讀出簽名,并使用與數(shù)據(jù)發(fā)送方相同的簽名生成算法計(jì)算簽名,然后比較從數(shù)據(jù)頭部或尾部中讀出的簽名與接收方計(jì)算得出的簽名,若簽名不一致,則通知數(shù)據(jù)發(fā)送方重新傳送此數(shù)據(jù);若校驗(yàn)無(wú)誤,則繼續(xù)進(jìn)行下一步操作;
[0036]步驟140,主節(jié)點(diǎn)將非主節(jié)點(diǎn)中變化的會(huì)話數(shù)據(jù)向其他非主節(jié)點(diǎn)廣播轉(zhuǎn)發(fā)。[0037]步驟145,在其他各非主節(jié)點(diǎn)收到來(lái)自主節(jié)點(diǎn)的數(shù)據(jù)時(shí),進(jìn)行數(shù)據(jù)校驗(yàn)操作。數(shù)據(jù)校驗(yàn)的過(guò)程與步驟135相同。
[0038]步驟150,各非主節(jié)點(diǎn)對(duì)數(shù)據(jù)進(jìn)行解壓縮操作。使用的解壓縮方案與步驟120中使用的壓縮方案相對(duì)應(yīng),例如是zlib。
[0039]步驟155,各非主節(jié)點(diǎn)對(duì)接收到的數(shù)據(jù)進(jìn)行反序列化操作,來(lái)將二進(jìn)制數(shù)據(jù)恢復(fù)為原始數(shù)據(jù)。序列化格式例如是JS0N,對(duì)于用于序列化的庫(kù),例如可以采用msgpack方案。
[0040]優(yōu)選地,系統(tǒng)具有主節(jié)點(diǎn)的失效預(yù)防機(jī)制,當(dāng)主節(jié)點(diǎn)出現(xiàn)故障時(shí),所有非主節(jié)點(diǎn)會(huì)根據(jù)分布式選舉算法相關(guān)協(xié)議重新選舉出新的主節(jié)點(diǎn),來(lái)繼續(xù)承擔(dān)對(duì)會(huì)話數(shù)據(jù)的轉(zhuǎn)發(fā)的工作,從而保證在任何情況下均有主節(jié)點(diǎn)進(jìn)行全局?jǐn)?shù)據(jù)轉(zhuǎn)發(fā)。
[0041]下面對(duì)主節(jié)點(diǎn)的選舉算法進(jìn)行介紹。在進(jìn)行主節(jié)點(diǎn)的選舉時(shí)每一個(gè)節(jié)點(diǎn)均同時(shí)扮演兩種角色,即提議者(proposer),接受者(acceptor)。
[0042]主節(jié)點(diǎn)選舉的過(guò)程包括準(zhǔn)備(prepare)和提交(propose)兩個(gè)階段。圖4示意性示出了主節(jié)點(diǎn)選舉的流程圖。如圖4所示,主節(jié)點(diǎn)選舉具體步驟如下:
[0043]步驟410,每個(gè)節(jié)點(diǎn)作為提議者向所有其它節(jié)點(diǎn)廣播發(fā)送一個(gè)準(zhǔn)備階段請(qǐng)求,同時(shí),每個(gè)節(jié)點(diǎn)作為提議者(proposer)啟動(dòng)定時(shí)器Timerl,等待T秒,若某節(jié)點(diǎn)在T秒內(nèi)未收到來(lái)自其他節(jié)點(diǎn)的響應(yīng)(關(guān)于來(lái)自其他節(jié)點(diǎn)的響應(yīng)將在后面的步驟進(jìn)行說(shuō)明)則該節(jié)點(diǎn)重新進(jìn)入步驟410發(fā)起準(zhǔn)備階段(prepare)請(qǐng)求。
[0044]其中,準(zhǔn)備階段請(qǐng)求的格式例如為(提議編號(hào),提議者id,鎖釋放時(shí)間),即(ballotnumber,proposer id,T),其中,ballot number為自己提交的提議編號(hào),該編號(hào)可以隨機(jī)生成,也可以使用諸如自己的IP對(duì)應(yīng)的32bits正整數(shù)。proposer id代表本節(jié)點(diǎn)身份的id ;T為每個(gè)節(jié)點(diǎn)(包括將來(lái)成為主節(jié)點(diǎn)的節(jié)點(diǎn))的鎖釋放(Lease)時(shí)間(秒)。此外,在準(zhǔn)備階段請(qǐng)求中還包括一個(gè)標(biāo)識(shí)字段,來(lái)標(biāo)識(shí)該請(qǐng)求是一個(gè)準(zhǔn)備階段的請(qǐng)求。
[0045]此處設(shè)置定時(shí)器的目的為,由于任何節(jié)點(diǎn)都可能出現(xiàn)故障,節(jié)點(diǎn)間網(wǎng)絡(luò)可能抖動(dòng),因此請(qǐng)求和回復(fù)都不是能絕對(duì)及時(shí)地到達(dá)目的方,而啟動(dòng)定時(shí)器就是對(duì)這些情況進(jìn)行容忍。同時(shí)也為了不至于永遠(yuǎn)達(dá)不到一致,所以也設(shè)置了最長(zhǎng)等待時(shí)間,如果這個(gè)時(shí)間沒(méi)有收到回復(fù),則認(rèn)為沒(méi)有回復(fù)。
[0046]步驟420,每個(gè)節(jié)點(diǎn)作為接受者根據(jù)請(qǐng)求中的編號(hào)大小回復(fù)響應(yīng)。具體地,對(duì)收到的每個(gè)準(zhǔn)備階段請(qǐng)求(prepare request),每個(gè)節(jié)點(diǎn)作為接受者(acceptor)判斷請(qǐng)求中的ballot number是否等于或高于自己保存的已經(jīng)接受的提議編號(hào)。是則每個(gè)作為接受者的節(jié)點(diǎn)回復(fù)一個(gè)表示接受該提議的接收響應(yīng),并且,回答中有在接受此請(qǐng)求之前當(dāng)前已接受的提議編號(hào),此編號(hào)可以為空(當(dāng)之前沒(méi)有接受過(guò)任何提案時(shí)為空);否則,每個(gè)作為接受者的節(jié)點(diǎn)向請(qǐng)求者回復(fù)一個(gè)表示拒絕該提議的拒絕響應(yīng),特別地,該表示拒絕提議的拒絕響應(yīng)中也包括該接受者節(jié)點(diǎn)此前已接受的提議編號(hào),使收到拒絕響應(yīng)的節(jié)點(diǎn)能根據(jù)回復(fù)情況加大編號(hào)重新競(jìng)選,從而加快選舉過(guò)程。
[0047]步驟430,每個(gè)節(jié)點(diǎn)作為提議者(proposer),判斷是否收到來(lái)自多數(shù)派的接受者(例如,大于50%的接受者)的接受響應(yīng),若是則進(jìn)入步驟440,否則進(jìn)入步驟450;
[0048]步驟440,收到來(lái)自多數(shù)派的接受者的接受響應(yīng)的節(jié)點(diǎn),向所有其他節(jié)點(diǎn)發(fā)送提交階段請(qǐng)求(propose request),其中包含了提議編號(hào)(ballot number)以及租約時(shí)間(它自己的T),此外在提交階段請(qǐng)求中還包括一個(gè)標(biāo)識(shí)字段,來(lái)標(biāo)識(shí)該請(qǐng)求是一個(gè)提交階段的請(qǐng)求。其中,提議編號(hào)的確定方法是這樣的,在收到的多數(shù)派接受響應(yīng)包含的ballot number中,選取一個(gè)最大的作為提議階段請(qǐng)求編號(hào),所有節(jié)點(diǎn)在發(fā)出提議階段請(qǐng)求時(shí)都必須遵守這一原則;這里,只要有一個(gè)節(jié)點(diǎn)達(dá)到“收到來(lái)自多數(shù)派的接受者的接受響應(yīng)”這個(gè)要求,該節(jié)點(diǎn)即可進(jìn)入“提交階段”狀態(tài),發(fā)出提交階段請(qǐng)求,且收到該提交階段請(qǐng)求的節(jié)點(diǎn)會(huì)因?yàn)檫@個(gè)請(qǐng)求而進(jìn)入“提交階段”。
[0049]步驟450,提議者加大提議編號(hào)重新提交準(zhǔn)備階段請(qǐng)求。則該提議者節(jié)點(diǎn)根據(jù)收到的拒絕響應(yīng)中記錄的提議編號(hào),在收到的拒絕響應(yīng)中選取最大的一個(gè)編號(hào)作為基礎(chǔ),在此基礎(chǔ)上加大編號(hào)再重新提交準(zhǔn)備階段請(qǐng)求。
[0050]步驟460,接受者根據(jù)請(qǐng)求中的編號(hào)大小回復(fù)響應(yīng)。具體地,接受者(acceptor)收到提議請(qǐng)求時(shí),判斷請(qǐng)求中的提議編號(hào)是否等于或高于自己本地記錄的已經(jīng)接受的提議編號(hào),是則接受者接受這個(gè)提議,同時(shí)啟動(dòng)過(guò)期時(shí)間T的超時(shí)計(jì)時(shí)器Timer2,設(shè)置它已接受的提議編號(hào)為這個(gè)收到的提議編號(hào)。接受者回復(fù)響應(yīng)結(jié)果是接受(accept)的提議響應(yīng),響應(yīng)中包含有已經(jīng)接受的提議編號(hào)。在超時(shí)過(guò)期后,接受者重置它已接受的提案為空。接受者決不重置它的已承諾的最高投票編號(hào),除非在重啟的時(shí)候;否則發(fā)送一個(gè)響應(yīng)結(jié)果是拒絕(reject)的提議響應(yīng)(propose response);
[0051]步驟470,將第一個(gè)收到來(lái)自多數(shù)派的接受響應(yīng)的節(jié)點(diǎn)作為主節(jié)點(diǎn)。具體地,所有作為提議者的節(jié)點(diǎn)檢查提議響應(yīng)(propose response)消息,判斷是否有多數(shù)派的接受者響應(yīng)了接受提案,是則這個(gè)提議者獲得了租約,切換它的內(nèi)部狀態(tài)到“我持有租約”,此時(shí)該節(jié)點(diǎn)也就是選舉出的主節(jié)點(diǎn),同時(shí)啟動(dòng)定時(shí)器Timer3,設(shè)定超時(shí)時(shí)間為T(mén)I (TI時(shí)間要小于T)。當(dāng)主節(jié)點(diǎn)選出后,為了保證不進(jìn)行無(wú)謂的選舉過(guò)程,主節(jié)點(diǎn)需要在租約時(shí)間Tl過(guò)期前向所有其它節(jié)點(diǎn)廣播一個(gè)續(xù)約消息,表示自己正在正常擔(dān)任主節(jié)點(diǎn)。其中,節(jié)點(diǎn)獲得租約的時(shí)刻為該節(jié)點(diǎn)收到來(lái)自超過(guò)50%的節(jié)點(diǎn)的接收響應(yīng)的時(shí)刻,即它收到多數(shù)派接受響應(yīng)的最后一條的時(shí)刻。如果主節(jié)點(diǎn)故障不能正常服務(wù),則它會(huì)在其它節(jié)點(diǎn)的租約時(shí)間Tl到期的時(shí)候不能發(fā)出續(xù)約請(qǐng)求,即定時(shí)器Timer3超時(shí),此時(shí)所有節(jié)點(diǎn)重新進(jìn)入選舉流程,直到選出新的主節(jié)點(diǎn)。
[0052]優(yōu)選地,當(dāng)故障節(jié)點(diǎn)重新恢復(fù)時(shí),在重新加入選舉前必須等待M秒;
[0053]優(yōu)選地,以上提到的三個(gè)定時(shí)器Timerl、Timer2、Timer3其實(shí)位于同一節(jié)點(diǎn)和同
一進(jìn)程中。
[0054]此處對(duì)主節(jié)點(diǎn)選舉過(guò)程中的所有定時(shí)器進(jìn)行歸納總結(jié)。定時(shí)器Timerl運(yùn)行于所有的節(jié)點(diǎn),任何一個(gè)節(jié)點(diǎn)的Timerl超時(shí),則該節(jié)點(diǎn)便重新計(jì)入步驟410發(fā)起準(zhǔn)備階段請(qǐng)求;Timer2僅運(yùn)行與參與提交階段的節(jié)點(diǎn),如果超期則清空本次選舉狀態(tài);Timer3僅運(yùn)行于第一個(gè)收到來(lái)自多數(shù)派的接受響應(yīng)的節(jié)點(diǎn),即主節(jié)點(diǎn),并且通過(guò)將Timerf的超時(shí)時(shí)間Tl小于Timerl的超時(shí)時(shí)間T的方式,使主節(jié)點(diǎn)在Timerl超時(shí)之前續(xù)租。
[0055]利用本發(fā)明的服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法,能夠有效提高服務(wù)器集群處理性能,能夠有效地降低服務(wù)器間數(shù)據(jù)傳輸量,降低網(wǎng)絡(luò)壓力和CPU壓力,并且能夠有效地同步異構(gòu)的服務(wù)器的會(huì)話數(shù)據(jù),整合服務(wù)器資源。
[0056]結(jié)合這里披露的本發(fā)明的說(shuō)明和實(shí)踐,本發(fā)明的其他實(shí)施例對(duì)于本領(lǐng)域技術(shù)人員都是易于想到和理解的。說(shuō)明和實(shí)施例僅被認(rèn)為是示例性的,本發(fā)明的真正范圍和主旨均由權(quán)利要求所限定。
【權(quán)利要求】
1.一種在多個(gè)服務(wù)器間客戶(hù)端會(huì)話數(shù)據(jù)共享方法,所述服務(wù)器作為會(huì)話通訊的節(jié)點(diǎn),所述方法包括如下步驟: a)在共享會(huì)話數(shù)據(jù)的多個(gè)節(jié)點(diǎn)中間選舉主節(jié)點(diǎn); b)非主節(jié)點(diǎn)檢測(cè)變化的會(huì)話數(shù)據(jù); c)非主節(jié)點(diǎn)對(duì)檢測(cè)出的變化的會(huì)話數(shù)據(jù)進(jìn)行序列化操作,轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)流; d)非主節(jié)點(diǎn)對(duì)產(chǎn)生的二進(jìn)制數(shù)據(jù)流進(jìn)行數(shù)據(jù)壓縮操作; e)非主節(jié)點(diǎn)使用簽名生成算法對(duì)準(zhǔn)備傳輸?shù)膲嚎s后的數(shù)據(jù)生成簽名,并將其附加在數(shù)據(jù)頭部或者尾部; f)非主節(jié)點(diǎn)將經(jīng)壓縮和簽名后的變化的會(huì)話數(shù)據(jù)發(fā)往主節(jié)點(diǎn); g)在所述主節(jié)點(diǎn)接收到來(lái)自非主節(jié)點(diǎn)的數(shù)據(jù)時(shí),進(jìn)行數(shù)據(jù)校驗(yàn)操作; h)所述主節(jié)點(diǎn)將非主節(jié)點(diǎn)中變化的會(huì)話數(shù)據(jù)向其他非主節(jié)點(diǎn)廣播轉(zhuǎn)發(fā); i)所述其他各非主節(jié)點(diǎn)收到來(lái)自主節(jié)點(diǎn)的數(shù)據(jù)時(shí),進(jìn)行數(shù)據(jù)校驗(yàn)操作; j)所述各非主節(jié)點(diǎn)對(duì)數(shù)據(jù)進(jìn)行解壓縮操作; k)所述各非主節(jié)點(diǎn)對(duì)接收到的數(shù)據(jù)進(jìn)行反序列化操作,來(lái)將二進(jìn)制數(shù)據(jù)恢復(fù)為原始數(shù)據(jù)。
2.如權(quán)利要求1所述的方`法,其中所述主節(jié)點(diǎn)指具備將會(huì)話數(shù)據(jù)轉(zhuǎn)發(fā)到其他非主節(jié)點(diǎn)的功能的服務(wù)器。
3.如權(quán)利要求1所述的方法,其中所述非主節(jié)點(diǎn)指能夠與客戶(hù)端直接進(jìn)行會(huì)話并產(chǎn)生會(huì)話數(shù)據(jù)的節(jié)點(diǎn)。
4.如權(quán)利要求1所述的方法,在步驟a中,主節(jié)點(diǎn)選舉的過(guò)程包括準(zhǔn)備階段和提交階段,包括如下步驟: al)每個(gè)節(jié)點(diǎn)向所有其它節(jié)點(diǎn)廣播發(fā)送一個(gè)準(zhǔn)備階段請(qǐng)求; a2)根據(jù)接受的請(qǐng)求中的編號(hào)大小回復(fù)響應(yīng); a3)判斷是否收到來(lái)自多數(shù)派的接受響應(yīng),若是則進(jìn)入步驟a4,否則進(jìn)入步驟a5; a4)向所有其他節(jié)點(diǎn)發(fā)送提交階段請(qǐng)求; a5)加大提議編號(hào)重新提交準(zhǔn)備階段請(qǐng)求; a6)根據(jù)請(qǐng)求中的編號(hào)大小回復(fù)響應(yīng); a7)將第一個(gè)收到來(lái)自多數(shù)派的接受響應(yīng)的節(jié)點(diǎn)作為主節(jié)點(diǎn)。
5.如權(quán)利要求1所述的方法,其中所述步驟b是通過(guò)非主節(jié)點(diǎn)檢測(cè)數(shù)據(jù)差量變化來(lái)檢測(cè)變化的會(huì)話數(shù)據(jù)
6.如權(quán)利要求5所述的方法,其中利用專(zhuān)用于會(huì)話數(shù)據(jù)管理的數(shù)據(jù)類(lèi)型庫(kù),并且提供操作對(duì)應(yīng)會(huì)話數(shù)據(jù)的API接口,若使用會(huì)話數(shù)據(jù)管理庫(kù)提供的API修改會(huì)話數(shù)據(jù)時(shí),則檢測(cè)該變化了的數(shù)據(jù)。
7.如權(quán)利要求5所述的方法,其中對(duì)于基于虛擬機(jī)解釋的語(yǔ)言,提供虛擬機(jī)之上的中間層,該中間層能夠監(jiān)測(cè)到服務(wù)器應(yīng)用程序的會(huì)話數(shù)據(jù)內(nèi)存分配和修改,從而實(shí)現(xiàn)會(huì)話數(shù)據(jù)監(jiān)測(cè)。
8.如權(quán)利要求1所述的方法,其中所述步驟d和j中的壓縮算法是zlib。
9.如權(quán)利要求1所述的方法,其中所述步驟e中的簽名算法是MD5或者SHA-1摘要算法。
10.如權(quán)利要求1所述的方法,其中所述步驟i中的數(shù)據(jù)校驗(yàn)的過(guò)程是,接收方從接收到的數(shù)據(jù)頭部或尾部中讀出簽名,并使用與數(shù)據(jù)發(fā)送方相同的簽名生成算法計(jì)算簽名,然后比較從數(shù)據(jù)頭部或尾部中讀出的簽名與接收方計(jì)算得出的簽名,若簽名不一致,則通知數(shù)據(jù)發(fā)送方重新傳送此數(shù)據(jù);`若校驗(yàn)無(wú)誤,則繼續(xù)進(jìn)行下一步操作。
【文檔編號(hào)】H04L29/06GK103780615SQ201410026973
【公開(kāi)日】2014年5月7日 申請(qǐng)日期:2014年1月20日 優(yōu)先權(quán)日:2014年1月20日
【發(fā)明者】朱為, 沈劍, 吳廷鵬 申請(qǐng)人:五八同城信息技術(shù)有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
锡林浩特市| 乃东县| 宜宾县| 淮安市| 陈巴尔虎旗| 汉源县| 湖南省| 南川市| 萨嘎县| 嘉禾县| 大安市| 青龙| 手游| 大姚县| 丹棱县| 江津市| 嘉禾县| 宕昌县| 天台县| 长乐市| 三明市| 鄂托克前旗| 濮阳县| 柞水县| 丹凤县| 沭阳县| 克东县| 轮台县| 榆中县| 乌拉特后旗| 肇源县| 城市| 龙岩市| 南川市| 德保县| 伊通| 普定县| 宜城市| 隆化县| 汉中市| 呼图壁县|