一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法及裝置制造方法
【專利摘要】本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域,尤其涉及一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法及裝置,用以解決現(xiàn)有技術(shù)中由于集群非主節(jié)點(diǎn)數(shù)據(jù)版本落后,無(wú)法參與后續(xù)數(shù)據(jù)協(xié)商,影響系統(tǒng)業(yè)務(wù)的正常進(jìn)行的問(wèn)題。本發(fā)明實(shí)施例提供的一種數(shù)據(jù)協(xié)商方法包括:在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),判斷是否需要進(jìn)行決議追趕;在確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
【專利說(shuō)明】一種分布式系統(tǒng)中數(shù)據(jù)協(xié)間方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域,尤其涉及一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法及裝置。
【背景技術(shù)】
[0002]目前,分布式系統(tǒng)中節(jié)點(diǎn)之間通過(guò)數(shù)據(jù)協(xié)商來(lái)保證系統(tǒng)中大多數(shù)節(jié)點(diǎn)數(shù)據(jù)的一致性,系統(tǒng)內(nèi)相互通信的各個(gè)節(jié)點(diǎn)形成一個(gè)集群;PaX0S算法是分布式系統(tǒng)中常用的數(shù)據(jù)一致性算法。
[0003]在Paxos算法中,不同決議的決議編號(hào)需要滿足偏序關(guān)系,為了滿足這種關(guān)系,集群主節(jié)點(diǎn)一般使用遞增的數(shù)值作為決議編號(hào)。節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程一般是:集群主節(jié)點(diǎn)將當(dāng)前需要協(xié)商的決議(value)的決議編號(hào)設(shè)為n,向系統(tǒng)內(nèi)的各集群非主節(jié)點(diǎn)發(fā)送開始協(xié)商消息,其中包含決議編號(hào)η和決議;集群非主節(jié)點(diǎn)在接收到集群主節(jié)點(diǎn)發(fā)送的開始協(xié)商消息后,若確認(rèn)該決議的決議編號(hào)η為本節(jié)點(diǎn)已批準(zhǔn)的決議的最大決議編號(hào)加I后的編號(hào),則向集群主節(jié)點(diǎn)回復(fù)批準(zhǔn)該決議;集群主節(jié)點(diǎn)在系統(tǒng)內(nèi)大多數(shù)非主節(jié)點(diǎn)批準(zhǔn)該決議后,確認(rèn)協(xié)商一致,則向批準(zhǔn)該決議的大多數(shù)集群非主節(jié)點(diǎn)發(fā)送提交(commit)消息,并在自己節(jié)點(diǎn)提交決議(也即根據(jù)該決議的內(nèi)容,對(duì)自己節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行相關(guān)處理,比如添加、刪除或修改數(shù)據(jù)等);各集群非主節(jié)點(diǎn)在接收到集群主節(jié)點(diǎn)發(fā)送的提交消息后,在自己節(jié)點(diǎn)提交決議(也即根據(jù)該決議的內(nèi)容,對(duì)自己節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行相關(guān)處理,比如添加、刪除或修改數(shù)據(jù)等)。
[0004]從上述協(xié)商過(guò)程可知,集群主節(jié)點(diǎn)只有在系統(tǒng)內(nèi)大多數(shù)非主節(jié)點(diǎn)都批準(zhǔn)該決議后,才會(huì)發(fā)送提交消息,也即,只有大多數(shù)集群非主節(jié)點(diǎn)都批準(zhǔn)該決議后,才意味著該決議的協(xié)商成功,各節(jié)點(diǎn)才能進(jìn)一步在自己節(jié)點(diǎn)提交決議。但是,在協(xié)商過(guò)程中,個(gè)別集群非主節(jié)點(diǎn)的通信鏈路可能會(huì)出現(xiàn)問(wèn)題(比如非主節(jié)點(diǎn)掉電重啟、鏈路中斷等),還有可能出現(xiàn)一些集群非主節(jié)點(diǎn)退出系統(tǒng),另外一些新的集群非節(jié)點(diǎn)加入系統(tǒng),而新加入的集群非主節(jié)點(diǎn)的數(shù)據(jù)版本落后于集群主節(jié)點(diǎn)。這樣,在協(xié)商過(guò)程中,能夠批準(zhǔn)集群主節(jié)點(diǎn)發(fā)送的最新決議的集群非主節(jié)點(diǎn)就會(huì)越來(lái)越少,協(xié)商一致的幾率會(huì)越來(lái)越低,一旦集群中一半數(shù)量的集群非主節(jié)點(diǎn)版本落后,后續(xù)的決議都將無(wú)法協(xié)商一致,這時(shí)就需要中斷協(xié)商過(guò)程,通過(guò)人工干預(yù)更新各集群非主節(jié)點(diǎn)的最新數(shù)據(jù)。
[0005]通過(guò)上述分析可知,當(dāng)集群非主節(jié)點(diǎn)數(shù)據(jù)版本落后時(shí),將無(wú)法參與后續(xù)數(shù)據(jù)協(xié)商,隨著數(shù)據(jù)版本落后的集群非主節(jié)點(diǎn)越來(lái)越多,數(shù)據(jù)協(xié)商失敗的概率越來(lái)越大,從而影響系統(tǒng)業(yè)務(wù)的正常進(jìn)行。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施例提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法及裝置,用以解決現(xiàn)有技術(shù)中由于集群非主節(jié)點(diǎn)數(shù)據(jù)版本落后,無(wú)法參與后續(xù)數(shù)據(jù)協(xié)商,影響系統(tǒng)業(yè)務(wù)的正常進(jìn)行的問(wèn)題。
[0007]第一方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法,包括:
[0008]在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),判斷是否需要進(jìn)行決議追趕;
[0009]在確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0010]結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕,包括:
[0011]接收集群主節(jié)點(diǎn)發(fā)送的開始協(xié)商消息;
[0012]將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后,與所述開始協(xié)商消息中包含的最大決議編號(hào)進(jìn)行比較;所述開始協(xié)商消息中包含的最大決議編號(hào)為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個(gè)決議的決議編號(hào);
[0013]若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后,小于所述開始協(xié)商消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0014]結(jié)合第一方面,在第二種可能的實(shí)現(xiàn)方式中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕,包括:
[0015]接收所述集群主節(jié)點(diǎn)發(fā)送的提交消息;
[0016]將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上最近一次批準(zhǔn)的打包決議的決議個(gè)數(shù)后,與所述提交消息中包含的最大決議編號(hào)進(jìn)行比較,所述提交消息中包含的最大決議編號(hào)為所述打包決議中最后一個(gè)決議的決議編號(hào);
[0017]若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,小于所述提交消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0018]結(jié)合第一方面,或第一方面的第一或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,包括:
[0019]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議;
[0020]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值時(shí),或者本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0021]結(jié)合第一方面,或第一方面的第一至三種可能的實(shí)現(xiàn)方式中的任意一種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,包括:
[0022]向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)發(fā)送追趕消息;
[0023]接收所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)根據(jù)所述追趕消息發(fā)送的決議。
[0024]結(jié)合第一方面,或第一方面的第一至四種可能的實(shí)現(xiàn)方式中的任意一種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0025]在初始化完成后,啟動(dòng)等待接收消息的定時(shí)器;
[0026]若在接收到所述集群主節(jié)點(diǎn)發(fā)送的任何消息之前定時(shí)器超時(shí),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取已協(xié)商一致的決議。
[0027]第二方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法,該方法包括:
[0028]接收集群非主節(jié)點(diǎn)發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和所述集群非主節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)信息;
[0029]根據(jù)所述追趕消息中包括的最大決議編號(hào)和本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),確定需要發(fā)送給所述集群非主節(jié)點(diǎn)的決議;
[0030]根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0031]結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn),包括:
[0032]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目小于等于設(shè)定閾值,則根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議進(jìn)行打包;并
[0033]將打包后的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0034]結(jié)合第二方面,在第二種可能的實(shí)現(xiàn)方式中,根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn),包括:
[0035]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目大于設(shè)定閾值,則將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議劃分為多個(gè)分片,其中,每個(gè)分片包含的決議個(gè)數(shù)小于等于所述設(shè)定閾值,并
[0036]將每個(gè)分片分別發(fā)送給所述集群非主節(jié)點(diǎn)。
[0037]第三方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置,包括:
[0038]判斷模塊,用于在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),判斷是否需要進(jìn)行決議追趕;
[0039]獲取模塊,用于在所述判斷模塊確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0040]結(jié)合第三方面,在第一種可能的實(shí)現(xiàn)方式中,所述判斷模塊具體用于:
[0041]接收集群主節(jié)點(diǎn)發(fā)送的開始協(xié)商消息;將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,與所述開始協(xié)商消息中包含的最大決議編號(hào)進(jìn)行比較;所述開始協(xié)商消息中包含的最大決議編號(hào)為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個(gè)決議的決議編號(hào);若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,小于所述開始協(xié)商消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0042]結(jié)合第三方面,在第二種可能的實(shí)現(xiàn)方式中,所述判斷模塊具體用于:
[0043]接收所述集群主節(jié)點(diǎn)發(fā)送的提交消息;將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上最近一次批準(zhǔn)的打包決議的決議個(gè)數(shù)后,與所述提交消息中包含的最大決議編號(hào)進(jìn)行比較,所述提交消息中包含的最大決議編號(hào)為所述打包決議中最后一個(gè)決議的決議編號(hào);若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,小于所述提交消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0044]結(jié)合第三方面,或第三方面的第一或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述獲取模塊具體用于:
[0045]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議;
[0046]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值時(shí),或者本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0047]結(jié)合第三方面,或第三方面的第一至三種可能的實(shí)現(xiàn)方式中的任意一種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述獲取模塊具體用于:
[0048]向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)發(fā)送追趕消息;接收所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)根據(jù)所述追趕消息發(fā)送的決議。
[0049]結(jié)合第三方面,或第三方面的第一至四種可能的實(shí)現(xiàn)方式中的任意一種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述獲取模塊還用于:
[0050]在初始化完成后,啟動(dòng)等待接收消息的定時(shí)器;若在接收到所述集群主節(jié)點(diǎn)發(fā)送的任何消息之前定時(shí)器超時(shí),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取已協(xié)商一致的決議。
[0051]第四方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置,包括:
[0052]接收模塊,用于接收集群非主節(jié)點(diǎn)發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和所述集群非主節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)信息;
[0053]確定模塊,用于根據(jù)所述接收模塊接收的追趕消息中包括的最大決議編號(hào)和本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),確定需要發(fā)送給所述集群非主節(jié)點(diǎn)的決議;
[0054]發(fā)送模塊,用于根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將所述確定模塊確定的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0055]結(jié)合第四方面,在第一種可能的實(shí)現(xiàn)方式中,所述發(fā)送模塊具體用于:
[0056]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目小于等于設(shè)定閾值,則根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議進(jìn)行打包;并將打包后的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0057]結(jié)合第四方面,在第二種可能的實(shí)現(xiàn)方式中,所述發(fā)送模塊具體用于:
[0058]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目大于設(shè)定閾值,則將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議劃分為多個(gè)分片,其中,每個(gè)分片包含的決議個(gè)數(shù)小于等于所述設(shè)定閾值,并將每個(gè)分片分別發(fā)送給所述集群非主節(jié)點(diǎn)。
[0059]第五方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商設(shè)備,該設(shè)備包括處理器、存儲(chǔ)器和總線,所述存儲(chǔ)器存儲(chǔ)執(zhí)行指令,當(dāng)所述設(shè)備運(yùn)行時(shí),所述處理器與所述存儲(chǔ)器之間通過(guò)總線通信,所述處理器執(zhí)行所述執(zhí)行指令使得所述設(shè)備執(zhí)行如下方法:
[0060]在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),判斷是否需要進(jìn)行決議追趕;
[0061]在確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0062]結(jié)合第五方面,在第一種可能的實(shí)現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕,包括:
[0063]接收集群主節(jié)點(diǎn)發(fā)送的開始協(xié)商消息;
[0064]將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,與所述開始協(xié)商消息中包含的最大決議編號(hào)進(jìn)行比較;所述開始協(xié)商消息中包含的最大決議編號(hào)為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個(gè)決議的決議編號(hào);
[0065]若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,小于所述開始協(xié)商消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0066]結(jié)合第五方面,在第二種可能的實(shí)現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕,包括:
[0067]接收所述集群主節(jié)點(diǎn)發(fā)送的提交消息;
[0068]將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上最近一次批準(zhǔn)的打包決議的決議個(gè)數(shù)后,與所述提交消息中包含的最大決議編號(hào)進(jìn)行比較,所述提交消息中包含的最大決議編號(hào)為所述打包決議中最后一個(gè)決議的決議編號(hào);
[0069]若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,小于所述提交消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0070]結(jié)合第五方面,或第五方面的第一或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,包括:
[0071]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議;
[0072]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值時(shí),或者本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0073]結(jié)合第五方面,或第五方面的第一至三種可能的實(shí)現(xiàn)方式中的任意一種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,包括:
[0074]向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)發(fā)送追趕消息;
[0075]接收所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)根據(jù)所述追趕消息發(fā)送的決議。
[0076]結(jié)合第五方面,或第五方面的第一至四種可能的實(shí)現(xiàn)方式中的任意一種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述處理器執(zhí)行的所述方法還包括:
[0077]在初始化完成后,啟動(dòng)等待接收消息的定時(shí)器;
[0078]若在接收到所述集群主節(jié)點(diǎn)發(fā)送的任何消息之前定時(shí)器超時(shí),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取已協(xié)商一致的決議。
[0079]第六方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商設(shè)備,該設(shè)備包括處理器、存儲(chǔ)器和總線,所述存儲(chǔ)器存儲(chǔ)執(zhí)行指令,當(dāng)所述設(shè)備運(yùn)行時(shí),所述處理器與所述存儲(chǔ)器之間通過(guò)總線通信,所述處理器執(zhí)行所述執(zhí)行指令使得所述設(shè)備執(zhí)行如下方法:
[0080]接收集群非主節(jié)點(diǎn)發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和所述集群非主節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)信息;
[0081]根據(jù)所述追趕消息中包括的最大決議編號(hào)和本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),確定需要發(fā)送給所述集群非主節(jié)點(diǎn)的決議;
[0082]根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0083]結(jié)合第六方面,在第一種可能的實(shí)現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn),包括:
[0084]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目小于等于設(shè)定閾值,則根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議進(jìn)行打包;并
[0085]將打包后的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0086]結(jié)合第六方面,在第二種可能的實(shí)現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn),包括:
[0087]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目大于設(shè)定閾值,則將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議劃分為多個(gè)分片,其中,每個(gè)分片包含的決議個(gè)數(shù)小于等于所述設(shè)定閾值,并
[0088]將每個(gè)分片分別發(fā)送給所述集群非主節(jié)點(diǎn)。
[0089]采用上述方法、裝置或設(shè)備,集群非主節(jié)點(diǎn)在參與數(shù)據(jù)協(xié)商的過(guò)程中發(fā)現(xiàn)本節(jié)點(diǎn)數(shù)據(jù)版本落后時(shí),可以及時(shí)進(jìn)行決議追趕,將缺失的決議補(bǔ)齊,從而可以在后續(xù)正常參與數(shù)據(jù)協(xié)商,提高了數(shù)據(jù)協(xié)商成功的幾率,保證了系統(tǒng)業(yè)務(wù)的正常進(jìn)行。
【專利附圖】
【附圖說(shuō)明】
[0090]圖1為本發(fā)明實(shí)施例一提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法流程圖;
[0091]圖2為本發(fā)明實(shí)施例二提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法流程圖;
[0092]圖3為本發(fā)明實(shí)施例三提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法流程圖;
[0093]圖4為本發(fā)明實(shí)施例四提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置結(jié)構(gòu)示意圖;
[0094]圖5為本發(fā)明實(shí)施例五提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置結(jié)構(gòu)示意圖;
[0095]圖6為本發(fā)明實(shí)施例六提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商設(shè)置結(jié)構(gòu)示意圖;
[0096]圖7為本發(fā)明實(shí)施例七提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商設(shè)置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0097]本發(fā)明實(shí)施例在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕;在確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。可見,采用本發(fā)明實(shí)施例,集群非主節(jié)點(diǎn)在參與數(shù)據(jù)協(xié)商的過(guò)程中發(fā)現(xiàn)本節(jié)點(diǎn)數(shù)據(jù)版本落后時(shí),可以及時(shí)進(jìn)行決議追趕,將缺失的決議補(bǔ)齊,從而可以在后續(xù)正常參與數(shù)據(jù)協(xié)商,提高了數(shù)據(jù)協(xié)商成功的幾率,保證了系統(tǒng)業(yè)務(wù)的正常進(jìn)行。
[0098]下面結(jié)合說(shuō)明書附圖對(duì)本發(fā)明實(shí)施例作進(jìn)一步詳細(xì)描述。
[0099]如圖1所示,為本發(fā)明實(shí)施例一提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法流程圖,包括以下步驟:
[0100]SlOl:集群非主節(jié)點(diǎn)在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕。
[0101]該步驟中,在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,集群主節(jié)點(diǎn)會(huì)向集群非主節(jié)點(diǎn)發(fā)送協(xié)商類消息,比如,開始協(xié)商消息和提交消息;在這些消息中攜帶決議編號(hào),集群非主節(jié)點(diǎn)可以將集群主節(jié)點(diǎn)發(fā)送的決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)進(jìn)行比較,根據(jù)比較結(jié)果,判斷本節(jié)點(diǎn)數(shù)據(jù)版本是否落后,若落后,則需要進(jìn)行決議追趕。根據(jù)協(xié)商類消息的不同,集群非主節(jié)點(diǎn)將集群主節(jié)點(diǎn)發(fā)送的決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)進(jìn)行比較的方式也會(huì)不同,以下實(shí)施例二中將會(huì)作進(jìn)一步介紹,這里不再詳述。
[0102]S102:所述集群非主節(jié)點(diǎn)在確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0103]該步驟中,在進(jìn)行數(shù)據(jù)協(xié)商過(guò)程中,集群非主節(jié)點(diǎn)在確定本節(jié)點(diǎn)數(shù)據(jù)版本落后時(shí),可以向集群內(nèi)部的集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議;或者,為了不給集群內(nèi)的集群主節(jié)點(diǎn)或其它集群非主節(jié)點(diǎn)帶來(lái)負(fù)擔(dān),影響集群內(nèi)業(yè)務(wù)的正常進(jìn)行,也可以調(diào)用外部接口,從為集群主節(jié)點(diǎn)提供決議的源頭(也即集群服務(wù)對(duì)象)處獲取本節(jié)點(diǎn)需要追趕的決議。
[0104]可選地,集群非主節(jié)點(diǎn)可以在以下不同情況時(shí)分別采用不同的追趕方式:
[0105]情況一、在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0106]這里,若所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)為開始協(xié)商消息中的最大決議編號(hào),則所述設(shè)定差值閾值大于1;若所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)為提交消息中的最大決議編號(hào),則所述設(shè)定差值閾值大于該集群非主節(jié)點(diǎn)之前批準(zhǔn)的打包決議的打包決議個(gè)數(shù)。
[0107]在這種情況下,當(dāng)集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),說(shuō)明此時(shí)本節(jié)點(diǎn)落后版本不是很多、且能夠在集群內(nèi)部節(jié)點(diǎn)處獲取到本節(jié)點(diǎn)缺失的已協(xié)商一致的數(shù)據(jù)版本,則可以采用集群內(nèi)部追趕的方式。
[0108]具體地,集群非主節(jié)點(diǎn)進(jìn)行集群內(nèi)部追趕的過(guò)程可以是:向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)發(fā)送追趕消息;所述追趕消息包括本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和本節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)信息;接收所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)根據(jù)所述追趕消息發(fā)送的決議。相應(yīng)地,被追趕對(duì)象(集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn))在接收到所述追趕消息后,根據(jù)所述追趕消息中包括的最大決議編號(hào)和本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),確定需要發(fā)送給所述集群非主節(jié)點(diǎn)的決議;根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn)。被追趕對(duì)象在確定需要發(fā)送給所述集群非主節(jié)點(diǎn)的決議版本較多時(shí),可以采用分片發(fā)送的方式,以下實(shí)施例三中將作進(jìn)一步介紹,這里不再詳述。
[0109]情況二、在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值時(shí),或者本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0110]這里,若所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)為開始協(xié)商消息中的最大決議編號(hào),則所述設(shè)定差值閾值大于1;若所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)為提交消息中的最大決議編號(hào),則所述設(shè)定差值閾值大于該集群非主節(jié)點(diǎn)之前批準(zhǔn)的打包決議的打包決議個(gè)數(shù)。
[0111]在這種情況下,當(dāng)集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值時(shí),說(shuō)明此時(shí)本節(jié)點(diǎn)落后版本較多,為了不給集群系統(tǒng)增加較大的負(fù)擔(dān),采用集群外部追趕的方式。若集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)大于本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),說(shuō)明本節(jié)點(diǎn)將無(wú)法從集群主節(jié)點(diǎn)處獲取到本節(jié)點(diǎn)缺失的連續(xù)的數(shù)據(jù)版本,此時(shí)也需要采用集群外部追趕的方式。
[0112]如圖2所示,為本發(fā)明實(shí)施例二提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法流程圖,本實(shí)施例二重點(diǎn)對(duì)集群非主節(jié)點(diǎn)需要進(jìn)入追趕流程的情況作進(jìn)一步說(shuō)明,包括以下步驟:
[0113]S201:集群非王節(jié)點(diǎn)在初始化完成后,啟動(dòng)等待接收消息的定時(shí)器。
[0114]該步驟中,集群非主節(jié)點(diǎn)在初始化時(shí),啟動(dòng)等待接收消息的定時(shí)器,等待集群主節(jié)點(diǎn)發(fā)送消息,或等待定時(shí)器超時(shí)。
[0115]S202:若所述集群非主節(jié)點(diǎn)在接收到所述集群主節(jié)點(diǎn)發(fā)送的任何消息之前定時(shí)器超時(shí),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取已協(xié)商一致的決議。
[0116]該步驟中,若所述集群非主節(jié)點(diǎn)在接收到所述集群主節(jié)點(diǎn)發(fā)送的任何消息之前定時(shí)器超時(shí),說(shuō)明在此期間該集群非主節(jié)點(diǎn)與集群主節(jié)點(diǎn)之間的鏈路可能存在問(wèn)題,該集群非主節(jié)點(diǎn)的數(shù)據(jù)版本可能已經(jīng)落后,則這時(shí)啟動(dòng)追趕流程,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)未接收到的已協(xié)商一致的決議。
[0117]S203:若所述集群非主節(jié)點(diǎn)在所述定時(shí)器超時(shí)之前接收到所述開始協(xié)商消息,則將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,與所述開始協(xié)商消息中包含的最大決議編號(hào)進(jìn)行比較;所述開始協(xié)商消息中包含的最大決議編號(hào)為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個(gè)決議的決議編號(hào)。
[0118]該步驟中,集群非主節(jié)點(diǎn)接收到集群主節(jié)點(diǎn)發(fā)送的開始協(xié)商消息,該開始協(xié)商消息中包含需要協(xié)商的打包決議、該打包決議中第一個(gè)決議的決議編號(hào)(也即是該集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)),除此之外,該開始協(xié)商消息中還可以包含該集群主節(jié)點(diǎn)目前已提交的決議的最小決議編號(hào)。
[0119]S204:若所述集群非主節(jié)點(diǎn)將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,小于所述開始協(xié)商消息中包含的最大決議編號(hào),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0120]該步驟中,若集群非主節(jié)點(diǎn)將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,小于所述開始協(xié)商消息中包含的最大決議編號(hào),則說(shuō)明本節(jié)點(diǎn)數(shù)據(jù)版本落后,需要進(jìn)入追趕流程,即向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0121]在具體實(shí)施過(guò)程中,所述集群非主節(jié)點(diǎn)可以根據(jù)所述開始協(xié)商消息中包含的最大決議編號(hào)和最小決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和最小決議編號(hào)之間的關(guān)系,確定進(jìn)行決議追趕的方式。若所述開始協(xié)商消息中的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值(該設(shè)定差值閾值大于I),或者本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),則通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。若所述開始協(xié)商消息中的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0122]S205:若所述集群非主節(jié)點(diǎn)將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,等于所述開始協(xié)商消息中包含的最大決議編號(hào),則向集群主節(jié)點(diǎn)回復(fù)批準(zhǔn)所述開始協(xié)商消息中包含的打包決議。
[0123]該步驟中,若集群非主節(jié)點(diǎn)將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,等于所述開始協(xié)商消息中包含的最大決議編號(hào),則說(shuō)明本節(jié)點(diǎn)數(shù)據(jù)版本沒(méi)有落后,可以向集群主節(jié)點(diǎn)回復(fù)批準(zhǔn)所述開始協(xié)商消息中包含的打包決議。
[0124]在具體實(shí)施過(guò)程中,集群主節(jié)點(diǎn)發(fā)送的所述開始協(xié)商消息中包含的最大決議編號(hào)和最小決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和最小決議編號(hào)之間的關(guān)系除上述幾種情況(包括需要進(jìn)入追趕流程的情況以及批準(zhǔn)決議的情況)外,還有可能會(huì)出現(xiàn)一些異常情況,比如,所述開始協(xié)商消息中包含的最大決議編號(hào)小于等于本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),甚至小于本節(jié)點(diǎn)已提交的決議的最小決議編號(hào),則這種情況為異常情況,則可以向管理界面反饋異常信息,并記錄異常日志。
[0125]S206:所述集群非主節(jié)點(diǎn)在接收到所述集群主節(jié)點(diǎn)發(fā)送的提交消息后,將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上最近一次批準(zhǔn)的打包決議的決議個(gè)數(shù)后,與所述提交消息中包含的最大決議編號(hào)進(jìn)行比較,所述最大決議編號(hào)為所述打包決議中最后一個(gè)決議的決議編號(hào)。
[0126]該步驟中,集群非主節(jié)點(diǎn)在向集群主節(jié)點(diǎn)回復(fù)批準(zhǔn)其在開始協(xié)商消息中發(fā)送的打包決議后,會(huì)接收到集群主節(jié)點(diǎn)發(fā)送的提交消息,此時(shí),集群主節(jié)點(diǎn)發(fā)送的提交消息中的最大決議編號(hào)為需要提交的打包決議中最后一個(gè)決議的決議編號(hào)。但是,在集群非主節(jié)點(diǎn)回復(fù)批準(zhǔn)打包決議的消息之后,接收到集群主節(jié)點(diǎn)發(fā)送的提交消息之前,仍有可能出現(xiàn)該集群非主節(jié)點(diǎn)與集群主節(jié)點(diǎn)之間的鏈路異常,導(dǎo)致提交消息中的最大決議編號(hào)與該集群非主節(jié)點(diǎn)應(yīng)該提交的決議的最大決議編號(hào)不符。因此,需要將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上最近一次批準(zhǔn)的打包決議的決議個(gè)數(shù)后,與所述提交消息中包含的最大決議編號(hào)進(jìn)行比較。
[0127]S207:若所述集群非主節(jié)點(diǎn)將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,小于所述提交消息中包含的最大決議編號(hào),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0128]該步驟中,若集群非主節(jié)點(diǎn)將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,小于所述提交消息中包含的最大決議編號(hào),則說(shuō)明本節(jié)點(diǎn)數(shù)據(jù)版本落后,需要進(jìn)入追趕流程,即向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0129]在具體實(shí)施過(guò)程中,所述提交消息中除包含該集群主節(jié)點(diǎn)目前需要提交的決議的最大決議編號(hào)外,還可以包含該集群主節(jié)點(diǎn)目前已提交的決議的最小決議編號(hào)。所述集群非主節(jié)點(diǎn)可以根據(jù)所述提交消息中包含的最大決議編號(hào)和最小決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和最小決議編號(hào)之間的關(guān)系,確定進(jìn)行決議追趕的方式。若所述提交消息中的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值(該設(shè)定差值閾值大于打包決議個(gè)數(shù))?;蛘弑竟?jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后小于所述提交消息中的最小決議編號(hào),則通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。若所述提交消息中的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0130]S208:若所述集群非主節(jié)點(diǎn)將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,等于所述提交消息中包含的最大決議編號(hào),則提交所述打包決議。
[0131]該步驟中,若集群非主節(jié)點(diǎn)將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,等于所述提交消息中包含的最大決議編號(hào),則說(shuō)明本節(jié)點(diǎn)數(shù)據(jù)版本沒(méi)有落后,可以進(jìn)行決議提交,也即根據(jù)所述打包決議中的各個(gè)決議進(jìn)行相關(guān)處理,包括刪除、添加、修改數(shù)據(jù)等。
[0132]在具體實(shí)施過(guò)程中,集群主節(jié)點(diǎn)發(fā)送的所述提交消息中包含的最大決議編號(hào)和最小決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和最小決議編號(hào)之間的關(guān)系除上述幾種情況(包括需要進(jìn)入追趕流程的情況以及確認(rèn)能夠提交決議的情況)外,還有可能會(huì)出現(xiàn)一些異常情況,比如,所述提交消息中包含的最大決議編號(hào)小于等于本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),甚至小于本節(jié)點(diǎn)已提交的決議的最小決議編號(hào),則這種情況為異常情況,則可以向管理界面反饋異常信息,并記錄異常日志。
[0133]如圖3所示,為本發(fā)明實(shí)施例三提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法流程圖,本實(shí)施例三重點(diǎn)對(duì)集群非主節(jié)點(diǎn)在數(shù)據(jù)協(xié)商過(guò)程中進(jìn)行決議追趕的流程作進(jìn)一步說(shuō)明,包括以下步驟:
[0134]S301:集群非主節(jié)點(diǎn)在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),確定需要進(jìn)行決議追趕。
[0135]比如,在一個(gè)包含N個(gè)節(jié)點(diǎn)的集群中,大部分集群節(jié)點(diǎn)已提交的決議的最大決議編號(hào)已達(dá)到602,但是,存在一個(gè)集群非主節(jié)點(diǎn)由于網(wǎng)絡(luò)閃斷等原因,它提交的決議的最大決議編號(hào)為600,在該集群非主節(jié)點(diǎn)網(wǎng)絡(luò)通信恢復(fù)正常后,接收到集群主節(jié)點(diǎn)發(fā)送的消息,檢測(cè)到本節(jié)點(diǎn)決議版本落后,進(jìn)入追趕流程。
[0136]S302:所述集群非主節(jié)點(diǎn)判斷本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后是否小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào),若是,則進(jìn)入步驟S303,否則,進(jìn)入步驟S304。
[0137]S303:所述集群非主節(jié)點(diǎn)通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0138]S304:所述集群非主節(jié)點(diǎn)判斷所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差是否大于等于設(shè)定差值閾值,若是,則進(jìn)入步驟S303,否則進(jìn)入步驟S305。
[0139]S305:所述集群非主節(jié)點(diǎn)向被追趕對(duì)象發(fā)送追趕消息;所述追趕消息包括本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和本節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)信息,所述被追趕對(duì)象為所述集群主節(jié)點(diǎn)或其它集群非主節(jié)點(diǎn)。
[0140]在具體實(shí)施過(guò)程中,集群中所有節(jié)點(diǎn)都存儲(chǔ)有本集群所有N個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)信息集合,其中包括每個(gè)節(jié)點(diǎn)的配置信息等。集群非主節(jié)點(diǎn)可以從這N個(gè)節(jié)點(diǎn)中選取Μ個(gè)節(jié)點(diǎn)作為學(xué)習(xí)對(duì)象,加入學(xué)習(xí)對(duì)象集合,這Μ個(gè)節(jié)點(diǎn)包括集群主節(jié)點(diǎn)和Μ-1個(gè)集群非主節(jié)點(diǎn)。該集群非主節(jié)點(diǎn)在選擇集群非主節(jié)點(diǎn)作為學(xué)習(xí)對(duì)象時(shí),可以從所有Ν-2個(gè)集群非主節(jié)點(diǎn)中,選擇配置相對(duì)較高、性能較好、通信時(shí)延較短的節(jié)點(diǎn);如果所有集群非主節(jié)點(diǎn)的配置相同,則隨機(jī)選取Μ-1個(gè)集群非主節(jié)點(diǎn)作為學(xué)習(xí)對(duì)象。該集群非主節(jié)點(diǎn)在向某被追趕對(duì)象(集群非主節(jié)點(diǎn))發(fā)起追趕流程的過(guò)程中,若發(fā)現(xiàn)本節(jié)點(diǎn)與該被追趕對(duì)象之間無(wú)法通信,則將該被追趕對(duì)象從其學(xué)習(xí)對(duì)象集合中刪除,重新選擇一個(gè)可以通信的其它集群非主節(jié)點(diǎn)加入學(xué)習(xí)對(duì)象集合。
[0141]在具體實(shí)施中,所述集群非主節(jié)點(diǎn)可以直接向集群主節(jié)點(diǎn)發(fā)送追趕消息,若集群主節(jié)點(diǎn)處于繁忙的協(xié)商任務(wù)中,為了使追趕流程不加重集群主節(jié)點(diǎn)的工作負(fù)載,則從學(xué)習(xí)對(duì)象集合中選取一個(gè)集群非主節(jié)點(diǎn)作為被追趕對(duì)象,發(fā)送追趕消息,若該被追趕對(duì)象已提交的決議的最大決議編號(hào)小于等于發(fā)送追趕消息的集群非主節(jié)點(diǎn)的最大決議編號(hào),或者,該被追趕對(duì)象已刪除了連續(xù)的決議日志(即無(wú)法為該集群非主節(jié)點(diǎn)提供連續(xù)的決議版本),則該被追趕對(duì)象無(wú)法為所述集群主節(jié)點(diǎn)提供其需要追趕的決議,該集群主節(jié)點(diǎn)再?gòu)氖S嗟腗-2個(gè)學(xué)習(xí)對(duì)象中選擇其它集群非主節(jié)點(diǎn)作為被追趕對(duì)象,如此遞歸,直至完成追趕過(guò)程。
[0142]在具體實(shí)施中,被追趕對(duì)象根據(jù)所述追趕消息中包括的最大決議編號(hào)和本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),將在區(qū)間[追趕對(duì)象已提交的決議的最大決議編號(hào)+1,被追趕對(duì)象已提交的決議的最大決議編號(hào)]內(nèi)的決議編號(hào)所對(duì)應(yīng)的決議發(fā)送給追趕對(duì)象。該追趕對(duì)象在接收到被追趕對(duì)象發(fā)送的決議后,比較該被追趕對(duì)象發(fā)送的決議的最大決議編號(hào)與集群主節(jié)點(diǎn)的最大決議編號(hào),若該被追趕對(duì)象發(fā)送的決議的最大決議編號(hào)小于集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),則繼續(xù)從其它學(xué)習(xí)對(duì)象中選擇一個(gè)學(xué)習(xí)對(duì)象作為被追趕對(duì)象發(fā)送追趕消息,若該被追趕對(duì)象發(fā)送的決議的最大決議編號(hào)等于集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),則確定追趕成功。
[0143]在具體實(shí)施中,被追趕對(duì)象檢測(cè)到本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)與追趕對(duì)象發(fā)送的最大決議編號(hào)相同時(shí),向所述追趕對(duì)象發(fā)送追趕響應(yīng)消息,指示無(wú)需進(jìn)行決議追趕;若檢測(cè)到本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)小于該追趕對(duì)象發(fā)送的最大決議編號(hào),或者已刪除了部分決議日志,無(wú)法為該追趕對(duì)象提供連續(xù)的決議版本,則向所述追趕對(duì)象發(fā)送追趕響應(yīng)消息,指示無(wú)法提供服務(wù)。
[0144]S306:所述被追趕對(duì)象接收到追趕消息后,判斷在該追趕消息中包括的所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目是否小于等于設(shè)定閾值,若是,則進(jìn)入步驟S307,否則,進(jìn)入步驟S308。
[0145]S307:所述被追趕對(duì)象將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議進(jìn)行打包;并將打包后的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0146]S308:所述被追趕對(duì)象將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議劃分為多個(gè)分片,其中,每個(gè)分片包含的決議個(gè)數(shù)小于等于所述設(shè)定閾值,并將每個(gè)分片分別發(fā)送給所述集群非主節(jié)點(diǎn)。
[0147]在具體實(shí)施過(guò)程中,若在區(qū)間[所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)+1,本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)]內(nèi)的決議編號(hào)數(shù)目大于設(shè)定數(shù)目閾值,則發(fā)送的決議數(shù)據(jù)包會(huì)過(guò)大,有可能導(dǎo)致發(fā)送失敗。比如用戶數(shù)據(jù)報(bào)協(xié)議(User DatagramProtocol, UDP)協(xié)議要求數(shù)據(jù)包大小不能超過(guò)64K,否則就會(huì)發(fā)送失敗。因此,在本申請(qǐng)實(shí)施例中,若在該區(qū)間內(nèi)的決議編號(hào)數(shù)目大于設(shè)定數(shù)目閾值,則所述被追趕對(duì)象將在該區(qū)間內(nèi)的決議編號(hào)所對(duì)應(yīng)的決議劃分為多個(gè)分片分別發(fā)送給所述集群非主節(jié)點(diǎn);其中,每個(gè)分片的決議個(gè)數(shù)小于等于所述設(shè)定數(shù)目閾值k。比如,被追趕對(duì)象可以首先將該區(qū)間對(duì)應(yīng)的共L個(gè)決議中的前k個(gè)決議發(fā)送給追趕對(duì)象,之后判斷剩余的決議個(gè)數(shù)L-k是否仍大于k,若仍大于k,則繼續(xù)發(fā)送后續(xù)的k個(gè)決議,如此循環(huán),直到剩余的決議個(gè)數(shù)小于等于k,則將剩余的決議全部發(fā)送給追趕對(duì)象。
[0148]基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例中還提供了一種與分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法對(duì)應(yīng)的分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置,由于該裝置解決問(wèn)題的原理與本發(fā)明實(shí)施例分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法相似,因此該裝置的實(shí)施可以參見方法的實(shí)施,重復(fù)之處不再贅述。
[0149]如圖4所示,為本發(fā)明實(shí)施例四提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置結(jié)構(gòu)示意圖,包括:
[0150]判斷模塊41,用于在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),判斷是否需要進(jìn)行決議追趕;
[0151]獲取模塊42,用于在所述判斷模塊41確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0152]可選地,所述判斷模塊41具體用于:
[0153]接收集群主節(jié)點(diǎn)發(fā)送的開始協(xié)商消息;將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后,與所述開始協(xié)商消息中包含的最大決議編號(hào)進(jìn)行比較;所述開始協(xié)商消息中包含的最大決議編號(hào)為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個(gè)決議的決議編號(hào);若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后,小于所述開始協(xié)商消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0154]可選地,所述判斷模塊41具體用于:
[0155]接收所述集群主節(jié)點(diǎn)發(fā)送的提交消息;將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上最近一次批準(zhǔn)的打包決議的決議個(gè)數(shù)后,與所述提交消息中包含的最大決議編號(hào)進(jìn)行比較,所述提交消息中包含的最大決議編號(hào)為所述打包決議中最后一個(gè)決議的決議編號(hào);若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,小于所述提交消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0156]可選地,所述獲取模塊42具體用于:
[0157]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議;
[0158]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值時(shí),或者本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0159]可選地,所述獲取模塊42具體用于:
[0160]向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)發(fā)送追趕消息;接收所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)根據(jù)所述追趕消息發(fā)送的決議。
[0161]可選地,所述獲取模塊42還用于:
[0162]在初始化完成后,啟動(dòng)等待接收消息的定時(shí)器;若在接收到所述集群主節(jié)點(diǎn)發(fā)送的任何消息之前定時(shí)器超時(shí),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取已協(xié)商一致的決議。
[0163]如圖5所示,為本發(fā)明實(shí)施例五提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置結(jié)構(gòu)示意圖,包括:
[0164]接收模塊51,用于接收集群非主節(jié)點(diǎn)發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和所述集群非主節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)信息;
[0165]確定模塊52,用于根據(jù)所述接收模塊51接收的追趕消息中包括的最大決議編號(hào)和本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),確定需要發(fā)送給所述集群非主節(jié)點(diǎn)的決議;
[0166]發(fā)送模塊53,用于根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將所述確定模塊52確定的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0167]可選地,所述發(fā)送模塊53具體用于:
[0168]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目小于等于設(shè)定閾值,則根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議進(jìn)行打包;并將打包后的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0169]可選地,所述發(fā)送模塊53具體用于:
[0170]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目大于設(shè)定閾值,則將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議劃分為多個(gè)分片,其中,每個(gè)分片包含的決議個(gè)數(shù)小于等于所述設(shè)定閾值,并將每個(gè)分片分別發(fā)送給所述集群非主節(jié)點(diǎn)。
[0171]如圖6所示,為本發(fā)明實(shí)施例六提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商設(shè)置結(jié)構(gòu)示意圖,該設(shè)備包括處理器61、存儲(chǔ)器62和總線63,所述存儲(chǔ)器62存儲(chǔ)執(zhí)行指令,當(dāng)所述設(shè)備運(yùn)行時(shí),所述處理器61與所述存儲(chǔ)器62之間通過(guò)總線63通信,所述處理器61執(zhí)行所述執(zhí)行指令使得所述設(shè)備執(zhí)行如下方法:
[0172]在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),判斷是否需要進(jìn)行決議追趕;
[0173]在確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0174]可選地,所述處理器61執(zhí)行的所述方法中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕,包括:
[0175]接收集群主節(jié)點(diǎn)發(fā)送的開始協(xié)商消息;
[0176]將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,與所述開始協(xié)商消息中包含的最大決議編號(hào)進(jìn)行比較;所述開始協(xié)商消息中包含的最大決議編號(hào)為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個(gè)決議的決議編號(hào);
[0177]若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,小于所述開始協(xié)商消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0178]可選地,所述處理器61執(zhí)行的所述方法中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕,包括:
[0179]接收所述集群主節(jié)點(diǎn)發(fā)送的提交消息;
[0180]將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上最近一次批準(zhǔn)的打包決議的決議個(gè)數(shù)后,與所述提交消息中包含的最大決議編號(hào)進(jìn)行比較,所述提交消息中包含的最大決議編號(hào)為所述打包決議中最后一個(gè)決議的決議編號(hào);
[0181]若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,小于所述提交消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
[0182]可選地,所述處理器61執(zhí)行的所述方法中,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,包括:
[0183]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議;
[0184]在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值時(shí),或者本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1后小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
[0185]可選地,所述處理器61執(zhí)行的所述方法中,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,包括:
[0186]向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)發(fā)送追趕消息;
[0187]接收所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)根據(jù)所述追趕消息發(fā)送的決議。
[0188]可選地,所述處理器61執(zhí)行的所述方法還包括:
[0189]在初始化完成后,啟動(dòng)等待接收消息的定時(shí)器;
[0190]若在接收到所述集群主節(jié)點(diǎn)發(fā)送的任何消息之前定時(shí)器超時(shí),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取已協(xié)商一致的決議。
[0191]如圖7所示,為本發(fā)明實(shí)施例七提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商設(shè)置結(jié)構(gòu)示意圖,該設(shè)備包括處理器71、存儲(chǔ)器72和總線73,所述存儲(chǔ)器72存儲(chǔ)執(zhí)行指令,當(dāng)所述設(shè)備運(yùn)行時(shí),所述處理器71與所述存儲(chǔ)器72之間通過(guò)總線73通信,所述處理器71執(zhí)行所述執(zhí)行指令使得所述設(shè)備執(zhí)行如下方法:
[0192]接收集群非主節(jié)點(diǎn)發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和所述集群非主節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)信息;
[0193]根據(jù)所述追趕消息中包括的最大決議編號(hào)和本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),確定需要發(fā)送給所述集群非主節(jié)點(diǎn)的決議;
[0194]根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0195]可選地,所述處理器71執(zhí)行的所述方法中,根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn),包括:
[0196]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加1至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目小于等于設(shè)定閾值,則根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議進(jìn)行打包;并
[0197]將打包后的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
[0198]可選地,所述處理器71執(zhí)行的所述方法中,根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn),包括:
[0199]若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目大于設(shè)定閾值,則將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議劃分為多個(gè)分片,其中,每個(gè)分片包含的決議個(gè)數(shù)小于等于所述設(shè)定閾值,并
[0200]將每個(gè)分片分別發(fā)送給所述集群非主節(jié)點(diǎn)。
[0201]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
[0202]本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
[0203]這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
[0204]這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
[0205]盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
[0206]顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
【權(quán)利要求】
1.一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法,其特征在于,該方法包括: 在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),判斷是否需要進(jìn)行決議追趕; 在確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
2.如權(quán)利要求1所述的方法,其特征在于,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕,包括: 接收集群主節(jié)點(diǎn)發(fā)送的開始協(xié)商消息; 將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,與所述開始協(xié)商消息中包含的最大決議編號(hào)進(jìn)行比較;所述開始協(xié)商消息中包含的最大決議編號(hào)為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個(gè)決議的決議編號(hào); 若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,小于所述開始協(xié)商消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
3.如權(quán)利要求1所述的方法,其特征在于,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的決議編號(hào),判斷是否需要進(jìn)行決議追趕,包括: 接收所述集群主節(jié)點(diǎn)發(fā)送的提交消息; 將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上最近一次批準(zhǔn)的打包決議的決議個(gè)數(shù)后,與所述提交消息中包含的最大決議編號(hào)進(jìn)行比較,所述提交消息中包含的最大決議編號(hào)為所述打包決議中最后一個(gè)決議的決議編號(hào); 若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,小于所述提交消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
4.如權(quán)利要求1?3任一所述的方法,其特征在于,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,包括: 在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議; 在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值時(shí),或者本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
5.如權(quán)利要求1?4任一所述的方法,其特征在于,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,包括: 向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)發(fā)送追趕消息; 接收所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)根據(jù)所述追趕消息發(fā)送的決議。
6.如權(quán)利要求1?5任一所述的方法,其特征在于,所述方法還包括: 在初始化完成后,啟動(dòng)等待接收消息的定時(shí)器; 若在接收到所述集群主節(jié)點(diǎn)發(fā)送的任何消息之前定時(shí)器超時(shí),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取已協(xié)商一致的決議。
7.—種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法,其特征在于,該方法包括: 接收集群非主節(jié)點(diǎn)發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和所述集群非主節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)信息; 根據(jù)所述追趕消息中包括的最大決議編號(hào)和本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),確定需要發(fā)送給所述集群非主節(jié)點(diǎn)的決議; 根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
8.如權(quán)利要求7所述的方法,其特征在于,根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn),包括: 若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目小于等于設(shè)定閾值,則根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議進(jìn)行打包;并 將打包后的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
9.如權(quán)利要求7所述的方法,其特征在于,根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將確定的決議發(fā)送給所述集群非主節(jié)點(diǎn),包括: 若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目大于設(shè)定閾值,則將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議劃分為多個(gè)分片,其中,每個(gè)分片包含的決議個(gè)數(shù)小于等于所述設(shè)定閾值,并 將每個(gè)分片分別發(fā)送給所述集群非主節(jié)點(diǎn)。
10.一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置,其特征在于,該裝置包括: 判斷模塊,用于在進(jìn)行數(shù)據(jù)協(xié)商的過(guò)程中,根據(jù)本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào),判斷是否需要進(jìn)行決議追趕; 獲取模塊,用于在所述判斷模塊確定需要進(jìn)行決議追趕后,向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議,或通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
11.如權(quán)利要求10所述的裝置,其特征在于,所述判斷模塊具體用于: 接收集群主節(jié)點(diǎn)發(fā)送的開始協(xié)商消息;將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,與所述開始協(xié)商消息中包含的最大決議編號(hào)進(jìn)行比較;所述開始協(xié)商消息中包含的最大決議編號(hào)為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個(gè)決議的決議編號(hào);若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后,小于所述開始協(xié)商消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
12.如權(quán)利要求10所述的裝置,其特征在于,所述判斷模塊具體用于: 接收所述集群主節(jié)點(diǎn)發(fā)送的提交消息;將本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上最近一次批準(zhǔn)的打包決議的決議個(gè)數(shù)后,與所述提交消息中包含的最大決議編號(hào)進(jìn)行比較,所述提交消息中包含的最大決議編號(hào)為所述打包決議中最后一個(gè)決議的決議編號(hào);若本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加上所述打包決議的決議個(gè)數(shù)后,小于所述提交消息中包含的最大決議編號(hào),則確定需要進(jìn)行決議追趕。
13.如權(quán)利要求10?12任一所述的裝置,其特征在于,所述獲取模塊具體用于: 在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差小于設(shè)定差值閾值、且本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后大于等于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議; 在所述集群主節(jié)點(diǎn)發(fā)送的最大決議編號(hào)與本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之差大于等于設(shè)定差值閾值時(shí),或者本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I后小于所述集群主節(jié)點(diǎn)發(fā)送的最小決議編號(hào)時(shí),通過(guò)調(diào)用外部接口向集群服務(wù)對(duì)象請(qǐng)求獲取本節(jié)點(diǎn)需要追趕的決議。
14.如權(quán)利要求10?13任一所述的裝置,其特征在于,所述獲取模塊具體用于: 向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)發(fā)送追趕消息;接收所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)根據(jù)所述追趕消息發(fā)送的決議。
15.如權(quán)利要求10?14任一所述的裝置,其特征在于,所述獲取模塊還用于: 在初始化完成后,啟動(dòng)等待接收消息的定時(shí)器;若在接收到所述集群主節(jié)點(diǎn)發(fā)送的任何消息之前定時(shí)器超時(shí),則向所述集群主節(jié)點(diǎn)或除本節(jié)點(diǎn)外的其它集群非主節(jié)點(diǎn)請(qǐng)求獲取已協(xié)商一致的決議。
16.一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置,其特征在于,該裝置包括: 接收模塊,用于接收集群非主節(jié)點(diǎn)發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)和所述集群非主節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)信息; 確定模塊,用于根據(jù)所述接收模塊接收的追趕消息中包括的最大決議編號(hào)和本節(jié)點(diǎn)已提交的決議的最大決議編號(hào),確定需要發(fā)送給所述集群非主節(jié)點(diǎn)的決議; 發(fā)送模塊,用于根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將所述確定模塊確定的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
17.如權(quán)利要求16所述的裝置,其特征在于,所述發(fā)送模塊具體用于: 若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目小于等于設(shè)定閾值,則根據(jù)所述追趕消息中包括的節(jié)點(diǎn)標(biāo)識(shí)信息,將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議進(jìn)行打包;并將打包后的決議發(fā)送給所述集群非主節(jié)點(diǎn)。
18.如權(quán)利要求16所述的裝置,其特征在于,所述發(fā)送模塊具體用于: 若在所述集群非主節(jié)點(diǎn)已提交的決議的最大決議編號(hào)加I至本節(jié)點(diǎn)已提交的決議的最大決議編號(hào)之間的編號(hào)區(qū)間內(nèi)的決議編號(hào)數(shù)目大于設(shè)定閾值,則將在所述編號(hào)區(qū)間內(nèi)的決議編號(hào)分別對(duì)應(yīng)的決議劃分為多個(gè)分片,其中,每個(gè)分片包含的決議個(gè)數(shù)小于等于所述設(shè)定閾值,并將每個(gè)分片分別發(fā)送給所述集群非主節(jié)點(diǎn)。
【文檔編號(hào)】H04L29/08GK104348906SQ201410469623
【公開日】2015年2月11日 申請(qǐng)日期:2014年9月16日 優(yōu)先權(quán)日:2014年9月16日
【發(fā)明者】張真波, 汪周林, 李登 申請(qǐng)人:深圳市華為技術(shù)軟件有限公司