精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Raft 共識(shí)算法:基礎(chǔ)算法與安全性保障

開發(fā) 前端
Raft 要求服務(wù)器按日志索引順序應(yīng)用條目。結(jié)合狀態(tài)機(jī)安全屬性,這意味著所有服務(wù)器都將以相同的順序?qū)⑼耆嗤娜罩緱l目集應(yīng)用于其狀態(tài)機(jī)。

引言:尋求易理解的共識(shí)算法

共識(shí)算法是構(gòu)建可靠的大規(guī)模分布式軟件系統(tǒng)的關(guān)鍵組件。它們?cè)试S多臺(tái)機(jī)器作為一個(gè)高內(nèi)聚的整體協(xié)同工作,即使部分成員發(fā)生故障也能繼續(xù)提供服務(wù)。在過(guò)去的十年中,Paxos 算法一直是共識(shí)領(lǐng)域討論的核心,大多數(shù)共識(shí)實(shí)現(xiàn)都基于或受其影響。然而,Paxos 因其難以理解而臭名昭著,并且其架構(gòu)需要復(fù)雜的修改才能應(yīng)用于實(shí)際系統(tǒng)。

正是由于 Paxos 的這些挑戰(zhàn),斯坦福大學(xué)的 Diego Ongaro 和 John Ousterhout 開始著手設(shè)計(jì)一種新的共識(shí)算法——Raft。Raft 的首要設(shè)計(jì)目標(biāo)是 可理解性 (understandability):不僅算法要能工作,更重要的是能讓人清楚地理解它為什么能工作。為了實(shí)現(xiàn)這一目標(biāo),Raft 采用了 問(wèn)題分解 (problem decomposition) 和 狀態(tài)空間簡(jiǎn)化 (state space reduction) 等方法。用戶研究也表明,學(xué)生學(xué)習(xí) Raft 比學(xué)習(xí) Paxos 更容易。

Raft 具備幾個(gè)新穎特性:

  • 強(qiáng)領(lǐng)導(dǎo)者 (Strong leader) :Raft 采用比其他共識(shí)算法更強(qiáng)的領(lǐng)導(dǎo)者模型。例如,日志條目只從領(lǐng)導(dǎo)者單向流向其他服務(wù)器,這簡(jiǎn)化了復(fù)制日志的管理。
  • 領(lǐng)導(dǎo)者選舉 (Leader election) :Raft 使用隨機(jī)化定時(shí)器來(lái)選舉領(lǐng)導(dǎo)者。這種方式在任何共識(shí)算法都必需的心跳機(jī)制上僅增加了少量開銷,卻能簡(jiǎn)單快速地解決沖突。
  • 成員變更 (Membership changes) :Raft 采用一種新的聯(lián)合共識(shí) (joint consensus) 方法進(jìn)行集群成員變更,通過(guò)重疊多數(shù) (overlapping majorities) 來(lái)保證安全性。

Raft 被認(rèn)為在教學(xué)和實(shí)現(xiàn)兩方面均優(yōu)于 Paxos,它更簡(jiǎn)單、描述更完整、已有多種開源實(shí)現(xiàn)并被多家公司采用,同時(shí)其安全性和效率也得到了保證。

復(fù)制狀態(tài)機(jī)

共識(shí)算法通常應(yīng)用于 復(fù)制狀態(tài)機(jī) (replicated state machines, RSMs) 的場(chǎng)景。在 RSM 模型中,一組服務(wù)器上的狀態(tài)機(jī)計(jì)算相同狀態(tài)的相同副本,并且即使某些服務(wù)器宕機(jī)也能繼續(xù)運(yùn)行。例如,GFS、HDFS 和 RAMCloud 等系統(tǒng)使用獨(dú)立的復(fù)制狀態(tài)機(jī)來(lái)管理領(lǐng)導(dǎo)者選舉和存儲(chǔ)配置信息。Chubby 和 ZooKeeper 也是復(fù)制狀態(tài)機(jī)的著名例子。

復(fù)制狀態(tài)機(jī)通常通過(guò) 復(fù)制日志 (replicated log) 實(shí)現(xiàn),如圖 1 (論文中的 Figure 1) 所示。每臺(tái)服務(wù)器存儲(chǔ)一個(gè)包含一系列命令的日志,其狀態(tài)機(jī)按順序執(zhí)行這些命令。由于所有日志包含相同順序的相同命令,且狀態(tài)機(jī)是確定性的,因此它們會(huì)計(jì)算出相同的狀態(tài)和輸出序列。

圖片圖片

共識(shí)算法的核心任務(wù)是保持復(fù)制日志的一致性。服務(wù)器上的共識(shí)模塊接收來(lái)自客戶端的命令并將其添加到本地日志,然后與其他服務(wù)器的共識(shí)模塊通信,以確保即使發(fā)生故障,每個(gè)日志最終都包含相同順序的相同請(qǐng)求。一旦命令被正確復(fù)制,每個(gè)服務(wù)器的狀態(tài)機(jī)就按日志順序處理它們,并將輸出返回給客戶端。

一個(gè)實(shí)用的共識(shí)算法通常具備以下特性:

  • 在所有非拜占庭條件下確保 安全性 (Safety),即永不返回錯(cuò)誤結(jié)果。
  • 只要集群中多數(shù)服務(wù)器正常運(yùn)行且能夠相互通信及與客戶端通信,就能保證 可用性 (Availability)。一個(gè)典型的五服務(wù)器集群可以容忍任意兩臺(tái)服務(wù)器的故障。
  • 不依賴時(shí)序來(lái)保證日志的一致性;錯(cuò)誤的時(shí)鐘或極端的消息延遲最多導(dǎo)致可用性問(wèn)題。
  • 通常情況下,一條命令只需一輪 RPC 從領(lǐng)導(dǎo)者到多數(shù)服務(wù)器即可完成;少數(shù)慢速服務(wù)器不應(yīng)影響整體系統(tǒng)性能。

Paxos 的問(wèn)題所在

