• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    分布式協(xié)商:建立穩(wěn)固分布式大數(shù)據(jù)系統(tǒng)的基石

    2016-04-06 09:29:15陳康黃劍劉建楠
    大數(shù)據(jù) 2016年4期
    關(guān)鍵詞:狀態(tài)機(jī)副本領(lǐng)導(dǎo)者

    陳康,黃劍,劉建楠

    1. 清華信息科學(xué)與技術(shù)國家實驗室(籌),清華大學(xué)計算機(jī)科學(xué)與技術(shù)系,北京 100084;2. 深圳清華大學(xué)研究院,廣東 深圳 518057;3. 浙江清華長三角研究院鄞州創(chuàng)新中心,浙江 寧波 315000;4. 中國石油天然氣股份有限公司慶陽石化分公司,甘肅 慶陽 745002

    分布式協(xié)商:建立穩(wěn)固分布式大數(shù)據(jù)系統(tǒng)的基石

    陳康1,2,3,黃劍1,劉建楠4

    1. 清華信息科學(xué)與技術(shù)國家實驗室(籌),清華大學(xué)計算機(jī)科學(xué)與技術(shù)系,北京 100084;2. 深圳清華大學(xué)研究院,廣東 深圳 518057;3. 浙江清華長三角研究院鄞州創(chuàng)新中心,浙江 寧波 315000;4. 中國石油天然氣股份有限公司慶陽石化分公司,甘肅 慶陽 745002

    分布式協(xié)商的目的是在分布式環(huán)境下在一組進(jìn)程之間決定一個共同的值,這是在分布式系統(tǒng)中最基本的問題。分布式協(xié)商問題的目標(biāo)非常簡單,但是在面對節(jié)點出錯、網(wǎng)絡(luò)出錯、網(wǎng)絡(luò)時延等環(huán)境的時候,協(xié)議設(shè)計以及處理起來十分困難。討論分布式協(xié)商問題的基本形式,在不同的系統(tǒng)假設(shè)下的基本結(jié)果以及分布式協(xié)商在構(gòu)建穩(wěn)固的分布式大數(shù)據(jù)系統(tǒng)中的作用。

    分布式協(xié)商;副本狀態(tài)機(jī);網(wǎng)絡(luò)錯誤;安全性;活躍性

    1 引言

    隨著云計算以及大數(shù)據(jù)的發(fā)展,為了系統(tǒng)的可靠性與性能,將應(yīng)用系統(tǒng)構(gòu)建在分布式環(huán)境中成為了一個不得不做出的選擇。并行處理系統(tǒng)為大數(shù)據(jù)處理提供大規(guī)模并行的處理能力,能夠處理更多的數(shù)據(jù)以及進(jìn)行更復(fù)雜的計算。另外一個方面,分布式環(huán)境也帶來了系統(tǒng)的可靠性,一個基本的想法是如果系統(tǒng)中有多個計算資源的話,某一小部分計算資源失效不應(yīng)影響系統(tǒng)的總體運行。這在單機(jī)系統(tǒng)中由于計算資源有限的關(guān)系不可能實現(xiàn)。在分布式環(huán)境下,實現(xiàn)可靠性最常用以及最基本的結(jié)構(gòu)是進(jìn)行副本復(fù)制。在分布式文件系統(tǒng)[1]中,可以通過使用副本的方式將一個邏輯的數(shù)據(jù)塊復(fù)制到多個其他物理節(jié)點中,這樣在某一個物理節(jié)點損壞不能工作時,分布式文件系統(tǒng)仍可以繼續(xù)工作。副本容錯的方式不僅僅可以進(jìn)行數(shù)據(jù)的容錯,也可以進(jìn)行計算的容錯??梢詫⑿枰蒎e的計算分布到不同的物理節(jié)點中,這樣即使一部分節(jié)點失效了,仍然可以保證計算繼續(xù)進(jìn)行。

    使用副本進(jìn)行容錯最基本的要求是副本之間需要保持一致。在系統(tǒng)的實現(xiàn)上,可以通過名為副本狀態(tài)機(jī)(replicated state machine,RSM)的方式進(jìn)行副本的復(fù)制,這是一種維持多個副本一致的機(jī)制。以數(shù)據(jù)的副本狀態(tài)機(jī)為例,基本的思想是,所有在數(shù)據(jù)上做的操作,在每一個副本上操作都一樣,并且順序也一樣。簡單地說,如果數(shù)據(jù)的初始值是一樣的,那么最終獲得的數(shù)據(jù)也是一樣的,這就是副本狀態(tài)機(jī)的基本思想。副本狀態(tài)機(jī)不僅可以應(yīng)用在數(shù)據(jù)上,還可以應(yīng)用在計算上。副本狀態(tài)機(jī)顧名思義是與狀態(tài)機(jī)相關(guān)的概念,在系統(tǒng)中計算或者數(shù)據(jù)會被表達(dá)為狀態(tài)機(jī)的形式。由于狀態(tài)機(jī)是整個計算機(jī)科學(xué)的理論基礎(chǔ),因此使用狀態(tài)機(jī)的方式理論上就能夠完成所有的計算功能。

    圖1 副本狀態(tài)機(jī)的基本結(jié)構(gòu)

    圖1是副本狀態(tài)機(jī)的基本結(jié)構(gòu)。這里只畫出了兩個副本的狀態(tài)變化過程。實際中會使用5個或者更多的副本狀態(tài)機(jī)來達(dá)到極高的可靠性。上下兩個狀態(tài)機(jī)都是從一個狀態(tài)S0開始,即副本在多個服務(wù)器上的初始狀態(tài)是同樣的狀態(tài)。另外,還需要假設(shè)所有的狀態(tài)機(jī)都是確定性的狀態(tài)機(jī)。這里“確定性”的含義是給定一個狀態(tài),如果給出相同的輸入的話,那么都會轉(zhuǎn)換到相同的唯一的一個狀態(tài)。這樣的話,每一次的狀態(tài)轉(zhuǎn)換都是確定性的,而不是不確定的。如果所有的狀態(tài)轉(zhuǎn)換的順序是一樣的,那么可以認(rèn)為最終的狀態(tài)也是一樣的。這一點是很顯然的,使用數(shù)學(xué)歸納法就可以證明。

    副本狀態(tài)機(jī)是進(jìn)行容錯的基本結(jié)構(gòu)。例如,在通常提供的可靠性機(jī)制中總有一個選項被稱為雙機(jī)熱備份。雙機(jī)熱備份提供兩個完全一樣的運行副本,使得兩臺機(jī)器中的任意一臺出現(xiàn)了錯誤,另外一臺可以接管工作,完全掌控剩下的工作。雙機(jī)熱備份的基本思想在很多系統(tǒng)中都有體現(xiàn)。但是,雙機(jī)熱備份實際上并不能真正解決可靠性的問題。最基本的問題是如果雙機(jī)熱備份中的一個節(jié)點通過超時的機(jī)制判斷對方不在線的時候,并不能保證對方節(jié)點就一定不在線。因此,如果兩個節(jié)點都認(rèn)為對方不在線,那么就會造成兩個節(jié)點同時服務(wù)的情況,很容易打破副本狀態(tài)機(jī)的條件,執(zhí)行不同的操作,產(chǎn)生狀態(tài)的分叉,造成不一致。

    那么,如何確保系統(tǒng)中有一致的節(jié)點各個狀態(tài)的視圖呢?在分布式系統(tǒng)中,通常的做法與投票決定一樣。對副本狀態(tài)機(jī)進(jìn)行狀態(tài)轉(zhuǎn)換的每一個操作都進(jìn)行投票,只有大多數(shù)都同意的操作才作為下一步的操作。如果有成員不知道當(dāng)前的投票情況,那么就停止操作,等待將來其知道的時候再把操作補(bǔ)上。這樣可以避免出現(xiàn)狀態(tài)分叉的情況,同時也可以讓當(dāng)系統(tǒng)中的一小部分成員出現(xiàn)錯誤的時候,分布式系統(tǒng)的工作可以繼續(xù)。由于在兩個成員組成的系統(tǒng)中,大多數(shù)成員的情況就完全包含了這兩個成員,因此原則上由兩個成員組成的系統(tǒng)只有兩個成員都正常工作時,才能夠保證上層系統(tǒng)繼續(xù)工作,也就是說失去了容錯的能力。因此,一個分布式容錯系統(tǒng)起碼要包含3個成員(“大多數(shù)”為任意兩個成員),這樣即使有小部分成員出現(xiàn)了失敗,大部分成員可以繼續(xù)通過協(xié)商達(dá)成一致的結(jié)果,推動副本狀態(tài)機(jī)繼續(xù)執(zhí)行。

    在這樣進(jìn)行容錯的系統(tǒng)中,分布式協(xié)商(distributed consensus)是一個基本的組成部分,用來讓一個副本狀態(tài)機(jī)決定下一步需要做什么樣的操作。抽象來說,分布式協(xié)商的目的是在一組分布式進(jìn)程之間協(xié)商決定一個值,至于這個值的類型是什么反而不是很重要。分布式協(xié)商需要在組成系統(tǒng)的大數(shù)據(jù)進(jìn)程都能夠正常工作的時候協(xié)商出一個值,這樣也就有了一定的容錯能力。

    本文將探討各種不同的分布式協(xié)商協(xié)議、分布式協(xié)商在副本狀態(tài)機(jī)中的應(yīng)用以及在實際系統(tǒng)中如何使用分布式協(xié)商系統(tǒng)來保證系統(tǒng)的可靠性。本文的目的是揭開分布式協(xié)商的神秘面紗,幫助開發(fā)者在理解分布式協(xié)商的基礎(chǔ)上完成可靠的分布式系統(tǒng)的構(gòu)建。對于希望進(jìn)一步深入了解分布式協(xié)商的研究人員來說,本文也將提供足夠的信息來幫助進(jìn)一步的研究。

    2 副本狀態(tài)機(jī)與系統(tǒng)可靠性

    在進(jìn)入分布式協(xié)商討論之前,還需要看一下副本狀態(tài)機(jī)的結(jié)構(gòu)以及在副本狀態(tài)機(jī)上完成系統(tǒng)容錯特性需要完成的工作。分布式協(xié)商是副本狀態(tài)機(jī)機(jī)制重要的一環(huán),但是不是唯一的一環(huán)。了解了副本狀態(tài)機(jī)的總體結(jié)構(gòu)之后,就知道分布式協(xié)商在副本狀態(tài)機(jī)中所處的位置,進(jìn)而可以理解其在副本狀態(tài)機(jī)中的作用。副本狀態(tài)機(jī)的結(jié)構(gòu)如圖1所示。為了保證副本狀態(tài)機(jī)的正確執(zhí)行,仍然需要一些條件,下面就對這些條件展開討論。

    在副本狀態(tài)機(jī)的條件中,初始狀態(tài)相同非常容易保證,這個與具體應(yīng)用相關(guān)。例如,在進(jìn)行文件系統(tǒng)副本備份的時候,初始狀態(tài)為一個空的磁盤,之后開始文件系統(tǒng)的操作;或者在進(jìn)行數(shù)據(jù)庫備份的時候,初始狀態(tài)為空的數(shù)據(jù)庫;甚至是總體的計算機(jī)進(jìn)行熱備份的時候,可以讓節(jié)點處于同樣的狀態(tài)。這在使用物理節(jié)點進(jìn)行備份的時候不太容易做到,而軟件構(gòu)建的虛擬機(jī)很容易做到這一點。本節(jié)討論的內(nèi)容也是基于虛擬機(jī)的方式完成計算的容錯。

    在副本狀態(tài)機(jī)中的另外一個條件是保證所有的操作是確定性的,不會出現(xiàn)隨機(jī)的情況,這比保證初始狀態(tài)一致稍微困難一些,但是使用記錄/重放的方式可以達(dá)到目的。對于大多數(shù)的存儲應(yīng)用,例如文件系統(tǒng)、數(shù)據(jù)庫等,最終的操作會轉(zhuǎn)化為底層磁盤的讀寫操作,即讀出一個數(shù)據(jù)塊或者寫入一個數(shù)據(jù)塊,操作也都是確定性的。對于計算容錯來說,最基本的單元是一條指令,指令的執(zhí)行與具體的節(jié)點相關(guān),例如讀入當(dāng)前時鐘周期數(shù)的指令(x86下是rdtsc,用于讀取當(dāng)前處理器的時鐘周期數(shù)),很難保證在非常精確的時刻讀入兩臺物理機(jī)器相同的時鐘周期數(shù)。在這個時候需要使用記錄/重放技術(shù),在一臺物理機(jī)中讀出真正的數(shù)據(jù),在另外一臺物理機(jī)中只是模擬執(zhí)行一下,不去真正執(zhí)行底層的指令。一個更為簡單直接的例子是獲取隨機(jī)數(shù),只能是記錄一個隨機(jī)數(shù),然后直接傳送給另外一個狀態(tài)機(jī)獲得相同的隨機(jī)數(shù)。

    最后一個條件就是操作的定序問題。這在文件系統(tǒng)和數(shù)據(jù)庫中最終會表現(xiàn)為所有的磁盤讀寫操作的順序。在計算容錯方面,最終表現(xiàn)為所有指令的執(zhí)行順序。還有一個問題與定序相關(guān),即對于外界請求的定序。對于外部請求進(jìn)行不同的定序,非常有可能導(dǎo)致最終內(nèi)部的執(zhí)行流程是不相同的。多個節(jié)點進(jìn)行定序很困難,因為缺乏全局的時鐘(這里所有的操作都要賦予一個自然數(shù)的序號)。為解決這個問題,最簡單也是最通用的做法是選取副本狀態(tài)機(jī)中的一個狀態(tài)機(jī)所在的節(jié)點作為負(fù)責(zé)定序的節(jié)點。所有的請求先在這個節(jié)點定出順序,之后其他的服務(wù)器按照相同的順序操作這些請求。當(dāng)然,定序節(jié)點不應(yīng)該是固定的,否則如果出現(xiàn)錯誤的話會導(dǎo)致不能繼續(xù)定序工作,如何可靠地選擇定序服務(wù)器也是一個非常困難的問題。

    因為是在分布式環(huán)境下構(gòu)建副本狀態(tài)機(jī),還有一個需要解決的問題是系統(tǒng)成員的變化,被稱為配置更新(view change)。這與副本狀態(tài)機(jī)本身沒有關(guān)系,而是分布式系統(tǒng)特有的問題。一般來說,針對特定的分布式算法需要限定參與的成員。這里不是說成員必須是固定的,而是將情況進(jìn)行簡化,首先考慮成員不變化的情況如何設(shè)計分布式算法來達(dá)到目的;之后再加上成員變化的情況。成員變化的情況包括增加成員以及減少成員。無論在哪種情況下,原有的分布式算法需要達(dá)到的目標(biāo)在加入或者減少成員之后都應(yīng)該保持不變。例如,在副本狀態(tài)機(jī)的情況下,原有的狀態(tài)機(jī)都決定在一個文件中寫入數(shù)據(jù)A,那么加入一個新的成員的時候,也需要保持這樣一個動作。這種成員變化的情況被稱為配置的更新,即配置包括了成員的組成,配置更新代表了成員組成的變化。另外還有一種情況也屬于配置更新,即參與成員的角色變化。關(guān)于角色的問題實際上是與具體的分布式算法相關(guān)的。前面在討論對于客戶端請求的排序上,由于一般通過排序節(jié)點完成排序工作,那么這個排序節(jié)點就是一個特殊的角色。排序節(jié)點的變化也就屬于配置更新的情況??傊渲么砹藚⑴c分布式算法中的成員以及成員的角色,其中任意一項發(fā)生了變化,都稱之為分布式系統(tǒng)的配置更新。分布式算法不僅要在成員固定的時候正確執(zhí)行,也要在配置更新之前、配置更新進(jìn)行中以及配置更新完成后都能夠正確執(zhí)行。

    綜上所述,為了使用副本狀態(tài)機(jī)的方法來構(gòu)造穩(wěn)固的分布式系統(tǒng),需要滿足副本狀態(tài)機(jī)的基本條件以及需要對配置更新情況做出正確響應(yīng)。副本狀態(tài)機(jī)的基本條件包括初始狀態(tài)相同、所有的狀態(tài)轉(zhuǎn)換都是確定性的,并且每一步的轉(zhuǎn)換都是相同的。其中,確定每一步轉(zhuǎn)換需要進(jìn)行的處理動作是通過成員之間協(xié)商后確定下來的。這樣可以建立一個在大多數(shù)成員能夠正常工作的條件下推動副本狀態(tài)機(jī)執(zhí)行的可靠機(jī)制。

    3 分布式協(xié)商

    3.1 分布式協(xié)商的基本描述與理論結(jié)果

    維持副本狀態(tài)機(jī)一致的最基本的問題就是讓一組狀態(tài)機(jī)(由一組服務(wù)器維護(hù))共同決定某個步驟之后的下一個步驟應(yīng)該執(zhí)行哪一個操作。因此,核心問題是如何讓一組服務(wù)器就某一件事情(例如狀態(tài)機(jī)下一步需要做的狀態(tài)轉(zhuǎn)換)達(dá)成一致。這個問題被稱為分布式協(xié)商。一般意義下,可以說分布式協(xié)商是在一組服務(wù)器之間協(xié)商出一個值。這個值的含義是與具體的應(yīng)用相關(guān)的,本文不再贅述。對于任何應(yīng)用來說,分布式協(xié)商都有一些無意義的平凡協(xié)議。這些平凡協(xié)議在一組服務(wù)器之間決定一件事情或者決定一個值是直截了當(dāng)?shù)模恍枰械姆?wù)器都預(yù)先確定一個值即可。在任何時刻如果要進(jìn)行協(xié)商的話,只需要直接給出這個預(yù)定值即可。例如,不管協(xié)商的內(nèi)容是什么,所有的服務(wù)器都給出一個固定的值0,顯然這也是完成了分布式協(xié)商,但并沒有什么意義。因此,分布式協(xié)商必須要滿足有意義這個條件。

    實際上,一個分布式協(xié)商需要滿足的條件大致有以下幾點。

    · 最后的協(xié)商結(jié)果只能是一個,協(xié)商完成后不能被更改。這是顯然的,否則算法就不能被稱為分布式協(xié)商,這本來就是分布式協(xié)商的定義。

    · 避免平凡解的條件,即最后決定的值必須是某一個人提出的某一個值(可以稱之為提議),不能設(shè)置一個默認(rèn)的值,否則這個算法就沒有實際的意義。

    · 第三個條件比較隱晦,它涉及如果沒有人提出任何值,算法應(yīng)該怎么辦,此時算法不能憑空造出一個值來讓成員進(jìn)行確定;另外算法還沒有得出結(jié)論的時候,任何一個節(jié)點都不能獲知這個結(jié)論。

    因為上述條件的任何一個條件在任何時刻都不能違反,因此這些條件往往被稱為安全性(safety)條件。整個算法需要滿足一個必須能夠結(jié)束的條件,即分布式協(xié)商最終應(yīng)當(dāng)?shù)贸鼋Y(jié)論,選擇一個值,而不是由于算法陷入無限循環(huán)中。

    這個條件是最終必須要得出結(jié)果的條件。由于系統(tǒng)網(wǎng)絡(luò)可能出現(xiàn)數(shù)據(jù)到達(dá)時延、數(shù)據(jù)丟失等,任何一個算法都不可能在確定的一段時間內(nèi)完成協(xié)商工作,只能保證最終得出結(jié)論。這樣的條件也常常被稱為活躍性(liveness)條件。

    分布式協(xié)商是否能夠達(dá)成與網(wǎng)絡(luò)條件有著密切的關(guān)系。有一個著名的結(jié)論發(fā)表于1985年,被稱為FLP不可能性定理。Fischer、Lynch、Patterson 3位科學(xué)家指出,在異步通信模式下,即使只有一個參與者發(fā)生了失敗,也沒有任何算法能夠保證完成分布式協(xié)商,此為結(jié)論1。

    這雖然是一個令人沮喪的結(jié)論,但是實際系統(tǒng)并不是運行在這樣一個嚴(yán)酷的環(huán)境下。實際系統(tǒng)或多或少是一個同步的系統(tǒng),例如集群環(huán)境下,大部分的數(shù)據(jù)分組都可以在給定的時間內(nèi)到達(dá)。即使是分布在互聯(lián)網(wǎng)上的節(jié)點,也可以合理假設(shè)為到一定超時時間之后,數(shù)據(jù)分組已經(jīng)丟失。這樣,可以對上述條件進(jìn)行加強(qiáng),即在一個更加合理的半異步的模型下,一致性協(xié)商是可以達(dá)到的,并由明確的算法達(dá)到這個協(xié)商的目的。半異步模型保證了雖然網(wǎng)絡(luò)數(shù)據(jù)分組可以丟棄分組,可以有時延,但是在一段足夠長的時間內(nèi),大部分節(jié)點之間的網(wǎng)絡(luò)是正常通信,并且在超時之前將數(shù)據(jù)分組分發(fā)給對應(yīng)的進(jìn)程。半異步模型是一個更加合理的模型,實際系統(tǒng)中如果需要系統(tǒng)工作,那么在構(gòu)建系統(tǒng)的時候還是需要底層網(wǎng)絡(luò)比較可靠的支持,起碼需要保證在大部分的時間內(nèi)大部分的網(wǎng)絡(luò)可以正常工作。在這種模型下,有一個著名的Paxos算法[2]能夠解決分布式協(xié)商的問題。Paxos算法指出,具有f個可能錯誤節(jié)點的半異步通信模式下,總數(shù)為2f+1個節(jié)點是可以達(dá)成分布式協(xié)商的,此為結(jié)論2??梢钥吹?,這里的條件就是讓大部分的節(jié)點可以正常工作。

    最后一個有意思的結(jié)論是如果將錯誤模型進(jìn)行更改,允許節(jié)點“故意”出錯,破壞分布式協(xié)商的過程,這樣的模型被稱為拜占庭通信模式[3]。在拜占庭通信模式下,具有f個可能錯誤的節(jié)點,總數(shù)為3f+1個節(jié)點是可以達(dá)成分布式協(xié)商的,此為結(jié)論3。

    以上3個結(jié)論即為在實際系統(tǒng)中會使用到的結(jié)論,其中結(jié)論1和結(jié)論3主要具有理論意義,能夠指出滿足假設(shè)前提下進(jìn)行協(xié)商的極限。結(jié)論2是一個明確的算法,能夠直接用來構(gòu)架可靠的副本狀態(tài)機(jī)。

    3.2 實際系統(tǒng)中的分布式協(xié)商協(xié)議

    實際系統(tǒng)往往是前面所說的半異步的通信模型,因此分布式協(xié)商是可以在大多數(shù)成員之間達(dá)成的。當(dāng)前實際系統(tǒng)中使用的協(xié)議包括著名的由圖靈獎得主Lamport提出的Paxos協(xié)議、Yahoo研究院提出的ZooKeeper協(xié)議(ZooKeeper Atomic Broadcast協(xié)議,簡稱ZAB協(xié)議)[4]以及Stanford大學(xué)研究人員提出的專用于教學(xué)的Raft協(xié)議[5]。

    上述3個協(xié)議的核心結(jié)構(gòu)都是相同的。

    圖2 分布式協(xié)商中的核心協(xié)商結(jié)構(gòu)

    圖2是分布式協(xié)商協(xié)議中核心的協(xié)商結(jié)構(gòu),上述3個協(xié)商協(xié)議的核心部分都是基于這樣的一個結(jié)構(gòu)來完成的。在這個核心結(jié)構(gòu)中,客戶端(client)將請求發(fā)送給一個領(lǐng)導(dǎo)者(leader)。領(lǐng)導(dǎo)者是唯一的,用以對并發(fā)的客戶端請求進(jìn)行定序,保證輸入到副本狀態(tài)機(jī)中的操作是有序的。唯一的領(lǐng)導(dǎo)者也是上述3個協(xié)議的活躍性的保證,能夠保證最終協(xié)商完成。領(lǐng)導(dǎo)者將客戶端的請求發(fā)送給所有其他副本狀態(tài)機(jī)中的成員,這些成員被稱為追隨者(follower)。這些追隨者都復(fù)制領(lǐng)導(dǎo)者的操作,把發(fā)過來的操作加入本地的日志隊列中。如果大多數(shù)的追隨者都同意領(lǐng)導(dǎo)者發(fā)過來的一條操作(一個值),那么領(lǐng)導(dǎo)者將提交這個值,將其作為分布式協(xié)商的最后結(jié)論。

    在這個核心結(jié)構(gòu)的外圍,需要一些輔助的模塊,包括兩個非常重要的功能,一個是領(lǐng)導(dǎo)者的選擇(leader election);另外一個是如何進(jìn)行配置更新(成員增加或者減少)。這3個協(xié)議在不同的層面上完成了分布式協(xié)商,并推動上層的副本狀態(tài)機(jī)的執(zhí)行。Paxos協(xié)議是純粹的分布式協(xié)商協(xié)議;ZAB協(xié)議考慮了領(lǐng)導(dǎo)者的選擇算法,將其集成到協(xié)議中;Raft協(xié)議則更進(jìn)一步將配置更新的協(xié)議也加入到其中,完善了分布式協(xié)商的外圍工作。需要注意的是,雖然3個協(xié)議共享了類似的協(xié)商核心結(jié)構(gòu),但是具體的協(xié)商過程各不相同。

    Paxos協(xié)議最為簡單,是一個純粹的分布式協(xié)商協(xié)議。Paxos協(xié)議只考慮一次協(xié)商,不考慮多次協(xié)商,這雖然與副本狀態(tài)機(jī)的要求有差距,但是這還是一個非?;镜膯栴},能夠用來協(xié)商副本狀態(tài)某一次具體的操作。Paxos協(xié)議基于投票的思想,一旦某個提議(包含某一個值)被大多數(shù)成員接受,那么這個提議的值就作為協(xié)商的結(jié)果。但是,由于分布式系統(tǒng)的特點,這樣一個協(xié)商完成的結(jié)果不見得被其他成員知道,投票過程可能會繼續(xù)。分布式協(xié)商需要保證的是:如果一個值已經(jīng)被協(xié)商完成,被“固定”在系統(tǒng)中,那么無論如何進(jìn)一步地投票,最終的投票結(jié)果就是已經(jīng)完成協(xié)商的值。核心思想就是在進(jìn)行值的提議的時候,必須要詢問足夠的但盡可能少的成員,將可能已經(jīng)完成協(xié)商的值作為值的提議。Paxos協(xié)議只解決一次協(xié)商問題,但是副本狀態(tài)機(jī)需要多次協(xié)商,那么就需要為每一次協(xié)商執(zhí)行一次Paxos算法。Paxos本身不完成定序的問題,多個Paxos協(xié)議可以并行執(zhí)行,通過標(biāo)記可以相互獨立運行。

    ZAB協(xié)議沒有在單個的分布式協(xié)商基礎(chǔ)上進(jìn)行討論。由于使用了副本狀態(tài)機(jī),ZAB協(xié)議考慮多個協(xié)商共同進(jìn)行的情況。ZAB協(xié)議包含了一個領(lǐng)導(dǎo)者選舉的算法。領(lǐng)導(dǎo)者選舉過程中,所有成員都互相交換信息,看看當(dāng)前自己的內(nèi)部狀態(tài)是不是能夠跟上最新的副本狀態(tài)機(jī)的狀態(tài)。包含最新信息的成員自動成為領(lǐng)導(dǎo)者。新領(lǐng)導(dǎo)者被選出之后,為了保證所有操作的有序性,新領(lǐng)導(dǎo)者需要將前面一個領(lǐng)導(dǎo)者(已經(jīng)失效)遺留的操作都提交一遍。這個過程就是錯誤恢復(fù)的過程,能夠保證所有操作的有序性。之后,整個協(xié)議將進(jìn)入上述分布式協(xié)商的基本結(jié)構(gòu)中,快速將操作同步到所有的跟隨節(jié)點。

    Raft協(xié)議與ZAB協(xié)議非常相像,都是盡量讓新的領(lǐng)導(dǎo)者幫助完成上一個領(lǐng)導(dǎo)者尚未完成的工作。并且,Raft協(xié)議是一個更加完整的協(xié)議,因為其加入了配置更新的協(xié)議。Raft協(xié)議的第一個部分是關(guān)于領(lǐng)導(dǎo)者選舉的,在一個隨機(jī)的超時時間范圍內(nèi)進(jìn)行投票,獲得足夠多投票的成員自動成為領(lǐng)導(dǎo)者。之后,協(xié)議進(jìn)入上述的分布式協(xié)商的基本結(jié)構(gòu)中。領(lǐng)導(dǎo)者會復(fù)制自己的整個狀態(tài)給所有的跟隨者,并且在大部分的跟隨節(jié)點完成復(fù)制之后提交對應(yīng)的日志。這是將上述的分布式協(xié)商基本結(jié)構(gòu)與狀態(tài)恢復(fù)的過程結(jié)合在一起,在新的領(lǐng)導(dǎo)者完成提交的同時,“順便”將前一個領(lǐng)導(dǎo)者的協(xié)商值的提議一起提交。Raft協(xié)議的完整性體現(xiàn)在對于配置更新方面的支持。通過兩個階段轉(zhuǎn)換的方式,Raft協(xié)議可以正確完成配置更新,并不影響正常分布式協(xié)商的正確性。為了能夠維護(hù)整個系統(tǒng)的長期穩(wěn)定運行,配置更新協(xié)議也是必不可少的。

    3個協(xié)議的最大的區(qū)別在于對領(lǐng)導(dǎo)者進(jìn)行轉(zhuǎn)換時處理,即從一個舊的領(lǐng)導(dǎo)者換成新的領(lǐng)導(dǎo)者時需要做什么樣的工作。在Paxos協(xié)議中,新的領(lǐng)導(dǎo)者將觀察自己保存的狀態(tài),嚴(yán)格按照協(xié)議執(zhí)行,不破壞已經(jīng)決定的值。這個過程不涉及多個執(zhí)行中的Paxos協(xié)議,因此領(lǐng)導(dǎo)者在進(jìn)行轉(zhuǎn)換的時候,沒有其他信息幫助提交多個值,只能盡可能去保護(hù)現(xiàn)有的可能已經(jīng)選定的值。ZAB協(xié)議和Raft協(xié)議不是一個單純的一次性的分布式協(xié)商協(xié)議,這兩個協(xié)議是與副本狀態(tài)機(jī)緊密結(jié)合在一起的。在這兩個協(xié)議中,如果發(fā)生了領(lǐng)導(dǎo)者的轉(zhuǎn)換,那么就必須考慮如何處理上一個領(lǐng)導(dǎo)者遺留的尚未提交的協(xié)商值。因此,這兩個協(xié)議都對新的領(lǐng)導(dǎo)者的選擇作出了限制,即新的領(lǐng)導(dǎo)者必須知道一些必要的關(guān)于當(dāng)前系統(tǒng)狀態(tài)的信息。在ZAB協(xié)議中,新的領(lǐng)導(dǎo)者選舉出來之后,需要確定在獲得的支持成員中有最新的一個請求作為出發(fā)點,之后將自己的請求接到最新請求的后面,作為下一個請求。ZAB協(xié)議保證必須讓新的領(lǐng)導(dǎo)者幫助提交上一個領(lǐng)導(dǎo)者工作時產(chǎn)生的請求,只有全部提交完成之后,新的領(lǐng)導(dǎo)者才能工作,領(lǐng)導(dǎo)者才真正成為領(lǐng)導(dǎo)者。在Raft協(xié)議中,也對新的領(lǐng)導(dǎo)者選擇做出了限制,為了保證正確性,需要保證在選出新的領(lǐng)導(dǎo)者的時候,必須要從之前的已經(jīng)完成提交的最后一條請求對應(yīng)的成員節(jié)點中去選擇,而不是去任意選擇一個成員節(jié)點。這樣的限制使得在投票選出新的領(lǐng)導(dǎo)者時,每一個成員都需要看一下領(lǐng)導(dǎo)者的候選節(jié)點具有的信息是否比自己的信息要更新一點,如果是的話則同意候選節(jié)點,否則將拒絕候選節(jié)點。通過這種方式,新當(dāng)選的領(lǐng)導(dǎo)者不必進(jìn)行幫助前一個領(lǐng)導(dǎo)者提交提議的過程,而是可以直接進(jìn)入自己提議的過程,并且在這個基礎(chǔ)上“順便”幫助前一個領(lǐng)導(dǎo)者提交遺留在系統(tǒng)中的提議。這也是Raft協(xié)議和ZAB協(xié)議最大的不同。

    上述的3個協(xié)議是當(dāng)前在實際系統(tǒng)中使用最為廣泛的分布式協(xié)商協(xié)議,3個協(xié)議各有特點,可以使用在不同的場景下。3個協(xié)議要完成的目標(biāo)是相同的,都是如何可靠地推動副本狀態(tài)機(jī)的執(zhí)行。3個協(xié)議提出的背景各不相同,ZAB協(xié)議和Raft協(xié)議改進(jìn)了Paxos協(xié)議中的難于理解的困難,特別是Raft協(xié)議一開始就是為了教學(xué)所提出的。Raft協(xié)議已經(jīng)非常完善地描述了副本狀態(tài)機(jī)需要解決的問題以及相關(guān)的解決方案,值得初學(xué)者首先選擇進(jìn)行閱讀理解。

    4 分布式協(xié)商協(xié)議的應(yīng)用場景

    第3節(jié)分析了分布式協(xié)商的含義以及在實際系統(tǒng)中的使用的分布式協(xié)商協(xié)議的情況。由于協(xié)議本身的復(fù)雜性,這部分內(nèi)容需要感興趣的讀者花費較長的時間進(jìn)行理解。但是,在實際系統(tǒng)中,遇到的問題更多的是如何使用分布式協(xié)商。分布式協(xié)商在實際的系統(tǒng)中具有廣泛的應(yīng)用,對建立可靠的分布式系統(tǒng)起到?jīng)Q定性的作用。下面就以分布式協(xié)商系統(tǒng)在BigTable[6]系統(tǒng)中的作用來闡述分布式協(xié)商系統(tǒng)如何應(yīng)用于大規(guī)模的大數(shù)據(jù)系統(tǒng)中來保證系統(tǒng)的可靠性。

    將BigTable系統(tǒng)視作一個分布式數(shù)據(jù)庫,并且這個數(shù)據(jù)庫是經(jīng)過排序的,即按照數(shù)據(jù)記錄的主鍵進(jìn)行排序。圖3是BigTable系統(tǒng)進(jìn)行數(shù)據(jù)查找的流程。

    從圖3可以看出,在分布式環(huán)境下,BigTable的數(shù)據(jù)表被組織成類似于分布式環(huán)境下的“B+樹”的形式。根的數(shù)據(jù)表和第一級的元數(shù)據(jù)表用來進(jìn)行路由工作,之后再依據(jù)獲得的用戶數(shù)據(jù)表的位置來真正讀寫用戶的數(shù)據(jù)表。由于表格中的數(shù)據(jù)太大了,在BigTable中使用了按照行進(jìn)行分割的方式,被稱為數(shù)據(jù)分表。任何一個客戶端,如果需要訪問BigTable中的數(shù)據(jù)分表,首先需要經(jīng)過元數(shù)據(jù)表的路由才可以訪問到具體的數(shù)據(jù)分表。整個路由表的根的指針放置在名為Chubby[7]的系統(tǒng)中,這是進(jìn)行路由啟動部分的數(shù)據(jù)。Chubby基于副本狀態(tài)機(jī)以及Paxos協(xié)議[8]建立了一個穩(wěn)固的分布式協(xié)同系統(tǒng),為其上的應(yīng)用程序提供基礎(chǔ)服務(wù)。

    在維護(hù)系統(tǒng)可靠性方面,兩個特別典型的問題需要解決,一個問題是如何得知整個系統(tǒng)中當(dāng)前能夠正常執(zhí)行的節(jié)點的數(shù)目;另外一個問題是如何協(xié)調(diào)正常執(zhí)行的節(jié)點之間的數(shù)據(jù)訪問。

    (1)維護(hù)系統(tǒng)正常工作節(jié)點的狀態(tài)信息

    關(guān)于節(jié)點是否正常工作的信息是進(jìn)行容錯的一個基礎(chǔ)性問題,只有得知系統(tǒng)中的哪些節(jié)點在正常工作,哪些節(jié)點已經(jīng)出現(xiàn)了錯誤,才可能進(jìn)行后續(xù)的修復(fù)工作。實際上在分布式系統(tǒng)中是非常有必要進(jìn)行這樣的狀態(tài)維護(hù)的,這樣不僅可以協(xié)調(diào)系統(tǒng)的容錯恢復(fù)功能,也可以給管理員提供建議信息,為自動以及手動維護(hù)提供依據(jù)。這件事情雖然看起來非常簡單,但是如果系統(tǒng)的規(guī)模達(dá)到了數(shù)千臺機(jī)器,那么進(jìn)行節(jié)點狀態(tài)維護(hù)就變得極為復(fù)雜,用人工的辦法根本沒有辦法實現(xiàn)。

    圖3 BigTable系統(tǒng)中的數(shù)據(jù)查表的流程

    維護(hù)節(jié)點正常工作一般的做法是通過節(jié)點之間的心跳。但是,節(jié)點之間的心跳會出現(xiàn)信息不準(zhǔn)確的問題,即雙方都不能探測到對方的存在,但是仍然不能確信對方確實下線,這有信息不一致的問題。這里一個最典型的情況就是引言中討論的雙機(jī)熱備份的問題。在雙機(jī)熱備份問題中,一臺機(jī)器為主要的副本,另外一臺機(jī)器是備份的副本。在這里,關(guān)鍵的問題是主要副本與備份副本之間的網(wǎng)絡(luò)情況會造成雙方都無法確信對方是否真的不在線。

    使用分布式協(xié)商就不會出現(xiàn)上面的不一致的問題。分布式協(xié)商就像一個委員會,對于某一個節(jié)點是否在線的問題可以由委員會的大多數(shù)成員來決定。這樣就可以判斷雙機(jī)熱備份的情況下,哪一臺是主要副本,哪一臺是備份副本。類似地,在BigTable系統(tǒng)中,集群中的成員是否正常工作的信息都保存在一個名為Chubby的系統(tǒng)中。每一個Chubby實例包含了5個成員,這5個成員分布在不同的地理位置,這就保證了在絕大多數(shù)的情況下大多數(shù)成員可以正常工作。在這5個成員之間組成了文件系統(tǒng)的副本狀態(tài)機(jī),每一個集群中的服務(wù)器的信息都保存在這個文件系統(tǒng)中的某一個文件中。服務(wù)器如果在線的話,會按固定的時間間隔更新對應(yīng)的描述自身文件的信息。其他的服務(wù)器包括Chubby中的成員可以檢測對應(yīng)文件的有效性,如果無效的話,可以認(rèn)為對應(yīng)的服務(wù)器已經(jīng)下線。當(dāng)然,即使Chubby中的信息指示的對應(yīng)的服務(wù)器已經(jīng)下線了,這并不代表著對應(yīng)服務(wù)器確實出現(xiàn)了錯誤。為了保證正確性,BigTable中某一個數(shù)據(jù)分表最多由一個服務(wù)器負(fù)責(zé),否則就會出現(xiàn)數(shù)據(jù)的不一致。只有Chubby能夠通過一致性協(xié)商的方式確定某個服務(wù)器是否下線,即使此時對應(yīng)的服務(wù)器還在正常工作,由于其在一定的時間內(nèi)不能成功更新在Chubby中關(guān)于自身的信息,這臺服務(wù)器依據(jù)協(xié)議的規(guī)定,應(yīng)當(dāng)自動解除自己對數(shù)據(jù)分表的負(fù)責(zé)工作,等待整個系統(tǒng)安排重新上線。這樣,可以保證在任何一個時間點,對于任何一個數(shù)據(jù)分表來說,最多只有一臺服務(wù)器負(fù)責(zé),避免數(shù)據(jù)出現(xiàn)不一致的情況。

    (2)協(xié)調(diào)成員節(jié)點之間的數(shù)據(jù)訪問

    另一個問題是協(xié)調(diào)正常執(zhí)行節(jié)點之間的數(shù)據(jù)訪問。在單機(jī)多線程環(huán)境中,有共享數(shù)據(jù)訪問的問題。共享數(shù)據(jù)訪問是內(nèi)存中設(shè)置了共享變量,有兩個以及兩個以上的線程訪問(讀/寫)這些共享變量,其中至少有一個訪問是寫入數(shù)據(jù)。這樣的情況會產(chǎn)生數(shù)據(jù)訪問沖突。

    在多線程環(huán)境中,解決數(shù)據(jù)訪問沖突一般使用保護(hù)鎖的方法。任何一個線程在訪問共享數(shù)據(jù)之前,首先要獲得一個鎖,之后再訪問數(shù)據(jù),最后釋放鎖?;コ怄i的語義使得任何一個時刻只有一個線程可以訪問共享的數(shù)據(jù),其他的線程只能等待。同樣的機(jī)制可以擴(kuò)展到分布式環(huán)境中。在分布式環(huán)境中,一般建立鎖的機(jī)制是使用鎖服務(wù)器?;コ怄i在進(jìn)行訪問協(xié)調(diào)的時候起到了非常重要的作用,如果互斥鎖發(fā)生了失敗,會造成整個分布式系統(tǒng)無法工作。

    在分布式環(huán)境中,需要建立非常穩(wěn)固的鎖機(jī)制,將可能產(chǎn)生的鎖失效的概率降到最低。副本狀態(tài)機(jī)此時起到非常重要的作用。在Chubby中,互斥鎖被建立到副本狀態(tài)機(jī)中,表現(xiàn)形式為文件系統(tǒng)命名空間中的在文件以及目錄這樣的有名對象上所實現(xiàn)的鎖。在分布式環(huán)境中需要對共享資源進(jìn)行訪問的時候,首先要訪問鎖服務(wù)器,只有在成功獲得鎖的情況下,才可能訪問對應(yīng)的共享資源。但是在分布式環(huán)境中的鎖服務(wù)機(jī)制與傳統(tǒng)的單機(jī)環(huán)境的鎖服務(wù)機(jī)制不同。在單機(jī)環(huán)境中,不需要考慮出錯的情況,因為一旦出錯,那就是整個節(jié)點的錯誤,不僅僅是鎖的問題。因此,單機(jī)中沒有獲得鎖的線程原則上只能進(jìn)行無限的等待。但是,在分布式環(huán)境中這樣做是不允許的,因為數(shù)據(jù)分組會在網(wǎng)絡(luò)中進(jìn)行時延,也可能進(jìn)行分組丟棄。訪問鎖的情況可能會被延遲,獲得鎖的服務(wù)器可能會失效。如果獲得互斥鎖的服務(wù)器發(fā)生了失敗,那么對應(yīng)的鎖將永遠(yuǎn)不能釋放,這就造成了很大的問題。因此,在分布式環(huán)境中,對于鎖的訪問必須要加上超時機(jī)制?;镜姆绞绞窃讷@得鎖之后,默認(rèn)情況下只能擁有這個互斥鎖一段時間,超過了這段時間鎖將自動被鎖服務(wù)器釋放,便于其他的服務(wù)器進(jìn)行下一步的工作。如果一個服務(wù)器獲得了鎖,并且希望將來繼續(xù)使用這個鎖,那么這個服務(wù)器必須要進(jìn)行續(xù)租的操作,延長獲得鎖的時間。

    將上述的原理應(yīng)用在實際工作的系統(tǒng)中,還需要考慮網(wǎng)絡(luò)時延以及時間測量的誤差,確保在訪問共享資源時,最多只有一個節(jié)點進(jìn)行訪問,其他節(jié)點都被排除在外,這樣才算是正確的互斥鎖的語義。如果時延的數(shù)據(jù)分組沒有到達(dá),或者沒有獲得響應(yīng),對應(yīng)的服務(wù)器只能認(rèn)為延長請求失效,退出對于對應(yīng)共享資源的控制,避免對數(shù)據(jù)造成不一致的操作。這樣鎖的協(xié)議會比較復(fù)雜,也是分布式與單機(jī)環(huán)境的區(qū)別。BigTable中有許多對共享資源的訪問,其中就有對于底層的分布式文件系統(tǒng)的文件的訪問。另外,也有對于數(shù)據(jù)分表的再拆分以及數(shù)據(jù)分表的合并的過程,也有對于共享日志的分配以及恢復(fù)操作等。可以說,任何一個分布式系統(tǒng),對于共享資源的訪問是無可避免的操作,因此分布式的互斥鎖的機(jī)制是無可避免的分布式的系統(tǒng)功能。建立一個穩(wěn)固的分布式鎖的環(huán)境是建立高可靠的分布式系統(tǒng)的關(guān)鍵組成部分。

    通過BigTable的具體機(jī)制可以看到,通過分布式協(xié)商以及副本狀態(tài)機(jī),Chubby建立了一個非常穩(wěn)固的、由副本狀態(tài)機(jī)推動的復(fù)制的文件系統(tǒng)。雖然文件系統(tǒng)的語義非?;A(chǔ),不能夠提供高層的語義信息,但是Chubby提供了最基本的存儲模型。在這個模型的基礎(chǔ)之上,Chubby完成了整個系統(tǒng)的完整的活躍信息描述,協(xié)調(diào)了BigTable對于共享數(shù)據(jù)分表資源的訪問。實際上,Chubby成為了Google(谷歌)內(nèi)部的分布式大數(shù)據(jù)系統(tǒng)的基礎(chǔ),為難于實現(xiàn)的可靠性問題提供了基石。在這個基礎(chǔ)之上,建立上層應(yīng)用系統(tǒng)的可靠性難度將大大降低。

    5 結(jié)束語

    本文對現(xiàn)有的保證可靠性的副本狀態(tài)機(jī)進(jìn)行了詳細(xì)的討論,包括副本狀態(tài)機(jī)需要滿足的條件、基本的執(zhí)行流程以及副本狀態(tài)機(jī)在實現(xiàn)可靠分布式系統(tǒng)中的作用。副本狀態(tài)機(jī)需要滿足的條件為初始狀態(tài)相同、狀態(tài)轉(zhuǎn)換函數(shù)必須是確定性的以及轉(zhuǎn)換操作與過程必須使用分布式協(xié)商算法。在此基礎(chǔ)上,詳細(xì)分析了現(xiàn)有的分布式協(xié)商算法的協(xié)議,包括Paxos協(xié)議、ZAB協(xié)議以及Raft協(xié)議。這些協(xié)議各有特點,并有不同的分布式系統(tǒng)的實現(xiàn)。Paxos協(xié)議是單次的分布式協(xié)商,雖然簡單,但是需要配合許多其他的組件才能夠真正構(gòu)成副本狀態(tài)機(jī)的工作機(jī)制。ZAB協(xié)議和Raft協(xié)議是完整的分布式副本狀態(tài)機(jī)的協(xié)議,能夠直接推動副本狀態(tài)機(jī)的執(zhí)行,其中Raft協(xié)議還繼續(xù)提供了配置更新的協(xié)議,完善了在實際系統(tǒng)中的各個細(xì)節(jié)。在分析完成常用的分布式協(xié)商協(xié)議的基礎(chǔ)之上,還分析了如何通過副本狀態(tài)機(jī)構(gòu)造可靠的分布式系統(tǒng)。需要提供的主要模塊是完成整個系統(tǒng)的節(jié)點狀態(tài)的監(jiān)測與維護(hù)以及協(xié)調(diào)正常工作節(jié)點之間的工作。可以看到,分布式協(xié)商技術(shù)能夠提供可靠性的基本模塊,是建立可靠性系統(tǒng)的基礎(chǔ)。通過本文的分析,讀者可以對分布式協(xié)商有一個基本概念,為建立可靠的分布式系統(tǒng)提供基礎(chǔ)的模型。

    [1] GHEMAWAT S, GOBIOFF H, LEUNG S T. The Google file system[J]. ACM SIGOPS Operating Systems Review, 2003, 37(5): 29-43.

    [2] LAMPORT L. Paxos made simple[J]. ACM SIGACT News, 2001, 32(4): 51-58.

    [3] LAMPORT L, PEASE M, SHOSTAK R. The byzantine generals problem[J]. ACM Transactions on Programming Languages and Systems, 1982, 4(3): 382-401.

    [4] HUNT P, KONAR M, JUNQUEIRA F P, et al. ZooKeeper: wait-free coordination for internet-scale systems [C]// The 2010 USENIX Annual Technical Conference, June 22-25, 2010, Boston, MA, USA. [S.l.:s.n.], 2010: 1-14.

    [5] ONGARO D, OUSTERHOUT J. In search of an understandable consensus algorithm[C]// The 2014 USENIX Annual Technical Conference, June 19-20, 2014, Philadelphia, PA, USA. [S.l.:s.n.], 2014: 305-319.

    [6] CHANG F, DEAN J, GHEMAWAT S, et al. Bigtable: a distributed storage system for structured data[J]. ACM Transactions on Computer Systems, 2008, 26(2): 205-218.

    [7] BURROWS M. The Chubby lock service for loosely-coupled distributed systems[C]// The 7th Symposium on Operating Systems Design and Implementation, November 6-8, 2006, Seattle, WA, USA. New York: ACM SIGOPS, 2006: 335-350.

    [8] CHANDRA T D, GRIESEMER R,REDSTONE J. Paxos made live: an engineering perspective[C]//The 26th Annual ACM Symposium on Principles of Distributed Computing, August 12-15, 2007, Portland, Oregon, USA. New York: ACM Press, 2007: 398-407.

    Distributed consensus: fundamental building block for distributed reliable big data system

    CHEN Kang1,2,3, HUANG Jian1, LIU Jiannan4
    1. Tsinghua National Laboratory for Information Science and Technology (TNLIST), Department of Computer Science and Technology, Tsinghua University, Beijing 100084, China 2. Research Institute of Tsinghua University in Shenzhen, Shenzhen 518057, China 3. Technology Innovation Center at Yinzhou, Yangtze Delta Region Institute of Tsinghua University, Zhejiang, Ningbo 315000, China 4. Petro China Co. Ltd. Qingyang Petrochemical Company, Qingyang 745002, China

    The goal of distributed consensus is quite simple i.e. how to decide a value among a group of coordinated processes in the distributed environment. However, the problem is turned out to be very difficult while facing the different distributed environment. The even harder problem is that some consensus protocols are hard to be implemented in practical systems. Some results of distributed consensus algorithms under different distributed environment assumptions were reviewed. In addition, some practical systems based on consensus for achieving high reliability were discussed.

    distributed consensus, replicated state machine, network error, safety, liveness

    TP338.8

    A

    10.11959/j.issn.2096-0271.2016039

    陳康(1976-),男,博士,清華大學(xué)計算機(jī)科學(xué)與技術(shù)系、深圳清華大學(xué)研究院、浙江清華長三角研究院鄞州創(chuàng)新中心副教授,主要研究方向為分布式系統(tǒng)、存儲系統(tǒng)。

    黃劍(1993-),男,清華大學(xué)計算機(jī)科學(xué)與技術(shù)系碩士生,主要研究方向為文件存儲器和分布式系統(tǒng)。

    劉建楠(1963-),男,就職于中國石油天然氣股份有限公司慶陽石化分公司,主要從事企業(yè)經(jīng)營和信息化管理工作。

    2015-06-20

    國家自然科學(xué)基金資助項目(No.61433008, No.U1435216, No.61373145, No.61170210);國家高技術(shù)研究發(fā)展計劃(“863”計劃)基金資助項目(No.2014AA01A302)

    Foundation Items:The National Natural Science Foundation of China (No. 61433008, No. U1435216, No.61373145, No.61170210), The National High Technology Research and Development Program of China (863 Program) (No.2014AA01A302)

    猜你喜歡
    狀態(tài)機(jī)副本領(lǐng)導(dǎo)者
    基于有限狀態(tài)機(jī)的交會對接飛行任務(wù)規(guī)劃方法
    面向流媒體基于蟻群的副本選擇算法①
    閉目塞聽,才是領(lǐng)導(dǎo)者的第一大忌
    真誠是領(lǐng)導(dǎo)者的最高境界
    副本放置中的更新策略及算法*
    樹形網(wǎng)絡(luò)中的副本更新策略及算法*
    金圣節(jié)能清凈劑 節(jié)能減排領(lǐng)導(dǎo)者
    汽車零部件(2014年1期)2014-09-21 11:58:39
    FPGA設(shè)計中狀態(tài)機(jī)安全性研究
    基于反熔絲FPGA的有限狀態(tài)機(jī)加固設(shè)計
    基于VHDL的一個簡單Mealy狀態(tài)機(jī)
    亚洲欧美日韩高清在线视频| 成人毛片60女人毛片免费| 日本五十路高清| 色综合亚洲欧美另类图片| 一边亲一边摸免费视频| 亚洲国产色片| 波多野结衣巨乳人妻| 国产精品乱码一区二三区的特点| 日本与韩国留学比较| 日日撸夜夜添| 国模一区二区三区四区视频| 丝袜喷水一区| 亚洲一区二区三区色噜噜| 日日撸夜夜添| 18禁裸乳无遮挡免费网站照片| 亚洲精品456在线播放app| 欧美潮喷喷水| 亚洲av中文av极速乱| 99在线人妻在线中文字幕| 插阴视频在线观看视频| 成人美女网站在线观看视频| 人妻夜夜爽99麻豆av| 色吧在线观看| 久久久久网色| 亚洲av中文字字幕乱码综合| 日韩欧美 国产精品| 亚洲精品色激情综合| 一本久久中文字幕| 国产大屁股一区二区在线视频| 午夜福利高清视频| 亚洲精品国产成人久久av| 国产人妻一区二区三区在| av黄色大香蕉| 精品一区二区三区人妻视频| 亚洲国产欧美人成| 国产亚洲欧美98| kizo精华| av免费观看日本| 国产黄色小视频在线观看| 日本黄色片子视频| 黄色一级大片看看| 亚洲av.av天堂| 欧美一区二区精品小视频在线| 久久精品国产清高在天天线| 亚洲欧美日韩高清专用| 国产色婷婷99| 波多野结衣高清无吗| 国产精品日韩av在线免费观看| 国产真实乱freesex| 国内精品久久久久精免费| 欧美三级亚洲精品| 精品午夜福利在线看| 给我免费播放毛片高清在线观看| 免费人成在线观看视频色| 身体一侧抽搐| 国产一区二区三区在线臀色熟女| 啦啦啦啦在线视频资源| 91狼人影院| 亚洲真实伦在线观看| av在线天堂中文字幕| 99热这里只有是精品在线观看| 日韩欧美在线乱码| 日本色播在线视频| 精品免费久久久久久久清纯| 精品久久久久久久久久久久久| 人人妻人人澡人人爽人人夜夜 | 天堂影院成人在线观看| av在线蜜桃| 亚洲内射少妇av| 1024手机看黄色片| 日韩在线高清观看一区二区三区| www日本黄色视频网| 91在线精品国自产拍蜜月| 精品日产1卡2卡| 不卡视频在线观看欧美| 国内揄拍国产精品人妻在线| 午夜精品在线福利| 日韩视频在线欧美| 亚洲乱码一区二区免费版| 久久久精品94久久精品| 乱系列少妇在线播放| 国产 一区 欧美 日韩| 三级经典国产精品| 亚洲精品色激情综合| 久久久国产成人免费| 国产欧美日韩精品一区二区| 91aial.com中文字幕在线观看| 天美传媒精品一区二区| 一本精品99久久精品77| 寂寞人妻少妇视频99o| АⅤ资源中文在线天堂| 日本黄色片子视频| 99视频精品全部免费 在线| 国产私拍福利视频在线观看| 亚洲人与动物交配视频| 欧美激情久久久久久爽电影| 深夜精品福利| 三级毛片av免费| 中国美白少妇内射xxxbb| 中文欧美无线码| 欧美激情在线99| 亚洲久久久久久中文字幕| .国产精品久久| 国产精品免费一区二区三区在线| 久久精品夜色国产| 国产毛片a区久久久久| 亚洲美女视频黄频| 在线免费十八禁| 赤兔流量卡办理| 亚洲乱码一区二区免费版| 岛国在线免费视频观看| 亚洲av成人精品一区久久| 亚洲国产精品合色在线| 菩萨蛮人人尽说江南好唐韦庄 | 乱系列少妇在线播放| 亚洲精华国产精华液的使用体验 | 国内久久婷婷六月综合欲色啪| 日本黄色视频三级网站网址| 噜噜噜噜噜久久久久久91| 免费看av在线观看网站| 夫妻性生交免费视频一级片| 国国产精品蜜臀av免费| 美女高潮的动态| 老熟妇乱子伦视频在线观看| 成年女人永久免费观看视频| 99久久久亚洲精品蜜臀av| 男女边吃奶边做爰视频| 桃色一区二区三区在线观看| 亚洲人成网站在线播放欧美日韩| 日韩欧美三级三区| 久久午夜福利片| 成人亚洲精品av一区二区| 哪里可以看免费的av片| 中文精品一卡2卡3卡4更新| 色哟哟·www| 五月玫瑰六月丁香| 国产精品一区二区三区四区久久| 国产国拍精品亚洲av在线观看| 两个人视频免费观看高清| 可以在线观看的亚洲视频| 国产综合懂色| 国产毛片a区久久久久| 久久99精品国语久久久| 久久久久久国产a免费观看| 1024手机看黄色片| 亚洲图色成人| 欧美人与善性xxx| 国内少妇人妻偷人精品xxx网站| 国产精品免费一区二区三区在线| 91在线精品国自产拍蜜月| 久久久久性生活片| 男女那种视频在线观看| 色综合色国产| 亚洲国产色片| 久久精品国产99精品国产亚洲性色| 国产又黄又爽又无遮挡在线| 国产日韩欧美在线精品| 亚洲自拍偷在线| 亚洲婷婷狠狠爱综合网| 国产精品麻豆人妻色哟哟久久 | 午夜久久久久精精品| ponron亚洲| 观看美女的网站| 国内久久婷婷六月综合欲色啪| 人妻夜夜爽99麻豆av| 我要搜黄色片| 午夜精品一区二区三区免费看| 亚洲av中文av极速乱| 亚洲av熟女| 日本一本二区三区精品| 国产 一区精品| 欧美xxxx黑人xx丫x性爽| 成人一区二区视频在线观看| 色噜噜av男人的天堂激情| 男人和女人高潮做爰伦理| 日日摸夜夜添夜夜添av毛片| 99热只有精品国产| 极品教师在线视频| 久久热精品热| 亚洲aⅴ乱码一区二区在线播放| 99热这里只有是精品50| 国产真实伦视频高清在线观看| 日韩高清综合在线| kizo精华| 免费不卡的大黄色大毛片视频在线观看 | 日韩国内少妇激情av| 丰满的人妻完整版| 人妻系列 视频| 国产白丝娇喘喷水9色精品| 中文精品一卡2卡3卡4更新| 性欧美人与动物交配| 欧美区成人在线视频| 九九热线精品视视频播放| 午夜福利成人在线免费观看| 国产极品天堂在线| 午夜精品在线福利| 国语自产精品视频在线第100页| 精品久久国产蜜桃| 国产亚洲av片在线观看秒播厂 | 国产伦理片在线播放av一区 | 女的被弄到高潮叫床怎么办| 成人特级黄色片久久久久久久| 青春草亚洲视频在线观看| 日本三级黄在线观看| 久久热精品热| 99久久精品国产国产毛片| 日韩成人伦理影院| 长腿黑丝高跟| 尤物成人国产欧美一区二区三区| 国产一区二区三区av在线 | 国产极品天堂在线| 国产淫片久久久久久久久| 亚洲欧美日韩东京热| 哪里可以看免费的av片| 老师上课跳d突然被开到最大视频| 午夜福利在线在线| 在现免费观看毛片| 亚洲欧美成人精品一区二区| 午夜福利在线在线| 国产一区二区亚洲精品在线观看| 成年av动漫网址| 国产又黄又爽又无遮挡在线| 在线a可以看的网站| 久久久久久伊人网av| 最后的刺客免费高清国语| 国产高清三级在线| 精品一区二区三区人妻视频| 色综合站精品国产| 日韩 亚洲 欧美在线| 欧美最黄视频在线播放免费| 欧美最新免费一区二区三区| 国产不卡一卡二| 天天躁日日操中文字幕| 欧美色欧美亚洲另类二区| 午夜视频国产福利| 波多野结衣高清无吗| 青青草视频在线视频观看| 简卡轻食公司| 赤兔流量卡办理| 日产精品乱码卡一卡2卡三| 乱人视频在线观看| 国产单亲对白刺激| 国产精品乱码一区二三区的特点| 搡女人真爽免费视频火全软件| 中国美女看黄片| 午夜久久久久精精品| 天堂中文最新版在线下载 | 亚洲综合色惰| 禁无遮挡网站| 联通29元200g的流量卡| 亚洲av.av天堂| 美女高潮的动态| 亚洲一区二区三区色噜噜| 亚洲aⅴ乱码一区二区在线播放| 国产午夜精品一二区理论片| 日韩制服骚丝袜av| 午夜福利成人在线免费观看| 成人三级黄色视频| 麻豆国产av国片精品| 国产精品1区2区在线观看.| 最近视频中文字幕2019在线8| 夜夜夜夜夜久久久久| 国产精品一区二区性色av| 国产精品久久久久久av不卡| 中文资源天堂在线| 一级毛片电影观看 | 中文字幕av在线有码专区| 国产精品免费一区二区三区在线| 亚洲国产精品国产精品| 日韩精品有码人妻一区| 女的被弄到高潮叫床怎么办| 国产精品无大码| 人妻少妇偷人精品九色| 熟女电影av网| 成人漫画全彩无遮挡| 国产av一区在线观看免费| 人妻制服诱惑在线中文字幕| 欧美高清性xxxxhd video| 亚洲最大成人中文| 蜜臀久久99精品久久宅男| av视频在线观看入口| av在线老鸭窝| 91久久精品电影网| 日本免费a在线| 可以在线观看的亚洲视频| 久久草成人影院| 黄色配什么色好看| 久久99精品国语久久久| 搡老妇女老女人老熟妇| 激情 狠狠 欧美| 99热全是精品| 日本熟妇午夜| 国产高清激情床上av| 亚洲精品国产av成人精品| 大又大粗又爽又黄少妇毛片口| 亚洲av中文av极速乱| 日日摸夜夜添夜夜爱| 十八禁国产超污无遮挡网站| 波多野结衣高清无吗| 欧美激情在线99| 午夜精品一区二区三区免费看| 日本与韩国留学比较| 亚洲高清免费不卡视频| 亚洲欧美精品综合久久99| 全区人妻精品视频| 免费av毛片视频| 可以在线观看的亚洲视频| 国产成人freesex在线| 国产男人的电影天堂91| 精品久久久久久久末码| 日韩欧美在线乱码| 国产一区二区三区在线臀色熟女| 在线国产一区二区在线| 国产一区二区激情短视频| 国产高清三级在线| 亚洲av.av天堂| 欧美极品一区二区三区四区| avwww免费| 国产v大片淫在线免费观看| 99国产极品粉嫩在线观看| 久99久视频精品免费| 寂寞人妻少妇视频99o| 99riav亚洲国产免费| 三级经典国产精品| 18禁在线无遮挡免费观看视频| 伊人久久精品亚洲午夜| av视频在线观看入口| 久久久久久久久久成人| 综合色丁香网| 少妇熟女aⅴ在线视频| 91久久精品国产一区二区三区| 日韩视频在线欧美| 九色成人免费人妻av| 国产单亲对白刺激| 亚洲自拍偷在线| 色视频www国产| 亚洲av中文av极速乱| 熟女人妻精品中文字幕| 此物有八面人人有两片| 久久久久性生活片| 中文欧美无线码| 国产精品一二三区在线看| 国产亚洲精品久久久久久毛片| 亚洲av第一区精品v没综合| 成人欧美大片| 午夜福利高清视频| 亚洲成av人片在线播放无| 久久精品国产亚洲av香蕉五月| 卡戴珊不雅视频在线播放| 国内久久婷婷六月综合欲色啪| 国产 一区精品| 国产黄色视频一区二区在线观看 | 国产精品.久久久| 色综合站精品国产| 欧美另类亚洲清纯唯美| 日韩一本色道免费dvd| 午夜激情福利司机影院| 人人妻人人澡人人爽人人夜夜 | 国产在视频线在精品| 久久久午夜欧美精品| 99riav亚洲国产免费| 日日摸夜夜添夜夜添av毛片| 高清日韩中文字幕在线| 美女高潮的动态| 身体一侧抽搐| 毛片一级片免费看久久久久| 成人永久免费在线观看视频| 欧美性猛交黑人性爽| 大又大粗又爽又黄少妇毛片口| 精品一区二区免费观看| 成人鲁丝片一二三区免费| 精品人妻偷拍中文字幕| 国产成人a∨麻豆精品| 中国美白少妇内射xxxbb| 日韩精品有码人妻一区| 六月丁香七月| 丝袜喷水一区| 97人妻精品一区二区三区麻豆| 麻豆国产av国片精品| 免费av不卡在线播放| 日韩成人av中文字幕在线观看| 精品一区二区三区视频在线| 真实男女啪啪啪动态图| 日本色播在线视频| 最近的中文字幕免费完整| 直男gayav资源| ponron亚洲| 欧美成人一区二区免费高清观看| 赤兔流量卡办理| 亚洲av.av天堂| 久久精品国产99精品国产亚洲性色| 成年女人看的毛片在线观看| 校园人妻丝袜中文字幕| 99热精品在线国产| 丰满的人妻完整版| 蜜桃亚洲精品一区二区三区| 边亲边吃奶的免费视频| 国产精品久久久久久av不卡| 免费av观看视频| 国产精品免费一区二区三区在线| 蜜桃亚洲精品一区二区三区| 国产乱人视频| 亚洲婷婷狠狠爱综合网| 亚洲欧美日韩高清在线视频| 日韩人妻高清精品专区| 一区二区三区免费毛片| 91精品一卡2卡3卡4卡| 国产精品免费一区二区三区在线| 麻豆成人午夜福利视频| 99久久精品一区二区三区| 国产高清激情床上av| 国产69精品久久久久777片| 国产精品一区二区性色av| 日本欧美国产在线视频| 男人舔奶头视频| 夜夜夜夜夜久久久久| 免费观看a级毛片全部| 校园春色视频在线观看| 久久中文看片网| 国产色婷婷99| 久久久精品欧美日韩精品| 日韩在线高清观看一区二区三区| 91在线精品国自产拍蜜月| 三级经典国产精品| 亚洲av免费高清在线观看| 欧美一区二区精品小视频在线| 中文字幕精品亚洲无线码一区| 国产一级毛片七仙女欲春2| 日韩亚洲欧美综合| 日日啪夜夜撸| 午夜福利成人在线免费观看| 国产精品免费一区二区三区在线| 久久这里有精品视频免费| a级毛片免费高清观看在线播放| 午夜视频国产福利| 一夜夜www| 波野结衣二区三区在线| 国产老妇伦熟女老妇高清| 国产三级中文精品| 人妻久久中文字幕网| 久久久成人免费电影| 真实男女啪啪啪动态图| 久久久久久大精品| 九草在线视频观看| 国产精华一区二区三区| 男女啪啪激烈高潮av片| 99久国产av精品| 国产精品av视频在线免费观看| av在线老鸭窝| 日韩强制内射视频| 少妇高潮的动态图| 国产亚洲精品久久久com| 亚洲成人久久性| 最近2019中文字幕mv第一页| 少妇人妻一区二区三区视频| 欧美一区二区精品小视频在线| 午夜a级毛片| 91久久精品国产一区二区三区| 中文字幕久久专区| 99久久精品热视频| 精品无人区乱码1区二区| 熟女电影av网| a级毛片a级免费在线| 欧美潮喷喷水| 亚洲美女视频黄频| 女的被弄到高潮叫床怎么办| 日韩av不卡免费在线播放| 国产精品久久久久久精品电影小说 | 国产 一区精品| 麻豆精品久久久久久蜜桃| 中国国产av一级| 一个人观看的视频www高清免费观看| 亚洲,欧美,日韩| 成人漫画全彩无遮挡| 亚洲人成网站在线观看播放| 少妇的逼好多水| 国产日韩欧美在线精品| 美女黄网站色视频| 国产 一区 欧美 日韩| 国产成人91sexporn| 国产精品久久电影中文字幕| 在线观看一区二区三区| 午夜福利成人在线免费观看| 亚洲国产精品sss在线观看| 久久精品久久久久久久性| 亚洲欧美精品自产自拍| 亚洲国产精品成人综合色| 国产免费男女视频| 中国国产av一级| 亚洲在线观看片| 深夜精品福利| 午夜久久久久精精品| 婷婷六月久久综合丁香| 成年av动漫网址| 最新中文字幕久久久久| 中出人妻视频一区二区| 日本五十路高清| 免费在线观看成人毛片| 亚洲精品乱码久久久久久按摩| 亚洲国产精品成人久久小说 | 一本久久精品| 欧美区成人在线视频| 一区二区三区免费毛片| 日本成人三级电影网站| 亚洲七黄色美女视频| 九草在线视频观看| 91久久精品国产一区二区成人| www.av在线官网国产| 欧美激情在线99| 99久久九九国产精品国产免费| 久久久久久久久久久丰满| 国产精品乱码一区二三区的特点| 国产精品爽爽va在线观看网站| 免费av观看视频| 国产成人a∨麻豆精品| 高清午夜精品一区二区三区 | 嫩草影院新地址| 亚洲成a人片在线一区二区| 美女大奶头视频| 精品日产1卡2卡| 久久精品国产亚洲av香蕉五月| 又爽又黄a免费视频| 我的女老师完整版在线观看| 亚洲在线观看片| 少妇的逼好多水| 91狼人影院| 久久6这里有精品| 亚洲色图av天堂| 久久国内精品自在自线图片| 身体一侧抽搐| 嫩草影院入口| 亚洲最大成人中文| 亚洲va在线va天堂va国产| 身体一侧抽搐| 亚洲人与动物交配视频| 亚洲色图av天堂| 春色校园在线视频观看| 岛国毛片在线播放| 成人无遮挡网站| 三级男女做爰猛烈吃奶摸视频| 最后的刺客免费高清国语| 人妻夜夜爽99麻豆av| 人妻少妇偷人精品九色| 亚洲精品乱码久久久久久按摩| 欧美3d第一页| 久久亚洲精品不卡| 国内精品久久久久精免费| 综合色av麻豆| 国产午夜精品论理片| 欧美zozozo另类| 在线天堂最新版资源| 麻豆成人午夜福利视频| 亚洲精品亚洲一区二区| 婷婷色av中文字幕| 国产一区二区在线观看日韩| 嘟嘟电影网在线观看| 亚洲欧洲国产日韩| 色尼玛亚洲综合影院| 色吧在线观看| 成人一区二区视频在线观看| 狂野欧美激情性xxxx在线观看| 欧美日韩国产亚洲二区| 日本av手机在线免费观看| 一个人看的www免费观看视频| 最近手机中文字幕大全| 边亲边吃奶的免费视频| 日韩一区二区三区影片| av免费观看日本| 又爽又黄a免费视频| 国产av不卡久久| 免费av观看视频| 91在线精品国自产拍蜜月| 夫妻性生交免费视频一级片| 国内精品宾馆在线| 国产三级中文精品| 免费看日本二区| 亚洲欧洲国产日韩| 国产精品麻豆人妻色哟哟久久 | 99久久九九国产精品国产免费| 亚洲精品久久国产高清桃花| 99久久久亚洲精品蜜臀av| 成人亚洲精品av一区二区| 丰满乱子伦码专区| 亚洲中文字幕日韩| 国产单亲对白刺激| 有码 亚洲区| 国产老妇女一区| 日本黄色片子视频| 又粗又硬又长又爽又黄的视频 | 午夜亚洲福利在线播放| 亚洲欧美精品自产自拍| 成年av动漫网址| 国产精品精品国产色婷婷| 日本-黄色视频高清免费观看| 成人亚洲精品av一区二区| a级毛片a级免费在线| 夜夜看夜夜爽夜夜摸| 亚洲av不卡在线观看| 麻豆国产97在线/欧美| 一级黄色大片毛片| 日韩一区二区三区影片| 亚洲av成人av| 三级男女做爰猛烈吃奶摸视频| 又爽又黄无遮挡网站| 亚洲欧洲日产国产| 在线天堂最新版资源| 午夜福利成人在线免费观看| 国产成人精品久久久久久| 亚洲久久久久久中文字幕| 我要看日韩黄色一级片| 精品一区二区三区人妻视频| 日本在线视频免费播放| 国产精品女同一区二区软件| ponron亚洲| 国产色爽女视频免费观看|