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