盡管 Paxos 在共識(shí)領(lǐng)域占據(jù)主導(dǎo)地位,但它存在兩個(gè)顯著缺陷。

第一個(gè)缺陷是 Paxos 異常難以理解。其完整解釋晦澀難懂,即使是簡(jiǎn)化版本也頗具挑戰(zhàn)性。這種晦澀性可能源于其以 單決策 Paxos (single-decree Paxos) 為基礎(chǔ)的構(gòu)建方式。單決策 Paxos 本身就密集且微妙,其分為兩個(gè)階段,缺乏簡(jiǎn)單直觀的解釋且難以獨(dú)立理解。

第二個(gè)缺陷是 Paxos 沒有為構(gòu)建實(shí)際系統(tǒng)提供良好的基礎(chǔ)。沒有一個(gè)被廣泛認(rèn)可的 多決策 Paxos (multi-Paxos) 算法;Lamport 的描述主要集中在單決策上,對(duì)多決策僅給出了大致思路,缺乏許多細(xì)節(jié)。此外,Paxos 的對(duì)等 (peer-to-peer) 核心架構(gòu)不適合需要做出一系列決策的實(shí)際系統(tǒng);先選舉一個(gè)領(lǐng)導(dǎo)者,再由領(lǐng)導(dǎo)者協(xié)調(diào)決策會(huì)更簡(jiǎn)單高效。因此,實(shí)際系統(tǒng)往往與 Paxos 的原始描述相去甚遠(yuǎn),開發(fā)者需要花費(fèi)大量時(shí)間和精力進(jìn)行修改和擴(kuò)展,這既耗時(shí)又容易出錯(cuò)。正如 Chubby 的實(shí)現(xiàn)者所言:“Paxos 算法的描述與真實(shí)世界系統(tǒng)的需求之間存在巨大鴻溝……最終的系統(tǒng)將基于一個(gè)未經(jīng)證明的協(xié)議。”

為可理解性而設(shè)計(jì)

Raft 的設(shè)計(jì)將可理解性置于首位。設(shè)計(jì)者不僅希望算法能夠正確、高效地工作,還希望廣大的開發(fā)者和學(xué)生能夠輕松理解它,并建立起對(duì)算法行為的直觀認(rèn)識(shí)。

在設(shè)計(jì)過(guò)程中,Raft 采用了兩種主要技術(shù)來(lái)增強(qiáng)可理解性:

  1. 問(wèn)題分解 (Problem decomposition) :將復(fù)雜問(wèn)題分解為若干個(gè)相對(duì)獨(dú)立的子問(wèn)題,這些子問(wèn)題可以被獨(dú)立解決、解釋和理解。Raft 將共識(shí)問(wèn)題分解為領(lǐng)導(dǎo)者選舉、日志復(fù)制、安全性和成員變更幾個(gè)部分。
  2. 狀態(tài)空間簡(jiǎn)化 (State space reduction) :通過(guò)減少需要考慮的狀態(tài)數(shù)量,使系統(tǒng)行為更具一致性,并盡可能消除不確定性。例如,Raft 不允許日志中存在空洞,并限制了日志之間可能出現(xiàn)不一致的方式。值得一提的是,Raft 在領(lǐng)導(dǎo)者選舉中引入的隨機(jī)化,雖然是一種不確定性,但它通過(guò)以相似方式處理所有可能選擇,反而簡(jiǎn)化了狀態(tài)空間,提升了理解性。

Raft 共識(shí)算法

圖片圖片

Raft 算法用于管理一個(gè)復(fù)制日志,其整體機(jī)制可以參考論文中的圖 2 (Figure 2) 進(jìn)行概覽,關(guān)鍵屬性總結(jié)在圖 3 (Figure 3)。Raft 通過(guò)選舉一位唯一的 領(lǐng)導(dǎo)者 (leader),并賦予其管理復(fù)制日志的全部職責(zé)來(lái)實(shí)現(xiàn)共識(shí)。領(lǐng)導(dǎo)者從客戶端接收日志條目,將其復(fù)制到其他服務(wù)器上,并告知服務(wù)器何時(shí)可以安全地將日志條目應(yīng)用于它們的狀態(tài)機(jī)。這種領(lǐng)導(dǎo)者模型簡(jiǎn)化了復(fù)制日志的管理。如果當(dāng)前領(lǐng)導(dǎo)者失效,則會(huì)選舉出新的領(lǐng)導(dǎo)者。

圖片圖片

Raft 將共識(shí)問(wèn)題分解為三個(gè)相對(duì)獨(dú)立的子問(wèn)題:

  • 領(lǐng)導(dǎo)者選舉 (Leader election) :當(dāng)現(xiàn)有領(lǐng)導(dǎo)者失效時(shí),必須選舉出新的領(lǐng)導(dǎo)者 (5.2節(jié))。
  • 日志復(fù)制 (Log replication) :領(lǐng)導(dǎo)者必須接受來(lái)自客戶端的日志條目,并在集群中進(jìn)行復(fù)制,強(qiáng)制其他服務(wù)器的日志與自己保持一致 (5.3節(jié))。
  • 安全性 (Safety) :Raft 的關(guān)鍵安全屬性是狀態(tài)機(jī)安全屬性 (State Machine Safety Property):如果任一服務(wù)器已將特定日志條目應(yīng)用于其狀態(tài)機(jī),則其他服務(wù)器不能對(duì)同一日志索引應(yīng)用不同的命令 (5.4節(jié))。

Raft 基礎(chǔ)

一個(gè) Raft 集群包含若干服務(wù)器,通常是5臺(tái),這樣可以容忍兩臺(tái)服務(wù)器的故障。在任何時(shí)刻,每臺(tái)服務(wù)器都處于以下三種狀態(tài)之一:領(lǐng)導(dǎo)者 (leader)、跟隨者 (follower) 或 候選人 (candidate)。正常情況下,集群中只有一個(gè)領(lǐng)導(dǎo)者,其余所有服務(wù)器都是跟隨者。跟隨者是被動(dòng)的,它們不主動(dòng)發(fā)起請(qǐng)求,僅響應(yīng)來(lái)自領(lǐng)導(dǎo)者和候選人的請(qǐng)求。所有客戶端請(qǐng)求都由領(lǐng)導(dǎo)者處理;如果客戶端聯(lián)系到跟隨者,跟隨者會(huì)將其重定向到領(lǐng)導(dǎo)者。候選人狀態(tài)則用于選舉新的領(lǐng)導(dǎo)者。

