一種paxos實例更新方法、設(shè)備及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種paxos實例更新方法,所述方法包括:提案節(jié)點執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,根據(jù)所述已批準paxos實例的實例信息得到需更新paxos實例的實例ID;提案節(jié)點獲取上次已批準paxos實例成功使用的序列號,并以所述上次已批準paxos實例成功使用的序列號和所述實例ID直接向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例。相應(yīng)的,本發(fā)明還公開了一種用于paxos實例更新的設(shè)備及系統(tǒng),本發(fā)明簡化了paxos算法的執(zhí)行,提高了paxos算法的執(zhí)行效率,解決了現(xiàn)有paxos算法執(zhí)行效率低的問題。
【專利說明】一種paxos實例更新方法、設(shè)備及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式計算領(lǐng)域,特別涉及一種paxos實例更新方法、設(shè)備及系統(tǒng)。
【背景技術(shù)】
[0002]分布式計算系統(tǒng)中各節(jié)點之間的配合動作為用戶提供更加可靠的數(shù)據(jù)和可計算資源的訪問。分布式計算系統(tǒng)中每個節(jié)點執(zhí)行相同的任務(wù)并儲存相同的信息,因而分布式計算系統(tǒng)常不可避免的會產(chǎn)生如下錯誤:進程慢、重啟以及消息延遲、消息丟失、消息重復(fù)
坐寸ο
[0003]為保證分布式計算系統(tǒng)中每個節(jié)點執(zhí)行相同的命令,需要在每一條指令上執(zhí)行一個“一致性算法”。paxos算法就是一種應(yīng)用于分布式計算系統(tǒng)的“一致性算法”。在paxos算法中,如果進行一次在所有副本上的數(shù)據(jù)更新操作,首選需要一個學(xué)習(xí)(Iearn)過程來確定是針對哪個paxos實例,再進行一個準備(prepare)過程以獲得批準(accept)的請求權(quán)利及執(zhí)行批準過程所需要的序列號,最后執(zhí)行一個批準過程,過程復(fù)雜,涉及場景多,因此,執(zhí)行效率低,不能用于高負載、高并發(fā)的應(yīng)用場景。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供的實現(xiàn)分布式計算系統(tǒng)一致性的方法、設(shè)備及系統(tǒng),以解決現(xiàn)有paxos算法執(zhí)行效率低的問題。
[0005]本發(fā)明提供了一種paxos實例更新方法,所述方法包括:
[0006]提案節(jié)點執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,根據(jù)所述已批準paxos實例的實例信息得到需更新paxos實例的實例ID ;
[0007]提案節(jié)點獲取上次已批準paxos實例成功使用的序列號,并以所述上次已批準paxos實例成功使用的序列號和所述實例ID直接向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例。
[0008]在上述方案中,如果所述批準請求沒有被多數(shù)派所述批準節(jié)點接受,所述方法還包括:提案節(jié)點以所述實例ID執(zhí)行準備過程,確定序列號;提案節(jié)點以所述準備過程確定的序列號和所述實例ID,向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例。
[0009]在上述方案中,所述提案節(jié)點執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,包括:提案節(jié)點接收客戶端發(fā)起的方案更新請求,并向所有的批準節(jié)點發(fā)起學(xué)習(xí)請求;在接受所述學(xué)習(xí)請求的批準節(jié)點數(shù)目滿足多數(shù)派要求時,獲得當(dāng)前方案下已批準paxos實例的實例信息。
[0010]在上述方案中,所述提案節(jié)點為預(yù)先指定的主提案節(jié)點。
[0011]本發(fā)明還提供了一種用于paxos實例更新的設(shè)備,所述設(shè)備包括:學(xué)習(xí)單元和批準單元;其中,[0012]學(xué)習(xí)單元,用于執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,根據(jù)所述已批準paxos實例的實例信息得到需更新paxos實例的實例ID ;
[0013]批準單元,用于獲取上次已批準paxos實例成功使用的序列號,并以所述上次已批準paxos實例成功使用的序列號和所述實例ID直接向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例。
[0014]在上述方案中,所述設(shè)備還包括:準備單元;
[0015]所述批準單元,還用于在所述批準請求沒有被多數(shù)派所述批準節(jié)點接受時,通知所述準備單元;以及,用于以所述準備單元確定的序列號和所述學(xué)習(xí)單元得到的實例ID,向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例;
[0016]所述準備單元,用于在接收到所述批準單元的通知后,以所述學(xué)習(xí)單元得到的實例ID執(zhí)行準備過程,確定序列號。
[0017]在上述方案中,所述學(xué)習(xí)單元,用于接收客戶端發(fā)起的方案更新請求,并向所有的批準節(jié)點發(fā)起學(xué)習(xí)請求;在接受所述學(xué)習(xí)請求的批準節(jié)點數(shù)目滿足多數(shù)派要求時,獲得當(dāng)前方案下已批準paxos實例的實例信息。
[0018]在上述方案中,其特征在于,所述用于paxos實例更新的設(shè)備為在分布式計算系統(tǒng)中預(yù)先指定的主提案節(jié)點。
[0019]本發(fā)明還提供了一種分布式計算系統(tǒng),所述系統(tǒng)包括上述用于paxos實例更新的設(shè)備。
[0020]在上述方案中,所述分布式計算系統(tǒng)存在多個提案節(jié)點時,所述用于paxos實例更新的設(shè)備為所述分布式計算系統(tǒng)中預(yù)先指定的主提案節(jié)點。
[0021]本發(fā)明實施例的有益效果是dARpaxos實例更新時,提案節(jié)點采用上次已批準paxos實例成功使用過的序列號直接向所有的批準節(jié)點發(fā)起批準請求,這樣,采用使用過的序列號中最大的序列號直接發(fā)起批準請求來執(zhí)行paxos實例更新,不僅執(zhí)行成功率比較高,而且可以避免重復(fù)執(zhí)行準備過程,既不違背paxos算法已有的準則,也簡化了 paxos算法的執(zhí)行,提高了 paxos算法的執(zhí)行效率,解決了現(xiàn)有paxos算法執(zhí)行效率低的問題。
【專利附圖】
【附圖說明】
[0022]圖1為本發(fā)明實施例paxos實例更新方法的實現(xiàn)流程圖;
[0023]圖2為本發(fā)明實施例中paxos實例更新過程的具體實現(xiàn)流程圖;
[0024]圖3為本發(fā)明實施例用于paxos實例更新的設(shè)備的組成結(jié)構(gòu)示意圖;
[0025]圖4為本發(fā)明實施例分布式計算系統(tǒng)一種示例性組成結(jié)構(gòu)示意圖。
【具體實施方式】
[0026]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進一步地詳細描述。
[0027]paxos算法需要三類節(jié)點來完成:提案節(jié)點(Proposer)、批準節(jié)點(Acceptor)和學(xué)習(xí)節(jié)點(Learner),其中,學(xué)習(xí)節(jié)點和提案節(jié)點可以是同一個節(jié)點,批準節(jié)點需要至少有兩個。
[0028]Paxos算法中,提案節(jié)點向批準節(jié)點提出值(value),即發(fā)起一個paxos實例的更新,如果多數(shù)派批準節(jié)點接受所述paxos實例的更新,則批準所述paxos實例的更新,執(zhí)行相應(yīng)的更新操作,如果接受所述paxos實例更新的批準節(jié)點數(shù)目不滿足多數(shù)派要求,則不批準所述paxos實例的更新,返回重新執(zhí)行所述paxos實例的更新。在paxos實例的更新已批準,學(xué)習(xí)節(jié)點或提案節(jié)點可以向各批準節(jié)點學(xué)習(xí)已批準paxos實例的相關(guān)信息。
[0029]一個paxos實例的更新是指一次完整的將某個值更新到分布式計算系統(tǒng)所有節(jié)點上的過程。在分布式計算系統(tǒng)將當(dāng)前paxos實例的更新操作執(zhí)行成功后,提案節(jié)點接收到客戶端發(fā)起的方案更新請求,便開始執(zhí)行下一個paxos實例的更新,向所有批準節(jié)點發(fā)起下一個paxos實例的更新,在下一個paxos實例的更新被多數(shù)派批準節(jié)點接受時,則批準下一個paxos實例的更新,執(zhí)行相應(yīng)的更新操作。
[0030]paxos算法中,一個提案節(jié)點完成一個paxos實例的更新一般需要有三個過程:學(xué)習(xí)過程、準備過程和批準過程。
[0031]其中,學(xué)習(xí)過程中,提案節(jié)點通過向所有的批準節(jié)點發(fā)起學(xué)習(xí)請求,獲取多數(shù)派批準節(jié)點已批準paxos實例的實例信息,如已批準paxos實例的實例ID、已批準的值和成功使用的序列號等。然后,提案節(jié)點根據(jù)已批準paxos實例的實例信息,得到下一個paxos實例更新所需的實例ID,其中下一個paxos實例為待批準進行更新的實例;
[0032]準備過程中,提案節(jié)點首先計算該下一個paxos實例更新所需的序列號,再基于計算得到的序列號和學(xué)習(xí)過程中得到的實例ID向所有的批準節(jié)點發(fā)起準備請求,如果所述準備請求被多數(shù)派批準節(jié)點所接受,則提案節(jié)點將以所述準備請求中包含的序列號進行后續(xù)的批準過程。
[0033]批準過程中,提案節(jié)點以準備過程中確定的序列號和學(xué)習(xí)過程中得到的實例ID發(fā)起批準請求,該批準請求中還包含提案節(jié)點提出的值(即該下一個paxos實例的值),如果多數(shù)派批準節(jié)點接受所述批準請求,則批準該下一個paxos實例的更新,執(zhí)行相應(yīng)的更新操作,一次paxos實例的更新過程結(jié)束。
[0034]本發(fā)明實施例提供一種paxos實例更新方法、設(shè)備及系統(tǒng),以簡化paxos算法,提高其執(zhí)行效率。
[0035]參照圖1所示,本發(fā)明實施例提供的paxos實例更新方法主要可以包括如下步驟:
[0036]步驟101:提案節(jié)點執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,根據(jù)所述已批準paxos實例的實例信息得到需更新paxos實例的實例ID ;
[0037]步驟102:提案節(jié)點獲取上次已批準paxos實例成功使用的序列號,并以所述上次已批準paxos實例成功使用的序列號和所述實例ID直接向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例。
[0038]其中,提案節(jié)點需要在執(zhí)行下一個實例之前獲取上次已批準paxos實例成功使用的序列號。具體的獲取方式有多種,例如,提案節(jié)點可以在確認上次已批準paxos實例已批準時,將包含其成功使用的序列號的實例信息記錄在本地的指定位置,后續(xù)執(zhí)行下一個實例時,可以直接從所述指定位置讀取。再例如,提案節(jié)點也可以在執(zhí)行下一個實例時,從批準所述上次已批準paxos實例的任意一個批準節(jié)點上主動獲取上次已批準paxos實例成功使用的序列號。
[0039]其中,如果所述批準請求沒有被多數(shù)派所述批準節(jié)點接受,所述方法還包括:提案節(jié)點以所述實例ID執(zhí)行準備過程,確定序列號;提案節(jié)點以所述準備過程確定的序列號和所述實例ID,向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例。
[0040]其中,所述提案節(jié)點執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,可以包括:提案節(jié)點接收客戶端發(fā)起的方案更新請求,并向所有的批準節(jié)點發(fā)起學(xué)習(xí)請求;在接受所述學(xué)習(xí)請求的批準節(jié)點數(shù)目滿足多數(shù)派要求時,獲得當(dāng)前方案下已批準paxos實例的實例信息。
[0041]本發(fā)明實施例提供的paxos實例更新方法,在執(zhí)行paxos實例更新時,提案節(jié)點采用上次已批準實例成功使用的序列號來直接向所有的批準節(jié)點發(fā)起批準請求。在所述批準請求沒有得到多數(shù)派批準節(jié)點接受時,仍然按照原有paxos算法的處理方法執(zhí)行paxos實例的更新。
[0042]按照paxos算法的準則“對于同一個paxos實例的更新,每次批準請求中使用的序列號都要大于上次批準請求中使用的序列號”,采用上次已批準paxos實例成功使用的序列號也就是采用上次已批準paxos實例在更新時使用過的最大序列號,這樣,能夠確保paxos實例更新所采用的序列號為最大,也就提高了 paxos實例更新已批準的概率,提高了 paxos實例更新的執(zhí)行成功率;并且,使得同一個提案節(jié)點執(zhí)行多個paxos實例的過程中不需要在每個paxos實例更新時都執(zhí)行準備過程,也就是說一次準備過程可以被多個paxos實例共用,在不違背現(xiàn)有paxos算法規(guī)則的前提下,簡化了 paxos算法,提高了 paxos算法的執(zhí)行效率,解決了現(xiàn)有paxos算法執(zhí)行效率低的問題。
[0043]如果存在多個提案節(jié)點對同一 paxos實例執(zhí)行更新,那么提案節(jié)點以上次已批準的paxos實例成功使用的序列號發(fā)起批準請求時,已批準的概率就會降低,本發(fā)明實施例中方法的執(zhí)行效率會隨之降低。為了解決這一問題,可以預(yù)先指定一個提案節(jié)點為主提案節(jié)點,使得客戶端優(yōu)先訪問所述主提案節(jié)點,這樣可以確保同一 paxos實例由同一個提案節(jié)點執(zhí)行更新,提高提案節(jié)點以上次已批準的paxos實例成功使用的序列號發(fā)起批準請求的批準概率,相應(yīng)的,也會提高本發(fā)明實施例中方法的執(zhí)行效率。
[0044]具體的,可以預(yù)先設(shè)置一個配置文件,該配置文件用于指示客戶端有限訪問指定的主提案節(jié)點,所有的客戶端均可以讀取該配置文件。這樣,客戶端在發(fā)起方案更強請求之前可以通過讀取所述配置文件來訪問主提案節(jié)點。這里,所述配置文件可以是文本格式或者其他類似格式。
[0045]本發(fā)明實施例中執(zhí)行圖1所示方法的提案節(jié)點優(yōu)選為預(yù)先指定的主提案節(jié)點。
[0046]如圖2所示,本發(fā)明實施例中paxos實例更新過程的具體實現(xiàn)流程可以包括如下步驟:
[0047]步驟201:提案節(jié)點接收到客戶端發(fā)起的方案更新請求;
[0048]步驟202:提案節(jié)點向所有的批準節(jié)點發(fā)起學(xué)習(xí)(Iearn)請求;
[0049]步驟203:各批準節(jié)點接收所述學(xué)習(xí)請求,并向所述提案節(jié)點返回應(yīng)答,該應(yīng)答中包含有當(dāng)前方案下已批準paxos實例的實例信息;[0050]具體的,所述應(yīng)答中可以包含當(dāng)前方案下已批準paxos實例的實例信息,所述實例信息可以包括:已批準paxos實例的實例ID、值和成功使用的序列號。
[0051]實際應(yīng)用中,一個paxos實例的值可以是任何操作指令,例如,一個paxos實例的值可以是“修改某個變量的值為某個值”、“設(shè)置當(dāng)前節(jié)點為主節(jié)點”等等。
[0052]這里,如果批準節(jié)點沒有進行過當(dāng)前方案下的批準,則直接返回空應(yīng)答或者不返回應(yīng)答。
[0053]步驟204:提案節(jié)點接收各批準節(jié)點返回的應(yīng)答,如果返回應(yīng)答的個數(shù)滿足多數(shù)派要求,則繼續(xù)步驟205 ;如果返回應(yīng)答的個數(shù)不滿足多數(shù)派要求,則返回步驟202 ;
[0054]步驟205:提案節(jié)點根據(jù)所述接收的應(yīng)答得到paxos實例更新的實例ID ;
[0055]具體的,提案節(jié)點可以從所述應(yīng)答中提取已批準paxos實例的實例信息,根據(jù)已批準paxos實例的實例ID采用預(yù)先約定的算法計算得到當(dāng)前方案下的所述paxos實例更新的實例ID。
[0056]例如,對于paxos實例的實例IDl,可以由同一方案下上一個paxos實例的實例ID加I得到。例如,同一方案下上一個paxos實例的實例ID為2,那么所述paxos實例的實例ID就為3。
[0057]步驟206:提案節(jié)點獲取上次已批準的paxos實例成功使用的序列號;
[0058]這里,上次已批準paxos實例成功使用的序列號是指,在上次已批準paxos實例的更新過程中被多數(shù)派批準節(jié)點接受的批準請求中包含的序列號。
[0059]這里,具體的獲取方式有多種,例如,提案節(jié)點可以在確認上次已批準paxos實例已批準時,將包含其成功使用的序列號的實例信息記錄在本地的指定位置,執(zhí)行paxos實例更新時,可以直接從所述指定位置讀取。再例如,提案節(jié)點也可以在執(zhí)行paxos實例更新時,從批準所述上次已批準paxos實例的任意一個批準節(jié)點上主動獲取上次已批準paxos實例成功使用的序列號。
[0060]步驟207:提案節(jié)點以所述paxos實例更新的實例ID和上次已批準的paxos實例成功使用的序列號向所有的批準節(jié)點發(fā)起批準請求;
[0061]這里,所述批準請求中還可以包括所述paxos實例更新的值。具體的,可以采用paxos算法中已有的相關(guān)方法得到所述paxos實例的值。例如,可以根據(jù)客戶端發(fā)起的方案更新請求得到,也可以根據(jù)已批準Paxos實例的值得到。
[0062]步驟208:各批準節(jié)點接收所述批準請求,判斷是否接受所述批準請求,如果是,則批準所述paxos實例的更新,執(zhí)行當(dāng)前方案的更新,并向所述提案節(jié)點返回同意應(yīng)答,否貝U,拒絕所述提案節(jié)點的批準請求;
[0063]實際應(yīng)用中,批準節(jié)點接收所述批準請求,判斷所述批準請求中的序列號是否大于同一 paxos實例中上次回復(fù)過的批準請求中的序列號,如果是,則接受所述批準請求,向提案節(jié)點返回OK消息,如果不是,則忽略所述準備請求,不向提案節(jié)點返回任何消息。
[0064]步驟209:提案節(jié)點接收各批準節(jié)點返回的同意應(yīng)答,判斷所述同意應(yīng)答的個數(shù)是否滿足多數(shù)派要求,如果是,則確認所述paxos實例更新已批準,繼續(xù)步驟214,否則繼續(xù)步驟210 ;
[0065]步驟210:提案節(jié)點開始執(zhí)行所述paxos實例更新的準備過程,計算序列號SN1,并以該序列號SNl向所有批準節(jié)點發(fā)起準備請求;[0066]具體的,提案節(jié)點可以采用預(yù)先約定的計算方法計算出序列號SN。
[0067]例如,可以采用如下公式⑴所示的方法計算序列號SN:
[0068]SN = MXN+n (I)
[0069]其中,SN為序列號,M為所述paxos實例的序列號計算輪次,N為提案節(jié)點總數(shù),η為當(dāng)前提案節(jié)點的編號。如果當(dāng)前分布式計算系統(tǒng)中包含有10個提案節(jié)點,提案節(jié)點的編號分別為O至9,需更新的所述paxos實例下計算序列號的輪次為第一次即M=0,則所述paxos實例的最小序列號SN_INIT為O。
[0070]步驟211:各批準節(jié)點接收所述準備請求,判斷是否接受所述準備請求,如果是,則向所述提案節(jié)點返回同意應(yīng)答;如果不是,則忽略所述提案節(jié)點的準備請求;
[0071]實際應(yīng)用中,批準節(jié)點接收所述準備請求,判斷所述準備請求中的序列號SNl是否大于同一 paxos實例下上次回復(fù)過的準備請求中的序列號,如果是,則接受所述準備請求,如果不是,則忽略所述準備請求,不向提案節(jié)點返回任何消息。
[0072]步驟212:提案節(jié)點接收各批準節(jié)點返回的同意應(yīng)答,如果所述同意應(yīng)答的個數(shù)滿足多數(shù)派要求,則繼續(xù)步驟213,否則返回步驟210 ;
[0073]步驟213:提案節(jié)點以所述paxos實例更新的實例ID和序列號SNl向所有批準節(jié)點發(fā)起批準請求,并返回步驟208 ;
[0074]這里,所述批準請求中還包括所述paxos實例更新的值。具體的,可以采用paxos算法中已有的相關(guān)方法得到所述paxos實例的值。例如,可以根據(jù)客戶端發(fā)起的方案更新請求得到,也可以根據(jù)已批準paxos實例的值得到。
[0075]步驟214:當(dāng)前方案更新成功,流程結(jié)束。
[0076]其中,所述多數(shù)派要求可以根據(jù)實際應(yīng)用的需要去設(shè)置,例如,多數(shù)派要求可以是超過半數(shù),或者可以是超過總數(shù)的四分之三等等。一般情況下,多數(shù)派要求采用超過半數(shù)的設(shè)置。
[0077]如果存在多個提案節(jié)點對同一 paxos實例執(zhí)行更新,那么提案節(jié)點以上次已批準的paxos實例成功使用的序列號發(fā)起批準請求時,已批準的概率就會降低,本發(fā)明實施例中方法的執(zhí)行效率會隨之降低。為了解決這一問題,可以預(yù)先指定一個提案節(jié)點為主提案節(jié)點,使得客戶端優(yōu)先訪問所述主提案節(jié)點,這樣可以確保同一 paxos實例由同一個提案節(jié)點執(zhí)行更新,提高提案節(jié)點以上次已批準的paxos實例成功使用的序列號發(fā)起批準請求的批準概率,相應(yīng)的,也會提高本發(fā)明實施例中方法的執(zhí)行效率。
[0078]具體的,可以預(yù)先設(shè)置一個配置文件,該配置文件用于指示客戶端有限訪問指定的主提案節(jié)點,所有的客戶端均可以讀取該配置文件。這樣,客戶端在發(fā)起方案更強請求之前可以通過讀取所述配置文件來訪問主提案節(jié)點。這里,所述配置文件可以是文本格式或者其他類似格式。
[0079]本發(fā)明實施例中執(zhí)行圖2所示流程的提案節(jié)點優(yōu)選為預(yù)先指定的主提案節(jié)點。
[0080]本發(fā)明實施例還提供了一種用于paxos實例更新的設(shè)備,如圖3所示,所述用于paxos實例更新的設(shè)備可以包括:學(xué)習(xí)單元31、和批準單元32 ;其中,
[0081]學(xué)習(xí)單元31,用于執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,根據(jù)所述已批準paxos實例的實例信息得到需更新paxos實例的實例ID ;
[0082]批準單元32,用于獲取上次已批準paxos實例成功使用的序列號,并以所述上次已批準paxos實例成功使用的序列號和所述實例ID直接向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例。
[0083]這里,所述設(shè)備中還可以包括準備單元33,用于在接收到批準單元32的通知后,以所述學(xué)習(xí)單元31得到的實例ID執(zhí)行準備過程,確定序列號。
[0084]其中,所述批準單元32,還用于在所述批準請求沒有被多數(shù)派所述批準節(jié)點接受時,通知所述準備單元33 ;以及,用于以所述準備單元33確定的序列號和所述學(xué)習(xí)單元31得到的實例ID,向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例;
[0085]這里,所述學(xué)習(xí)單元31,用于接收客戶端發(fā)起的方案更新請求,并向所有的批準節(jié)點發(fā)起學(xué)習(xí)請求;在接受所述學(xué)習(xí)請求的批準節(jié)點數(shù)目滿足多數(shù)派要求時,獲得當(dāng)前方案下已批準paxos實例的實例信息。
[0086]如果存在多個設(shè)備對同一 paxos實例執(zhí)行更新,那么所述設(shè)備以上次已批準的paxos實例成功使用的序列號發(fā)起批準請求時,已批準的概率就會降低,執(zhí)行效率會隨之降低。
[0087]為了解決這一問題,可以預(yù)先指定分布式計算系統(tǒng)中的一個提案節(jié)點為主提案節(jié)點,將該主提案節(jié)點作為上述用于paxos實例更新的設(shè)備,使得客戶端優(yōu)先訪問所述主提案節(jié)點,這樣可以確保同一 paxos實例由同一個提案節(jié)點執(zhí)行更新,提高提案節(jié)點以上次已批準的paxos實例成功使用的序列號發(fā)起批準請求的批準概率,相應(yīng)的,也會提高本發(fā)明實施例中方法的執(zhí)行效率。
[0088]具體的,可以預(yù)先設(shè)置一個配置文件,該配置文件用于指示客戶端有限訪問指定的主提案節(jié)點,所有的客戶端均可以讀取該配置文件。這樣,客戶端在發(fā)起方案更強請求之前可以通過讀取所述配置文件來訪問主提案節(jié)點。這里,所述配置文件可以是文本格式或者其他類似格式。
[0089]本發(fā)明實施例中用于paxos實例更新的設(shè)備采用上次已批準paxos實例成功使用過的序列號直接向所有的批準節(jié)點發(fā)起批準請求,這樣,采用使用過的序列號中最大的序列號直接發(fā)起批準請求來執(zhí)行paxos實例更新,不僅執(zhí)行成功率比較高,而且可以避免重復(fù)執(zhí)行準備過程,既不違背paxos算法已有的準則,也簡化了 paxos算法的執(zhí)行,提高了paxos算法的執(zhí)行效率,解決了現(xiàn)有paxos算法執(zhí)行效率低的問題。
[0090]本發(fā)明實施例提供了一種分布式計算系統(tǒng),該分布式計算系統(tǒng)包含有上述實施例所述用于paxos實例更新的設(shè)備。
[0091]實際應(yīng)用中,本發(fā)明實施例提供的分布式計算系統(tǒng)主要可以包括:至少一個提案節(jié)點和至少兩個批準節(jié)點,其中,提案節(jié)點與各批準節(jié)點之間交互能夠?qū)崿F(xiàn)paxos算法,所述提案節(jié)點即為上述實施例所述用于paxos實例更新的設(shè)備。
[0092]如果所述分布式計算系統(tǒng)中存在多個提案節(jié)點,則所述用于paxos實例更新的設(shè)備優(yōu)選為預(yù)先指定的主提案節(jié)點。
[0093]實際應(yīng)用中,如果存在多個提案節(jié)點對同一 paxos實例執(zhí)行更新,那么提案節(jié)點以上次已批準的paxos實例成功使用的序列號發(fā)起批準請求時,已批準的概率就會降低,本發(fā)明實施例中系統(tǒng)執(zhí)行paxos實例更新的效率會隨之降低。為了解決這一問題,可以預(yù)先指定一個提案節(jié)點為主提案節(jié)點,使得客戶端優(yōu)先訪問所述主提案節(jié)點,這樣可以確保同一 paxos實例由同一個提案節(jié)點執(zhí)行更新,提高提案節(jié)點以上次已批準的paxos實例成功使用的序列號發(fā)起批準請求的批準概率,相應(yīng)的,也會提高本發(fā)明實施例中方法的執(zhí)行效率。
[0094]具體的,可以預(yù)先設(shè)置一個配置文件,該配置文件用于指示客戶端有限訪問指定的主提案節(jié)點,所有的客戶端均可以讀取該配置文件。這樣,客戶端在發(fā)起方案更強請求之前可以通過讀取所述配置文件來訪問主提案節(jié)點。這里,所述配置文件可以是文本格式或者其他類似格式。
[0095]實際應(yīng)用中,提案節(jié)點和批準節(jié)點可以是計算機、移動設(shè)備或者類似的其他設(shè)備。提案節(jié)點可以有一個,也可以是兩個或者多個,每個提案節(jié)點都可以發(fā)起paxos實例更新。各批準節(jié)點之間是完全對等獨立的。
[0096]參見圖4,為本發(fā)明實施例中所述分布式計算系統(tǒng)的一種示例,該示例包括一個提案節(jié)點41和四個批準節(jié)點42。
[0097]本發(fā)明實施例中所述分布式計算系統(tǒng)執(zhí)行paxos實例更新時,提案節(jié)點采用上次已批準paxos實例成功使用過的序列號直接向所有的批準節(jié)點發(fā)起批準請求,這樣,采用使用過的序列號中最大的序列號直接發(fā)起批準請求來執(zhí)行paxos實例更新,不僅執(zhí)行成功率比較高,而且可以避免重復(fù)執(zhí)行準備過程,既不違背paxos算法已有的準則,也簡化了paxos算法的執(zhí)行,提高了 paxos算法的執(zhí)行效率,解決了現(xiàn)有paxos算法執(zhí)行效率低的問題。
[0098]以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。
【權(quán)利要求】
1.一種paxos實例更新方法,其特征在于,所述方法包括: 提案節(jié)點執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,根據(jù)所述已批準paxos實例的實例信息得到需更新paxos實例的實例ID ; 提案節(jié)點獲取上次已批準paxos實例成功使用的序列號,并以所述上次已批準paxos實例成功使用的序列號和所述實例ID直接向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新Paxos實例已批準,更新所述需更新paxos實例。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,如果所述批準請求沒有被多數(shù)派所述批準節(jié)點接受,所述方法還包括: 提案節(jié)點以所述實例ID執(zhí)行準備過程,確定序列號; 提案節(jié)點以所述準備過程確定的序列號和所述實例ID,向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述提案節(jié)點執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,包括: 提案節(jié)點接收客戶端發(fā)起的方案更新請求,并向所有的批準節(jié)點發(fā)起學(xué)習(xí)請求;在接受所述學(xué)習(xí)請求的批準節(jié)點數(shù)目滿足多數(shù)派要求時,獲得當(dāng)前方案下已批準paxos實例的實例信息。
4.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于,所述提案節(jié)點為預(yù)先指定的主提案節(jié)點。
5.一種用于paxos實例更新的設(shè)備,其特征在于,所述設(shè)備包括:學(xué)習(xí)單元和批準單元;其中, 學(xué)習(xí)單元,用于執(zhí)行學(xué)習(xí)過程,獲得當(dāng)前方案下已批準paxos實例的實例信息,根據(jù)所述已批準paxos實例的實例信息得到需更新paxos實例的實例ID ; 批準單元,用于獲取上次已批準paxos實例成功使用的序列號,并以所述上次已批準paxos實例成功使用的序列號和所述實例ID直接向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新Paxos實例已批準,更新所述需更新paxos實例。
6.根據(jù)權(quán)利要求5所述的設(shè)備,其特征在于,所述設(shè)備還包括:準備單元; 所述批準單元,還用于在所述批準請求沒有被多數(shù)派所述批準節(jié)點接受時,通知所述準備單元;以及,用于以所述準備單元確定的序列號和所述學(xué)習(xí)單元得到的實例ID,向所有的批準節(jié)點發(fā)起批準請求,在所述批準請求被多數(shù)派所述批準節(jié)點接受后,確認所述需更新paxos實例已批準,更新所述需更新paxos實例; 所述準備單元,用于在接收到所述批準單元的通知后,以所述學(xué)習(xí)單元得到的實例ID執(zhí)行準備過程,確定序列號。
7.根據(jù)權(quán)利要求5所述的設(shè)備,其特征在于,所述學(xué)習(xí)單元,用于接收客戶端發(fā)起的方案更新請求,并向所有的批準節(jié)點發(fā)起學(xué)習(xí)請求;在接受所述學(xué)習(xí)請求的批準節(jié)點數(shù)目滿足多數(shù)派要求時,獲得當(dāng)前方案下已批準paxos實例的實例信息。
8.根據(jù)權(quán)利要求5、6或7所述的設(shè)備,其特征在于,所述用于paxos實例更新的設(shè)備為在分布式計算系統(tǒng)中預(yù)先指定的主提案節(jié)點。
9.一種分布式計算系統(tǒng),其特征在于,所述系統(tǒng)包括如權(quán)利要求5至8任一項所述的用于paxos實例更新的設(shè)備。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述分布式計算系統(tǒng)存在多個提案節(jié)點時,所述用于Paxos實例更新的設(shè)備為所述分布式計算系統(tǒng)中預(yù)先指定的主提案節(jié)點。
【文檔編號】H04L29/08GK103916426SQ201210593773
【公開日】2014年7月9日 申請日期:2012年12月31日 優(yōu)先權(quán)日:2012年12月31日
【發(fā)明者】林謖 申請人:北京新媒傳信科技有限公司