国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法及裝置制造方法

      文檔序號:7814330閱讀:227來源:國知局
      一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法及裝置制造方法
      【專利摘要】本發(fā)明涉及計算機網(wǎng)絡領(lǐng)域,尤其涉及一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法及裝置,用以解決現(xiàn)有技術(shù)中由于集群非主節(jié)點數(shù)據(jù)版本落后,無法參與后續(xù)數(shù)據(jù)協(xié)商,影響系統(tǒng)業(yè)務的正常進行的問題。本發(fā)明實施例提供的一種數(shù)據(jù)協(xié)商方法包括:在進行數(shù)據(jù)協(xié)商的過程中,根據(jù)本節(jié)點已提交的決議的最大決議編號和集群主節(jié)點發(fā)送的最大決議編號,判斷是否需要進行決議追趕;在確定需要進行決議追趕后,向所述集群主節(jié)點或除本節(jié)點外的集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議,或通過調(diào)用外部接口向集群服務對象請求獲取本節(jié)點需要追趕的決議。
      【專利說明】一種分布式系統(tǒng)中數(shù)據(jù)協(xié)間方法及裝置

      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及計算機網(wǎng)絡領(lǐng)域,尤其涉及一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法及裝置。

      【背景技術(shù)】
      [0002]目前,分布式系統(tǒng)中節(jié)點之間通過數(shù)據(jù)協(xié)商來保證系統(tǒng)中大多數(shù)節(jié)點數(shù)據(jù)的一致性,系統(tǒng)內(nèi)相互通信的各個節(jié)點形成一個集群;PaX0S算法是分布式系統(tǒng)中常用的數(shù)據(jù)一致性算法。
      [0003]在Paxos算法中,不同決議的決議編號需要滿足偏序關(guān)系,為了滿足這種關(guān)系,集群主節(jié)點一般使用遞增的數(shù)值作為決議編號。節(jié)點之間進行數(shù)據(jù)協(xié)商的過程一般是:集群主節(jié)點將當前需要協(xié)商的決議(value)的決議編號設為n,向系統(tǒng)內(nèi)的各集群非主節(jié)點發(fā)送開始協(xié)商消息,其中包含決議編號η和決議;集群非主節(jié)點在接收到集群主節(jié)點發(fā)送的開始協(xié)商消息后,若確認該決議的決議編號η為本節(jié)點已批準的決議的最大決議編號加I后的編號,則向集群主節(jié)點回復批準該決議;集群主節(jié)點在系統(tǒng)內(nèi)大多數(shù)非主節(jié)點批準該決議后,確認協(xié)商一致,則向批準該決議的大多數(shù)集群非主節(jié)點發(fā)送提交(commit)消息,并在自己節(jié)點提交決議(也即根據(jù)該決議的內(nèi)容,對自己節(jié)點的數(shù)據(jù)進行相關(guān)處理,比如添加、刪除或修改數(shù)據(jù)等);各集群非主節(jié)點在接收到集群主節(jié)點發(fā)送的提交消息后,在自己節(jié)點提交決議(也即根據(jù)該決議的內(nèi)容,對自己節(jié)點的數(shù)據(jù)進行相關(guān)處理,比如添加、刪除或修改數(shù)據(jù)等)。
      [0004]從上述協(xié)商過程可知,集群主節(jié)點只有在系統(tǒng)內(nèi)大多數(shù)非主節(jié)點都批準該決議后,才會發(fā)送提交消息,也即,只有大多數(shù)集群非主節(jié)點都批準該決議后,才意味著該決議的協(xié)商成功,各節(jié)點才能進一步在自己節(jié)點提交決議。但是,在協(xié)商過程中,個別集群非主節(jié)點的通信鏈路可能會出現(xiàn)問題(比如非主節(jié)點掉電重啟、鏈路中斷等),還有可能出現(xiàn)一些集群非主節(jié)點退出系統(tǒng),另外一些新的集群非節(jié)點加入系統(tǒng),而新加入的集群非主節(jié)點的數(shù)據(jù)版本落后于集群主節(jié)點。這樣,在協(xié)商過程中,能夠批準集群主節(jié)點發(fā)送的最新決議的集群非主節(jié)點就會越來越少,協(xié)商一致的幾率會越來越低,一旦集群中一半數(shù)量的集群非主節(jié)點版本落后,后續(xù)的決議都將無法協(xié)商一致,這時就需要中斷協(xié)商過程,通過人工干預更新各集群非主節(jié)點的最新數(shù)據(jù)。
      [0005]通過上述分析可知,當集群非主節(jié)點數(shù)據(jù)版本落后時,將無法參與后續(xù)數(shù)據(jù)協(xié)商,隨著數(shù)據(jù)版本落后的集群非主節(jié)點越來越多,數(shù)據(jù)協(xié)商失敗的概率越來越大,從而影響系統(tǒng)業(yè)務的正常進行。


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

      [0006]本發(fā)明實施例提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法及裝置,用以解決現(xiàn)有技術(shù)中由于集群非主節(jié)點數(shù)據(jù)版本落后,無法參與后續(xù)數(shù)據(jù)協(xié)商,影響系統(tǒng)業(yè)務的正常進行的問題。
      [0007]第一方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法,包括:
      [0008]在進行數(shù)據(jù)協(xié)商的過程中,根據(jù)本節(jié)點已提交的決議的最大決議編號和集群主節(jié)點發(fā)送的最大決議編號,判斷是否需要進行決議追趕;
      [0009]在確定需要進行決議追趕后,向所述集群主節(jié)點或除本節(jié)點外的集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議,或通過調(diào)用外部接口向集群服務對象請求獲取本節(jié)點需要追趕的決議。
      [0010]結(jié)合第一方面,在第一種可能的實現(xiàn)方式中,根據(jù)本節(jié)點已提交的決議的最大決議編號和集群主節(jié)點發(fā)送的決議編號,判斷是否需要進行決議追趕,包括:
      [0011]接收集群主節(jié)點發(fā)送的開始協(xié)商消息;
      [0012]將本節(jié)點已提交的決議的最大決議編號加1后,與所述開始協(xié)商消息中包含的最大決議編號進行比較;所述開始協(xié)商消息中包含的最大決議編號為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個決議的決議編號;
      [0013]若本節(jié)點已提交的決議的最大決議編號加1后,小于所述開始協(xié)商消息中包含的最大決議編號,則確定需要進行決議追趕。
      [0014]結(jié)合第一方面,在第二種可能的實現(xiàn)方式中,根據(jù)本節(jié)點已提交的決議的最大決議編號和集群主節(jié)點發(fā)送的決議編號,判斷是否需要進行決議追趕,包括:
      [0015]接收所述集群主節(jié)點發(fā)送的提交消息;
      [0016]將本節(jié)點已提交的決議的最大決議編號加上最近一次批準的打包決議的決議個數(shù)后,與所述提交消息中包含的最大決議編號進行比較,所述提交消息中包含的最大決議編號為所述打包決議中最后一個決議的決議編號;
      [0017]若本節(jié)點已提交的決議的最大決議編號加上所述打包決議的決議個數(shù)后,小于所述提交消息中包含的最大決議編號,則確定需要進行決議追趕。
      [0018]結(jié)合第一方面,或第一方面的第一或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議,或通過調(diào)用外部接口向集群服務對象請求獲取本節(jié)點需要追趕的決議,包括:
      [0019]在所述集群主節(jié)點發(fā)送的最大決議編號與本節(jié)點已提交的決議的最大決議編號之差小于設定差值閾值、且本節(jié)點已提交的決議的最大決議編號加1后大于等于所述集群主節(jié)點發(fā)送的最小決議編號時,向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議;
      [0020]在所述集群主節(jié)點發(fā)送的最大決議編號與本節(jié)點已提交的決議的最大決議編號之差大于等于設定差值閾值時,或者本節(jié)點已提交的決議的最大決議編號加1后小于所述集群主節(jié)點發(fā)送的最小決議編號時,通過調(diào)用外部接口向集群服務對象請求獲取本節(jié)點需要追趕的決議。
      [0021]結(jié)合第一方面,或第一方面的第一至三種可能的實現(xiàn)方式中的任意一種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議,包括:
      [0022]向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點發(fā)送追趕消息;
      [0023]接收所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點根據(jù)所述追趕消息發(fā)送的決議。
      [0024]結(jié)合第一方面,或第一方面的第一至四種可能的實現(xiàn)方式中的任意一種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,所述方法還包括:
      [0025]在初始化完成后,啟動等待接收消息的定時器;
      [0026]若在接收到所述集群主節(jié)點發(fā)送的任何消息之前定時器超時,則向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取已協(xié)商一致的決議。
      [0027]第二方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法,該方法包括:
      [0028]接收集群非主節(jié)點發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點已提交的決議的最大決議編號和所述集群非主節(jié)點的節(jié)點標識信息;
      [0029]根據(jù)所述追趕消息中包括的最大決議編號和本節(jié)點已提交的決議的最大決議編號,確定需要發(fā)送給所述集群非主節(jié)點的決議;
      [0030]根據(jù)所述追趕消息中包括的節(jié)點標識信息,將確定的決議發(fā)送給所述集群非主節(jié)點。
      [0031]結(jié)合第二方面,在第一種可能的實現(xiàn)方式中,根據(jù)所述追趕消息中包括的節(jié)點標識信息,將確定的決議發(fā)送給所述集群非主節(jié)點,包括:
      [0032]若在所述集群非主節(jié)點已提交的決議的最大決議編號加I至本節(jié)點已提交的決議的最大決議編號之間的編號區(qū)間內(nèi)的決議編號數(shù)目小于等于設定閾值,則根據(jù)所述追趕消息中包括的節(jié)點標識信息,將在所述編號區(qū)間內(nèi)的決議編號分別對應的決議進行打包;并
      [0033]將打包后的決議發(fā)送給所述集群非主節(jié)點。
      [0034]結(jié)合第二方面,在第二種可能的實現(xiàn)方式中,根據(jù)所述追趕消息中包括的節(jié)點標識信息,將確定的決議發(fā)送給所述集群非主節(jié)點,包括:
      [0035]若在所述集群非主節(jié)點已提交的決議的最大決議編號加I至本節(jié)點已提交的決議的最大決議編號之間的編號區(qū)間內(nèi)的決議編號數(shù)目大于設定閾值,則將在所述編號區(qū)間內(nèi)的決議編號分別對應的決議劃分為多個分片,其中,每個分片包含的決議個數(shù)小于等于所述設定閾值,并
      [0036]將每個分片分別發(fā)送給所述集群非主節(jié)點。
      [0037]第三方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置,包括:
      [0038]判斷模塊,用于在進行數(shù)據(jù)協(xié)商的過程中,根據(jù)本節(jié)點已提交的決議的最大決議編號和集群主節(jié)點發(fā)送的最大決議編號,判斷是否需要進行決議追趕;
      [0039]獲取模塊,用于在所述判斷模塊確定需要進行決議追趕后,向所述集群主節(jié)點或除本節(jié)點外的集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議,或通過調(diào)用外部接口向集群服務對象請求獲取本節(jié)點需要追趕的決議。
      [0040]結(jié)合第三方面,在第一種可能的實現(xiàn)方式中,所述判斷模塊具體用于:
      [0041]接收集群主節(jié)點發(fā)送的開始協(xié)商消息;將本節(jié)點已提交的決議的最大決議編號加I后,與所述開始協(xié)商消息中包含的最大決議編號進行比較;所述開始協(xié)商消息中包含的最大決議編號為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個決議的決議編號;若本節(jié)點已提交的決議的最大決議編號加I后,小于所述開始協(xié)商消息中包含的最大決議編號,則確定需要進行決議追趕。
      [0042]結(jié)合第三方面,在第二種可能的實現(xiàn)方式中,所述判斷模塊具體用于:
      [0043]接收所述集群主節(jié)點發(fā)送的提交消息;將本節(jié)點已提交的決議的最大決議編號加上最近一次批準的打包決議的決議個數(shù)后,與所述提交消息中包含的最大決議編號進行比較,所述提交消息中包含的最大決議編號為所述打包決議中最后一個決議的決議編號;若本節(jié)點已提交的決議的最大決議編號加上所述打包決議的決議個數(shù)后,小于所述提交消息中包含的最大決議編號,則確定需要進行決議追趕。
      [0044]結(jié)合第三方面,或第三方面的第一或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述獲取模塊具體用于:
      [0045]在所述集群主節(jié)點發(fā)送的最大決議編號與本節(jié)點已提交的決議的最大決議編號之差小于設定差值閾值、且本節(jié)點已提交的決議的最大決議編號加1后大于等于所述集群主節(jié)點發(fā)送的最小決議編號時,向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議;
      [0046]在所述集群主節(jié)點發(fā)送的最大決議編號與本節(jié)點已提交的決議的最大決議編號之差大于等于設定差值閾值時,或者本節(jié)點已提交的決議的最大決議編號加1后小于所述集群主節(jié)點發(fā)送的最小決議編號時,通過調(diào)用外部接口向集群服務對象請求獲取本節(jié)點需要追趕的決議。
      [0047]結(jié)合第三方面,或第三方面的第一至三種可能的實現(xiàn)方式中的任意一種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述獲取模塊具體用于:
      [0048]向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點發(fā)送追趕消息;接收所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點根據(jù)所述追趕消息發(fā)送的決議。
      [0049]結(jié)合第三方面,或第三方面的第一至四種可能的實現(xiàn)方式中的任意一種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,所述獲取模塊還用于:
      [0050]在初始化完成后,啟動等待接收消息的定時器;若在接收到所述集群主節(jié)點發(fā)送的任何消息之前定時器超時,則向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取已協(xié)商一致的決議。
      [0051]第四方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置,包括:
      [0052]接收模塊,用于接收集群非主節(jié)點發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點已提交的決議的最大決議編號和所述集群非主節(jié)點的節(jié)點標識信息;
      [0053]確定模塊,用于根據(jù)所述接收模塊接收的追趕消息中包括的最大決議編號和本節(jié)點已提交的決議的最大決議編號,確定需要發(fā)送給所述集群非主節(jié)點的決議;
      [0054]發(fā)送模塊,用于根據(jù)所述追趕消息中包括的節(jié)點標識信息,將所述確定模塊確定的決議發(fā)送給所述集群非主節(jié)點。
      [0055]結(jié)合第四方面,在第一種可能的實現(xiàn)方式中,所述發(fā)送模塊具體用于:
      [0056]若在所述集群非主節(jié)點已提交的決議的最大決議編號加1至本節(jié)點已提交的決議的最大決議編號之間的編號區(qū)間內(nèi)的決議編號數(shù)目小于等于設定閾值,則根據(jù)所述追趕消息中包括的節(jié)點標識信息,將在所述編號區(qū)間內(nèi)的決議編號分別對應的決議進行打包;并將打包后的決議發(fā)送給所述集群非主節(jié)點。
      [0057]結(jié)合第四方面,在第二種可能的實現(xiàn)方式中,所述發(fā)送模塊具體用于:
      [0058]若在所述集群非主節(jié)點已提交的決議的最大決議編號加1至本節(jié)點已提交的決議的最大決議編號之間的編號區(qū)間內(nèi)的決議編號數(shù)目大于設定閾值,則將在所述編號區(qū)間內(nèi)的決議編號分別對應的決議劃分為多個分片,其中,每個分片包含的決議個數(shù)小于等于所述設定閾值,并將每個分片分別發(fā)送給所述集群非主節(jié)點。
      [0059]第五方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商設備,該設備包括處理器、存儲器和總線,所述存儲器存儲執(zhí)行指令,當所述設備運行時,所述處理器與所述存儲器之間通過總線通信,所述處理器執(zhí)行所述執(zhí)行指令使得所述設備執(zhí)行如下方法:
      [0060]在進行數(shù)據(jù)協(xié)商的過程中,根據(jù)本節(jié)點已提交的決議的最大決議編號和集群主節(jié)點發(fā)送的最大決議編號,判斷是否需要進行決議追趕;
      [0061]在確定需要進行決議追趕后,向所述集群主節(jié)點或除本節(jié)點外的集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議,或通過調(diào)用外部接口向集群服務對象請求獲取本節(jié)點需要追趕的決議。
      [0062]結(jié)合第五方面,在第一種可能的實現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,根據(jù)本節(jié)點已提交的決議的最大決議編號和集群主節(jié)點發(fā)送的決議編號,判斷是否需要進行決議追趕,包括:
      [0063]接收集群主節(jié)點發(fā)送的開始協(xié)商消息;
      [0064]將本節(jié)點已提交的決議的最大決議編號加I后,與所述開始協(xié)商消息中包含的最大決議編號進行比較;所述開始協(xié)商消息中包含的最大決議編號為所述開始協(xié)商消息中包含的需要協(xié)商的打包決議中第一個決議的決議編號;
      [0065]若本節(jié)點已提交的決議的最大決議編號加I后,小于所述開始協(xié)商消息中包含的最大決議編號,則確定需要進行決議追趕。
      [0066]結(jié)合第五方面,在第二種可能的實現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,根據(jù)本節(jié)點已提交的決議的最大決議編號和集群主節(jié)點發(fā)送的決議編號,判斷是否需要進行決議追趕,包括:
      [0067]接收所述集群主節(jié)點發(fā)送的提交消息;
      [0068]將本節(jié)點已提交的決議的最大決議編號加上最近一次批準的打包決議的決議個數(shù)后,與所述提交消息中包含的最大決議編號進行比較,所述提交消息中包含的最大決議編號為所述打包決議中最后一個決議的決議編號;
      [0069]若本節(jié)點已提交的決議的最大決議編號加上所述打包決議的決議個數(shù)后,小于所述提交消息中包含的最大決議編號,則確定需要進行決議追趕。
      [0070]結(jié)合第五方面,或第五方面的第一或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議,或通過調(diào)用外部接口向集群服務對象請求獲取本節(jié)點需要追趕的決議,包括:
      [0071]在所述集群主節(jié)點發(fā)送的最大決議編號與本節(jié)點已提交的決議的最大決議編號之差小于設定差值閾值、且本節(jié)點已提交的決議的最大決議編號加I后大于等于所述集群主節(jié)點發(fā)送的最小決議編號時,向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議;
      [0072]在所述集群主節(jié)點發(fā)送的最大決議編號與本節(jié)點已提交的決議的最大決議編號之差大于等于設定差值閾值時,或者本節(jié)點已提交的決議的最大決議編號加I后小于所述集群主節(jié)點發(fā)送的最小決議編號時,通過調(diào)用外部接口向集群服務對象請求獲取本節(jié)點需要追趕的決議。
      [0073]結(jié)合第五方面,或第五方面的第一至三種可能的實現(xiàn)方式中的任意一種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取本節(jié)點需要追趕的決議,包括:
      [0074]向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點發(fā)送追趕消息;
      [0075]接收所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點根據(jù)所述追趕消息發(fā)送的決議。
      [0076]結(jié)合第五方面,或第五方面的第一至四種可能的實現(xiàn)方式中的任意一種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,所述處理器執(zhí)行的所述方法還包括:
      [0077]在初始化完成后,啟動等待接收消息的定時器;
      [0078]若在接收到所述集群主節(jié)點發(fā)送的任何消息之前定時器超時,則向所述集群主節(jié)點或除本節(jié)點外的其它集群非主節(jié)點請求獲取已協(xié)商一致的決議。
      [0079]第六方面,提供一種分布式系統(tǒng)中數(shù)據(jù)協(xié)商設備,該設備包括處理器、存儲器和總線,所述存儲器存儲執(zhí)行指令,當所述設備運行時,所述處理器與所述存儲器之間通過總線通信,所述處理器執(zhí)行所述執(zhí)行指令使得所述設備執(zhí)行如下方法:
      [0080]接收集群非主節(jié)點發(fā)送的追趕消息,所述追趕消息包括所述集群非主節(jié)點已提交的決議的最大決議編號和所述集群非主節(jié)點的節(jié)點標識信息;
      [0081]根據(jù)所述追趕消息中包括的最大決議編號和本節(jié)點已提交的決議的最大決議編號,確定需要發(fā)送給所述集群非主節(jié)點的決議;
      [0082]根據(jù)所述追趕消息中包括的節(jié)點標識信息,將確定的決議發(fā)送給所述集群非主節(jié)點。
      [0083]結(jié)合第六方面,在第一種可能的實現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,根據(jù)所述追趕消息中包括的節(jié)點標識信息,將確定的決議發(fā)送給所述集群非主節(jié)點,包括:
      [0084]若在所述集群非主節(jié)點已提交的決議的最大決議編號加1至本節(jié)點已提交的決議的最大決議編號之間的編號區(qū)間內(nèi)的決議編號數(shù)目小于等于設定閾值,則根據(jù)所述追趕消息中包括的節(jié)點標識信息,將在所述編號區(qū)間內(nèi)的決議編號分別對應的決議進行打包;并
      [0085]將打包后的決議發(fā)送給所述集群非主節(jié)點。
      [0086]結(jié)合第六方面,在第二種可能的實現(xiàn)方式中,所述處理器執(zhí)行的所述方法中,根據(jù)所述追趕消息中包括的節(jié)點標識信息,將確定的決議發(fā)送給所述集群非主節(jié)點,包括:
      [0087]若在所述集群非主節(jié)點已提交的決議的最大決議編號加1至本節(jié)點已提交的決議的最大決議編號之間的編號區(qū)間內(nèi)的決議編號數(shù)目大于設定閾值,則將在所述編號區(qū)間內(nèi)的決議編號分別對應的決議劃分為多個分片,其中,每個分片包含的決議個數(shù)小于等于所述設定閾值,并
      [0088]將每個分片分別發(fā)送給所述集群非主節(jié)點。
      [0089]采用上述方法、裝置或設備,集群非主節(jié)點在參與數(shù)據(jù)協(xié)商的過程中發(fā)現(xiàn)本節(jié)點數(shù)據(jù)版本落后時,可以及時進行決議追趕,將缺失的決議補齊,從而可以在后續(xù)正常參與數(shù)據(jù)協(xié)商,提高了數(shù)據(jù)協(xié)商成功的幾率,保證了系統(tǒng)業(yè)務的正常進行。

      【專利附圖】

      【附圖說明】
      [0090]圖1為本發(fā)明實施例一提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法流程圖;
      [0091]圖2為本發(fā)明實施例二提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法流程圖;
      [0092]圖3為本發(fā)明實施例三提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商方法流程圖;
      [0093]圖4為本發(fā)明實施例四提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置結(jié)構(gòu)示意圖;
      [0094]圖5為本發(fā)明實施例五提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商裝置結(jié)構(gòu)示意圖;
      [0095]圖6為本發(fā)明實施例六提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商設置結(jié)構(gòu)示意圖;
      [0096]圖7為本發(fā)明實施例七提供的分布式系統(tǒng)中數(shù)據(jù)協(xié)商設置結(jié)構(gòu)示意圖。

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