Raft 將時(shí)間劃分為連續(xù)的 任期 (terms),每個(gè)任期用一個(gè)連續(xù)整數(shù)編號(hào)。每個(gè)任期從一次選舉開始,一個(gè)或多個(gè)候選人嘗試成為領(lǐng)導(dǎo)者。如果一個(gè)候選人贏得選舉,它將在該任期的剩余時(shí)間內(nèi)擔(dān)任領(lǐng)導(dǎo)者。有時(shí)選舉可能以選票分裂告終,導(dǎo)致該任期沒有領(lǐng)導(dǎo)者,此時(shí)會(huì)很快開始一個(gè)新的任期(和新一輪選舉)。Raft 保證在一個(gè)給定的任期中最多只有一個(gè)領(lǐng)導(dǎo)者。

任期在 Raft 中充當(dāng) 邏輯時(shí)鐘 (logical clock),允許服務(wù)器檢測(cè)過(guò)時(shí)的信息(如陳舊的領(lǐng)導(dǎo)者)。每臺(tái)服務(wù)器都存儲(chǔ)一個(gè)單調(diào)遞增的當(dāng)前任期號(hào) (currentTerm)。服務(wù)器通信時(shí)會(huì)交換 currentTerm;如果一臺(tái)服務(wù)器的 currentTerm 小于另一臺(tái),它會(huì)將自己的 currentTerm 更新為較大的值。如果候選人或領(lǐng)導(dǎo)者發(fā)現(xiàn)自己的任期已過(guò)時(shí),它會(huì)立即轉(zhuǎn)變?yōu)楦S者狀態(tài)。如果服務(wù)器收到一個(gè)帶有陳舊任期號(hào)的請(qǐng)求,它會(huì)拒絕該請(qǐng)求。

Raft 服務(wù)器之間通過(guò) 遠(yuǎn)程過(guò)程調(diào)用 (RPCs) 進(jìn)行通信。基本的共識(shí)算法只需要兩種類型的 RPC:

  • RequestVote RPC:由候選人在選舉期間發(fā)起 (5.2節(jié))。
  • AppendEntries RPC:由領(lǐng)導(dǎo)者發(fā)起,用于復(fù)制日志條目和作為心跳 (5.3節(jié))。

領(lǐng)導(dǎo)者選舉

Raft 使用心跳機(jī)制來(lái)觸發(fā)領(lǐng)導(dǎo)者選舉。服務(wù)器啟動(dòng)時(shí)是跟隨者狀態(tài)。只要能從領(lǐng)導(dǎo)者或候選人那里收到有效的 RPC,服務(wù)器就保持跟隨者狀態(tài)。領(lǐng)導(dǎo)者會(huì)向所有跟隨者發(fā)送周期性的心跳(不攜帶日志條目的 AppendEntries RPC)以維持其權(quán)威。如果一個(gè)跟隨者在一段時(shí)間(稱為 選舉超時(shí) (election timeout))內(nèi)沒有收到任何通信,它就假定當(dāng)前沒有可行的領(lǐng)導(dǎo)者,并開始一次選舉以選出新的領(lǐng)導(dǎo)者。

開始選舉時(shí),跟隨者會(huì):

  1. 增加其本地的 currentTerm
  2. 轉(zhuǎn)變?yōu)楹蜻x人狀態(tài)。
  3. 為自己投票。
  4. 并行地向集群中的其他所有服務(wù)器發(fā)送 RequestVote RPC。

候選人會(huì)保持此狀態(tài),直到發(fā)生以下三種情況之一:(a) 它贏得選舉;(b) 另一臺(tái)服務(wù)器確立自己為領(lǐng)導(dǎo)者;(c) 一段時(shí)間過(guò)去后沒有贏家。

  • 贏得選舉 :候選人從整個(gè)集群中超過(guò)半數(shù)的服務(wù)器那里獲得了針對(duì)同一任期的選票。每臺(tái)服務(wù)器在給定的任期內(nèi)最多只能為一名候選人投票(基于先到先得的原則,并受5.4節(jié)中額外限制的約束)。多數(shù)決規(guī)則確保了在一個(gè)特定任期內(nèi)最多只能有一個(gè)候選人贏得選舉(即選舉安全屬性)。一旦候選人獲勝,它就成為領(lǐng)導(dǎo)者,并向所有其他服務(wù)器發(fā)送心跳消息以建立其權(quán)威并阻止新的選舉。
  • 發(fā)現(xiàn)其他領(lǐng)導(dǎo)者 :在等待選票期間,候選人可能會(huì)收到來(lái)自另一臺(tái)聲稱是領(lǐng)導(dǎo)者的服務(wù)器的 AppendEntries RPC。如果該領(lǐng)導(dǎo)者的任期(包含在其 RPC 中)大于或等于候選人的當(dāng)前任期,則候選人承認(rèn)該領(lǐng)導(dǎo)者的合法性并轉(zhuǎn)換回跟隨者狀態(tài)。如果 RPC 中的任期小于候選人的當(dāng)前任期,則候選人拒絕該 RPC 并繼續(xù)保持候選人狀態(tài)。
  • 沒有贏家(選票分裂) :如果許多跟隨者同時(shí)成為候選人,選票可能會(huì)被瓜分,導(dǎo)致沒有候選人獲得多數(shù)票。發(fā)生這種情況時(shí),每個(gè)候選人都會(huì)超時(shí),并通過(guò)增加其任期號(hào)和發(fā)起另一輪 RequestVote RPC 來(lái)開始新的選舉。

為了確保選票分裂很少發(fā)生并且能夠迅速解決,Raft 使用了 隨機(jī)化選舉超時(shí) (randomized election timeouts)。選舉超時(shí)時(shí)間從一個(gè)固定的區(qū)間內(nèi)隨機(jī)選擇(例如 150-300 毫秒)。這使得服務(wù)器的超時(shí)時(shí)間分散開,在大多數(shù)情況下,只有一個(gè)服務(wù)器會(huì)首先超時(shí)并發(fā)起選舉;它贏得選舉并在其他服務(wù)器超時(shí)之前發(fā)送心跳。處理選票分裂也使用相同的機(jī)制:每個(gè)候選人在開始選舉時(shí)重新啟動(dòng)其隨機(jī)化選舉超時(shí),并等待該超時(shí)結(jié)束后才開始下一次選舉,這減少了在新選舉中再次發(fā)生選票分裂的可能性。

日志復(fù)制

一旦選出領(lǐng)導(dǎo)者,它就開始處理客戶端請(qǐng)求。每個(gè)客戶端請(qǐng)求都包含一個(gè)由復(fù)制狀態(tài)機(jī)執(zhí)行的命令。領(lǐng)導(dǎo)者將該命令作為新條目追加到其日志中,然后并行地向其他所有服務(wù)器發(fā)送 AppendEntries RPC 以復(fù)制該條目。當(dāng)條目被安全復(fù)制后(如下所述),領(lǐng)導(dǎo)者將該條目應(yīng)用于其狀態(tài)機(jī),并將執(zhí)行結(jié)果返回給客戶端。如果跟隨者崩潰、運(yùn)行緩慢或網(wǎng)絡(luò)丟包,領(lǐng)導(dǎo)者會(huì)無(wú)限期地重試 AppendEntries RPC(即使在響應(yīng)客戶端之后),直到所有跟隨者最終都存儲(chǔ)了所有日志條目。

日志條目 (log entries) 包含狀態(tài)機(jī)命令以及領(lǐng)導(dǎo)者收到該條目時(shí)的任期號(hào)。每個(gè)日志條目還有一個(gè)整數(shù)索引,標(biāo)識(shí)其在日志中的位置。

圖片圖片

一個(gè)日志條目被認(rèn)為是 已提交的 (committed) 時(shí),意味著它可以安全地應(yīng)用于狀態(tài)機(jī)了。Raft 保證已提交的條目是持久的,并且最終會(huì)被所有可用的狀態(tài)機(jī)執(zhí)行。當(dāng)創(chuàng)建條目的領(lǐng)導(dǎo)者已在多數(shù)服務(wù)器上復(fù)制了該條目時(shí),該條目即被提交(例如論文圖 6 中的條目 7)。這也同時(shí)提交了領(lǐng)導(dǎo)者日志中所有在它之前的條目,包括由先前領(lǐng)導(dǎo)者創(chuàng)建的條目。領(lǐng)導(dǎo)者會(huì)跟蹤它所知道的最高已提交條目的索引 (commitIndex),并在未來(lái)的 AppendEntries RPC(包括心跳)中包含該索引,以便其他服務(wù)器最終得知。一旦跟隨者得知某個(gè)日志條目已提交,它就會(huì)按日志順序?qū)⒃摋l目應(yīng)用于其本地狀態(tài)機(jī)。

Raft 的日志機(jī)制旨在維護(hù)不同服務(wù)器日志之間的高度一致性,這構(gòu)成了 日志匹配特性 (Log Matching Property):

  1. 如果在不同日志中的兩個(gè)條目具有相同的索引和任期,那么它們存儲(chǔ)相同的命令。這是因?yàn)轭I(lǐng)導(dǎo)者在給定的任期內(nèi),對(duì)于一個(gè)給定的日志索引最多只創(chuàng)建一個(gè)條目,并且日志條目在日志中的位置永遠(yuǎn)不會(huì)改變。
  2. 如果在不同日志中的兩個(gè)條目具有相同的索引和任期,那么這些日志在直到該索引(包括該索引)之前的所有條目上都是相同的。這通過(guò) AppendEntries RPC 執(zhí)行的一個(gè)簡(jiǎn)單的一致性檢查來(lái)保證:領(lǐng)導(dǎo)者在發(fā)送 AppendEntries RPC 時(shí),會(huì)包含其日志中緊接在新條目之前的那個(gè)條目的索引和任期。如果跟隨者在其日志中找不到具有相同索引和任期的條目,它就會(huì)拒絕新的條目。

圖片圖片

正常操作期間,領(lǐng)導(dǎo)者和跟隨者的日志保持一致,因此 AppendEntries 的一致性檢查永遠(yuǎn)不會(huì)失敗。然而,領(lǐng)導(dǎo)者崩潰可能會(huì)導(dǎo)致日志不一致(舊領(lǐng)導(dǎo)者可能沒有完全復(fù)制其日志中的所有條目)。這些不一致性可能在一系列領(lǐng)導(dǎo)者和跟隨者崩潰中累積(如論文圖 7 所示)。

Raft 中,領(lǐng)導(dǎo)者通過(guò)強(qiáng)制跟隨者的日志復(fù)制自己的日志來(lái)處理不一致性。這意味著跟隨者日志中沖突的條目將被領(lǐng)導(dǎo)者日志中的條目覆蓋。為了使跟隨者的日志與自己的日志一致,領(lǐng)導(dǎo)者必須找到兩個(gè)日志一致的最新日志條目,刪除該點(diǎn)之后跟隨者日志中的所有條目,并向跟隨者發(fā)送該點(diǎn)之后領(lǐng)導(dǎo)者日志中的所有條目。這些操作都是響應(yīng) AppendEntries RPC 的一致性檢查而發(fā)生的。

領(lǐng)導(dǎo)者為每個(gè)跟隨者維護(hù)一個(gè) nextIndex,即領(lǐng)導(dǎo)者將要發(fā)送給該跟隨者的下一個(gè)日志條目的索引。當(dāng)領(lǐng)導(dǎo)者剛上任時(shí),它會(huì)將所有 nextIndex 值初始化為其日志中最后一個(gè)條目之后的索引。如果跟隨者的日志與領(lǐng)導(dǎo)者的不一致,下一次 AppendEntries RPC 中的一致性檢查將會(huì)失敗。在被拒絕后,領(lǐng)導(dǎo)者會(huì)遞減 nextIndex 并重試 AppendEntries RPC。最終 nextIndex 會(huì)達(dá)到一個(gè)領(lǐng)導(dǎo)者和跟隨者日志匹配的點(diǎn)。此時(shí) AppendEntries 將成功,它會(huì)移除跟隨者日志中任何沖突的條目,并追加來(lái)自領(lǐng)導(dǎo)者日志的條目(如果有)。一旦 AppendEntries 成功,跟隨者的日志就與領(lǐng)導(dǎo)者的日志一致了,并且在該任期的剩余時(shí)間里都將保持這種狀態(tài)。

通過(guò)這種機(jī)制,領(lǐng)導(dǎo)者上任時(shí)無(wú)需采取任何特殊操作來(lái)恢復(fù)日志一致性。它只需開始正常操作,日志就會(huì)在 AppendEntries 一致性檢查失敗時(shí)自動(dòng)趨于一致。領(lǐng)導(dǎo)者從不覆蓋或刪除其自身日志中的條目(領(lǐng)導(dǎo)者只追加屬性)。

安全性

前面描述的領(lǐng)導(dǎo)者選舉和日志復(fù)制機(jī)制尚不足以確保每個(gè)狀態(tài)機(jī)以完全相同的順序執(zhí)行完全相同的命令。例如,一個(gè)跟隨者可能在領(lǐng)導(dǎo)者提交若干日志條目時(shí)不可用,然后它可能被選為領(lǐng)導(dǎo)者并用新的條目覆蓋這些已提交的條目。本節(jié)通過(guò)增加一個(gè)關(guān)于哪些服務(wù)器可以被選舉為領(lǐng)導(dǎo)者的限制來(lái)完善 Raft 算法。這個(gè)限制確保了任何給定任期的領(lǐng)導(dǎo)者都包含先前任期中所有已提交的條目(領(lǐng)導(dǎo)者完整性屬性)。

選舉限制 (Election restriction)

在任何基于領(lǐng)導(dǎo)者的共識(shí)算法中,領(lǐng)導(dǎo)者最終必須存儲(chǔ)所有已提交的日志條目。Raft 采用一種更簡(jiǎn)單的方法,它保證從選舉的那一刻起,每個(gè)新領(lǐng)導(dǎo)者都擁有先前任期中所有已提交的條目,而無(wú)需將這些條目傳輸給領(lǐng)導(dǎo)者。這意味著日志條目只從領(lǐng)導(dǎo)者單向流向跟隨者,并且領(lǐng)導(dǎo)者從不覆蓋其日志中的現(xiàn)有條目。

Raft 利用投票過(guò)程來(lái)阻止一個(gè)候選人贏得選舉,除非其日志包含了所有已提交的條目。候選人為了當(dāng)選必須聯(lián)系集群中的多數(shù)服務(wù)器,這意味著每個(gè)已提交的條目必須存在于該多數(shù)服務(wù)器中的至少一個(gè)服務(wù)器上。如果候選人的日志至少與該多數(shù)服務(wù)器中任何其他日志一樣“最新”(“最新”的定義如下),那么它將持有所有已提交的條目。RequestVote RPC 實(shí)現(xiàn)了這一限制:RPC 中包含了關(guān)于候選人日志的信息,如果投票者自己的日志比候選人的日志更新,則它會(huì)拒絕投票。

Raft 通過(guò)比較日志中最后條目的索引和任期來(lái)判斷兩個(gè)日志哪個(gè)更新:

  • 如果日志的最后條目具有不同的任期,則具有較晚任期的日志更新。
  • 如果日志以相同的任期結(jié)束,則較長(zhǎng)的日志更新。
提交先前任期的條目 (Committing entries from previous terms)

如 5.3 節(jié)所述,領(lǐng)導(dǎo)者知道其當(dāng)前任期的一個(gè)條目一旦存儲(chǔ)在多數(shù)服務(wù)器上就被提交了。如果領(lǐng)導(dǎo)者在提交一個(gè)條目之前崩潰,未來(lái)的領(lǐng)導(dǎo)者將嘗試完成該條目的復(fù)制。然而,領(lǐng)導(dǎo)者不能僅僅因?yàn)橐粋€(gè)先前任期的條目存儲(chǔ)在多數(shù)服務(wù)器上,就立即斷定該條目已提交。論文中的圖 8 展示了一種情況:一個(gè)舊的日志條目存儲(chǔ)在多數(shù)服務(wù)器上,但仍可能被未來(lái)的領(lǐng)導(dǎo)者覆蓋。

圖片圖片

為了消除如圖 8 所示的問(wèn)題,Raft 規(guī)定:從不通過(guò)計(jì)算副本數(shù)來(lái)提交先前任期的日志條目 。只有領(lǐng)導(dǎo)者當(dāng)前任期的日志條目才通過(guò)計(jì)算副本數(shù)來(lái)提交。一旦當(dāng)前任期的某個(gè)條目以這種方式提交,那么所有先前的條目都會(huì)因?yàn)槿罩酒ヅ涮匦远g接提交。Raft 采取這種更保守的方法是為了簡(jiǎn)化設(shè)計(jì)。

這種提交規(guī)則的復(fù)雜性源于當(dāng)領(lǐng)導(dǎo)者復(fù)制先前任期的條目時(shí),日志條目會(huì)保留其原始任期號(hào)。Raft 的這種方法使得推理日志條目更容易,因?yàn)樗鼈冊(cè)诓煌瑫r(shí)間和不同日志中保持相同的任期號(hào)。此外,與其他算法相比,Raft 中的新領(lǐng)導(dǎo)者發(fā)送的先前任期的日志條目更少。

安全性論證 (Safety argument)

有了完整的 Raft 算法,現(xiàn)在可以更精確地論證 領(lǐng)導(dǎo)者完整性屬性 (Leader Completeness Property) 成立。該論證采用反證法。

假設(shè) T 任期的領(lǐng)導(dǎo)者 leaderT 提交了其任期內(nèi)的一個(gè)日志條目,但該條目未被某個(gè)未來(lái)任期 U (U > T) 的領(lǐng)導(dǎo)者 leaderU 存儲(chǔ)。

圖片圖片

  1. 該已提交條目在 leaderU 當(dāng)選時(shí)必然不在其日志中(領(lǐng)導(dǎo)者從不刪除或覆蓋條目)。
  2. leaderT 在集群的多數(shù)服務(wù)器上復(fù)制了該條目,而 leaderU 從集群的多數(shù)服務(wù)器獲得了選票。因此,至少有一個(gè)服務(wù)器(稱為“投票者”)既接受了來(lái)自 leaderT 的條目,也投票給了 leaderU (如圖 9 所示)。
  3. 投票者必須在投票給 leaderU 之前就接受了來(lái)自 leaderT 的已提交條目;否則,它會(huì)拒絕來(lái)自 leaderT 的 AppendEntries 請(qǐng)求(因?yàn)樗漠?dāng)前任期會(huì)高于 T)。
  4. 投票者在投票給 leaderU 時(shí)仍然存儲(chǔ)著該條目,因?yàn)樗兄虚g的領(lǐng)導(dǎo)者都包含該條目(根據(jù)假設(shè)),領(lǐng)導(dǎo)者從不移除條目,而跟隨者只有在與領(lǐng)導(dǎo)者沖突時(shí)才移除條目。
  5. 投票者將選票投給了 leaderU,因此 leaderU 的日志必須至少與投票者的日志一樣新。這將導(dǎo)致以下兩種矛盾之一:

如果投票者和 leaderU 的最后日志任期相同,那么 leaderU 的日志必須至少與投票者的日志一樣長(zhǎng),因此其日志包含了投票者日志中的每個(gè)條目。這與假設(shè)(leaderU 不包含該已提交條目,而投票者包含)相矛盾。

否則,leaderU 的最后日志任期必須大于投票者的最后日志任期。而且,它也大于 T,因?yàn)橥镀闭叩淖詈笕罩救纹谥辽偈?T(它包含來(lái)自 T 任期的已提交條目)。創(chuàng)建 leaderU 最后日志條目的先前領(lǐng)導(dǎo)者在其日志中必須包含該已提交條目(根據(jù)假設(shè))。那么,根據(jù)日志匹配特性,leaderU 的日志也必須包含該已提交條目,這又是一個(gè)矛盾。

  1. 至此,矛盾論證完畢。因此,所有大于 T 的任期的領(lǐng)導(dǎo)者都必須包含 T 任期中在該任期提交的所有條目。

圖片圖片

有了領(lǐng)導(dǎo)者完整性屬性,就可以證明論文圖 3 中的 狀態(tài)機(jī)安全屬性 (State Machine Safety Property):如果一臺(tái)服務(wù)器已將某個(gè)給定索引的日志條目應(yīng)用于其狀態(tài)機(jī),則其他服務(wù)器永遠(yuǎn)不會(huì)對(duì)同一索引應(yīng)用不同的日志條目。當(dāng)服務(wù)器將日志條目應(yīng)用于其狀態(tài)機(jī)時(shí),其日志必須與領(lǐng)導(dǎo)者的日志在該條目之前(包括該條目)完全相同,并且該條目必須是已提交的。現(xiàn)在考慮任何服務(wù)器應(yīng)用給定日志索引的最低任期;領(lǐng)導(dǎo)者完整性屬性保證所有更高任期的領(lǐng)導(dǎo)者都將存儲(chǔ)相同的日志條目,因此在后續(xù)任期中應(yīng)用該索引的服務(wù)器將應(yīng)用相同的值。

最后,Raft 要求服務(wù)器按日志索引順序應(yīng)用條目。結(jié)合狀態(tài)機(jī)安全屬性,這意味著所有服務(wù)器都將以相同的順序?qū)⑼耆嗤娜罩緱l目集應(yīng)用于其狀態(tài)機(jī)。

責(zé)任編輯:武曉燕 來(lái)源: Piper蛋窩
相關(guān)推薦

2021-03-04 17:55:27

算法Raft分布式

2023-08-04 07:28:00

2021-05-31 08:01:11

Raft共識(shí)算法

2021-04-19 08:16:53

算法Raft 共識(shí)

2024-04-11 09:45:31

2018-05-17 11:04:18

2013-04-24 10:31:44

公有云云安全

2021-03-15 14:59:28

物聯(lián)網(wǎng)互聯(lián)網(wǎng)IoT

2022-04-01 15:59:05

區(qū)塊鏈安全數(shù)據(jù)結(jié)構(gòu)本

2009-12-10 10:20:04

2022-04-06 15:46:26

區(qū)塊鏈安全加密技術(shù)

2011-07-28 20:09:56

2012-08-20 10:28:01

云模型NIST云計(jì)算

2023-04-05 10:00:00

分布式算法

2020-11-10 17:10:44

區(qū)塊鏈共識(shí)算法

2009-03-02 09:33:00

2021-08-13 07:56:13

Raft算法日志

2020-03-16 11:55:28

PaxosRaft協(xié)議

2013-04-18 11:48:59

2013-04-18 11:54:05

虛擬化安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日本免费一区视频| 久久久久久久国产精品毛片| 欧美色网一区| 久久久久久久综合狠狠综合| 国产精品aaaa| 成年人视频软件| 国产乱码精品一区二区三区亚洲人| 亚洲欧美日韩国产综合在线 | 欧美第一黄网| 最近中文字幕免费在线观看| 欧美一区综合| 日韩精品免费观看| 自拍偷拍21p| 蜜桃传媒在线观看免费进入 | 岛国视频午夜一区免费在线观看| 欧洲一区二区日韩在线视频观看免费 | 免费人成在线不卡| 欧美美女18p| 中文字幕在线观看的网站| 久久久久黄色| 午夜激情综合网| 亚洲精品乱码久久久久久蜜桃91 | 国产做受高潮69| 99久久久无码国产精品性| 国产成人久久精品一区二区三区| 香蕉影视欧美成人| 中文字幕一区二区三区精彩视频 | 色女孩综合影院| 久久最新免费视频| 男人天堂资源在线| 国产69精品久久久久777| 国产精品1区2区在线观看| 中文字幕在线观看成人| 精品国产欧美日韩| 精品国产制服丝袜高跟| 北条麻妃av高潮尖叫在线观看| a视频在线播放| 日本一区免费视频| 久久精品第九区免费观看 | 欧美亚洲自偷自偷| 欧美日韩高清区| 日韩毛片无码永久免费看| 国产欧美啪啪| 欧美一区二区三区在线电影| 久久精品香蕉视频| free性护士videos欧美| 亚洲免费在线播放| 一本一道久久a久久综合精品| 亚洲欧美丝袜中文综合| 国产69精品久久久久777| 成人欧美一区二区三区在线湿哒哒 | 国产亚洲一区二区三区在线播放| 一级片aaaa| 老司机精品视频网站| 羞羞色国产精品| 久久久国产精品人人片| 香蕉久久网站| 日韩一区二区av| 女人黄色一级片| 九九精品在线| 亚洲毛片在线免费观看| 亚洲国产综合视频| 日韩欧美影院| 日韩精品视频中文在线观看| 88av在线播放| 国产精品男女| 亚洲精美色品网站| 自拍视频一区二区| 香蕉视频一区| 亚洲欧美在线播放| 成人黄色免费网址| av中文一区| 自拍偷拍亚洲在线| 国产又色又爽又高潮免费| 久久婷婷蜜乳一本欲蜜臀| 中文字幕久久亚洲| 国产成人免费在线观看视频| 91精品国产91久久久久久黑人| 久久天天躁狠狠躁夜夜躁2014| 多男操一女视频| 综合久久婷婷| 欧美激情一区二区三区高清视频 | 免费观看日韩毛片| 另类专区亚洲| 欧美日韩中文一区| 999在线精品视频| 久久伊人精品| 亚洲国产成人精品久久久国产成人一区| 无码人妻一区二区三区免费n鬼沢| youjizz亚洲| 亚洲精品97久久| 四虎国产精品成人免费入口| 欧美韩国日本在线观看| 欧美刺激性大交免费视频| 久久黄色小视频| 国产日韩欧美一区在线| 国产精品免费视频xxxx| 国产视频一区二区三| 成人激情黄色小说| 欧洲在线视频一区| 国产区在线观看| 五月激情六月综合| www.天天射.com| 日本成人精品| 精品一区电影国产| 国产激情无码一区二区三区| 亚洲精品影院在线观看| 国产精品久久久久久久久粉嫩av | 日本不卡一区二区| 99视频国产精品免费观看| 午夜性色福利影院| 中文字幕中文字幕在线一区| 久久99久久99精品| 成人国产网站| 337p日本欧洲亚洲大胆色噜噜| 波多野结衣片子| 欧美视频二区| 国产精品色悠悠| 欧美 日韩 国产 成人 在线 91 | 欧美在线看片a免费观看| 色婷婷一区二区三区在线观看| 久久亚洲道色| 日韩一区二区久久久| 国产高潮久久久| 国产一区二区三区免费在线观看| 精品在线视频一区二区三区| 麻豆av免费在线观看| 欧美性猛交xxxx免费看久久久| 一区二区三区国产好的精华液| 国产免费久久| 国内外成人免费激情在线视频| 国产精品视频在线观看免费| 国产视频一区二区在线观看| 国产女大学生av| 综合久久成人| 久久久999精品免费| 亚洲乱码国产乱码精品| 成人教育av在线| 少妇高潮流白浆| 91精品影视| 亚洲精品av在线| 免费在线视频观看| 精品一区二区三区免费视频| 日韩电影大全在线观看| 日韩伦理在线| 亚洲精品一区二区三区影院| 青青草偷拍视频| 狠狠色丁香婷综合久久| 亚洲国产精品日韩| 日韩不卡在线| 亚洲香蕉成视频在线观看| www.国产色| 91丨porny丨首页| 日韩中文字幕在线免费| baoyu135国产精品免费| 欧美另类在线播放| 国产黄色片网站| 一区二区三区在线视频播放| 五月六月丁香婷婷| 亚洲精品网址| 亚洲伊人一本大道中文字幕| www.久久ai| 日韩网站在线看片你懂的| 亚洲人与黑人屁股眼交| 极品美女销魂一区二区三区 | 瑟瑟在线观看| 色综合中文字幕| 日韩人妻无码一区二区三区| 翔田千里一区二区| 欧美日韩在线精品一区二区三区| 一根才成人网| 伊人久久男人天堂| 伊人久久国产精品| 亚洲日本va在线观看| 深夜做爰性大片蜜桃| 国色天香一区二区| 狠狠色综合一区二区| 一个人www视频在线免费观看| 亚洲欧美日韩在线一区| 成人黄色免费网| 中文字幕一区三区| 欧美午夜精品一区二区| av影院在线| 成人av在线播放网址| 2019日韩中文字幕mv| 日韩精品免费一区二区三区竹菊 | 中文字幕永久有效| 欧美 日韩 国产 一区| 成人女人免费毛片| 亚洲优女在线| 日韩有码片在线观看| www.国产黄色| 黑人极品videos精品欧美裸| jizz18女人高潮| 国产精品亚洲一区二区三区妖精 | 国产午夜精品一区二区三区欧美| 欧美一进一出视频| 亚洲欧美专区| 国语自产在线不卡| av网站无病毒在线| 精品区一区二区| 久久青青草原亚洲av无码麻豆 | 国产精品suv一区二区88| 国产精品一区二区91| 男人的天堂99| 一区二区在线| 欧美日韩精品久久| 国产精品久久免费视频| 欧美在线欧美在线| 成人免费看片| 亚洲情综合五月天| 性一交一乱一精一晶| 91久久人澡人人添人人爽欧美| 国产人妻精品一区二区三区不卡| 成人福利视频在线| 国内外成人免费在线视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲精品视频在线观看免费 | 天堂在线免费观看视频| 亚洲欧美色图小说| 欧美三级视频网站| heyzo一本久久综合| 久久久久久久久久一区二区| 狠狠入ady亚洲精品| 亚洲一区二区三区四区中文| 日韩在线麻豆| 99久久无色码| 99综合99| 国产精品美女主播| 性欧美18~19sex高清播放| 欧美精品情趣视频| 五月天婷婷在线视频| 亚洲精品视频在线播放| 成人久久久精品国产乱码一区二区| 欧美三区在线观看| 欧美男人亚洲天堂| 欧美日韩人人澡狠狠躁视频| 九九视频在线观看| 亚洲色图19p| 一本在线免费视频| 国产欧美一区二区精品性色 | 国产午夜精品久久久久| 亚洲国产成人porn| 国产一二三四在线| 一区二区三区欧美在线观看| 久久av红桃一区二区禁漫| 国产日韩精品一区| 成都免费高清电影| 国产日韩三级在线| 性欧美精品男男| 国产色综合久久| 中文字幕第20页| 国产日韩亚洲欧美综合| 一级肉体全黄裸片| 国产精品美女一区二区三区| 男人的天堂av网| 国产精品天美传媒| 成年人视频软件| 日韩一区有码在线| 国产黄色的视频| 一级日本不卡的影视| 国产午夜福利精品| 天天av天天翘天天综合网| 日本少妇激情视频| 欧美色欧美亚洲高清在线视频| 青青国产在线观看| 一本大道综合伊人精品热热| 午夜精品免费观看| 欧美艳星brazzers| 国产麻豆免费视频| 欧美大片在线观看一区二区| 人妻精品一区二区三区| 日韩精品黄色网| 免费福利在线观看| 中文字幕日韩高清| 国产激情在线视频| 高清亚洲成在人网站天堂| 成人美女视频| 国产精品久久久久久久美男| 亚洲aⅴ网站| 成人h在线播放| 日韩伦理一区二区三区| 日韩欧美三级电影| 最新国产精品| 蜜臀av色欲a片无码精品一区| 国产精品日本| 91极品视频在线观看| 国产精品一区不卡| 国产精品探花一区二区在线观看| 国产欧美1区2区3区| 国产黄色小视频网站| 亚洲超丰满肉感bbw| 精人妻无码一区二区三区| 91精品国产91久久久久久一区二区 | 精品国模一区二区三区| 国产日韩欧美成人| 国产精品毛片久久久| 亚洲高清精品中出| 欧美三级在线| 亚洲高清在线免费观看| 国产自产高清不卡| 亚洲第一页av| 亚洲欧洲99久久| 91看片在线播放| 欧美少妇一区二区| 亚洲精品综合网| 夜夜躁日日躁狠狠久久88av| 牛牛精品视频在线| 国产精品久久久久久久久久ktv| 日本伊人久久| 日本一区精品| 黄色成人av网站| 中文字幕av专区| av一区二区三区| 国产极品美女在线| 色综合天天综合色综合av| 精品黑人一区二区三区在线观看| 亚洲人成欧美中文字幕| 男人添女人下部高潮视频在线观看| 国产成人精品免高潮费视频| www.丝袜精品| 国产手机视频在线观看| 日韩激情av在线| 2一3sex性hd| 亚洲欧美日韩在线播放| 中国一级片黄色一级片黄| 亚洲国产成人精品一区二区| 成人国产免费电影| 国产久一一精品| 国产欧美日韩精品一区二区免费| 国产又粗又猛又爽又黄的网站 | 91国在线精品国内播放 | 欧美在线网站| 麻豆三级在线观看| 久久久久久久综合色一本| 日韩欧美亚洲一区二区三区| 日韩一区二区在线播放| 色开心亚洲综合| 国产精品国语对白| 久久91成人| 国产乱子夫妻xx黑人xyx真爽| 高清不卡在线观看| 欧美日韩免费一区二区| 91精品视频网| 国产在线二区| 91老司机在线| 香蕉久久网站| 亚洲高清视频免费| 中文字幕欧美一| 11024精品一区二区三区日韩| 在线成人一区二区| 欧美日韩国产网站| 日韩福利视频| 日韩电影在线一区二区| 日本二区在线观看| 91久久线看在观草草青青| 国产小视频免费在线网址| 国产成+人+综合+亚洲欧美丁香花| 亚洲福利网站| 成人三级视频在线播放 | 欧美在线视频你懂得| 成年人视频网站在线| 国产精品女视频| 青草国产精品| 国产福利在线免费| 亚洲免费伊人电影| 黄色av小说在线观看| 韩国视频理论视频久久| 久久中文资源| 欧美日韩激情视频在线观看| 久久蜜臀精品av| 久久精品国产亚洲av麻豆蜜芽| 在线观看成人黄色| 全球中文成人在线| 天天想你在线观看完整版电影免费| 国产成人在线免费观看| 国产大片中文字幕| 亚洲欧美日韩中文在线| 国产精品久久久久77777丨| 伊人色综合久久天天五月婷| 国产伦精品一区二区三区视频青涩| 九九热这里有精品视频| 日韩激情视频在线播放| 日韩在线免费| 一道本在线观看视频| 成人亚洲一区二区一| 精品国产xxx| 精品国产一区二区三区久久久 | 欧洲在线/亚洲| 久久bbxx| 国产一区二区三区无遮挡| 石原莉奈在线亚洲二区| 91香蕉一区二区三区在线观看| 欧美xingq一区二区| 欧美三级网址| www.18av.com| 久久五月婷婷丁香社区| 国产乱子伦精品无码码专区| 97久久超碰福利国产精品…| 成人直播大秀|