精品欧美一区二区三区在线观看 _久久久久国色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)

人妻偷人精品一区二区三区| 亚洲乱妇老熟女爽到高潮的片| 国产色a在线| 蜜臀av亚洲一区中文字幕| 亚洲一区第一页| 色一情一区二区| bl视频在线免费观看| 久久婷婷久久一区二区三区| 成人国产精品日本在线| 国产精品自拍视频一区| 精品国精品国产自在久国产应用| 国内精品写真在线观看| 久久av红桃一区二区小说| 亚洲成人福利视频| 亚洲承认视频| 一区二区三区加勒比av| 欧美日韩在线观看一区二区三区 | 欧美日韩播放| 91精品婷婷国产综合久久性色| 亚洲熟妇无码另类久久久| 日韩av中文| 91麻豆免费看| 爱情岛论坛亚洲入口| 中文字幕一区二区人妻视频| 午夜精品毛片| 亚洲少妇激情视频| 亚洲天堂av网站| 日韩一区二区三区四区五区| 日韩欧美国产免费播放| 免费观看亚洲视频| 婷婷在线视频观看| 久久综合九色综合欧美98| 高清国产在线一区| 国产精品九九九九| 视频一区视频二区中文字幕| 国内精品视频久久| 老湿机69福利| 久久影院一区| 影音先锋欧美精品| 97伦伦午夜电影理伦片| 成人午夜大片| 日韩欧美一区二区三区在线| 亚洲精品综合在线观看| 欧美精品资源| 色av一区二区| 日韩中文字幕二区| 成av人片在线观看www| 一区二区三区美女视频| 中国 免费 av| 黄色免费网站在线观看| 中文一区在线播放| 视频一区视频二区视频三区高| 日产精品久久久久久久性色| 99视频精品在线| 国产一区再线| 天天摸夜夜添狠狠添婷婷| 成人h精品动漫一区二区三区| av一区二区三区在线观看| 亚洲性视频网址| 欧美日韩一区二区三区在线看| 欧美日韩在线观看一区二区三区| 天天av综合网| 成人18视频日本| 国产亚洲精品美女久久久m| 亚洲精品第五页| 成人动漫中文字幕| 久久国产精品 国产精品| 少妇精品高潮欲妇又嫩中文字幕| av激情亚洲男人天堂| 国产综合动作在线观看| 日本私人网站在线观看| 久久精品一区二区三区不卡| 亚洲ai欧洲av| 黄av在线播放| 亚洲一二三四在线| 男人用嘴添女人下身免费视频| 樱花草涩涩www在线播放| 一本大道久久a久久综合| 天天插天天操天天射| 国产国产一区| 波多野结衣一区二区三区免费视频| 手机在线免费观看av| 成人深夜在线观看| 好吊色欧美一区二区三区| 性插视频在线观看| 国产欧美精品在线观看| 中文字幕一区综合| 黄色在线看片| 在线一区二区三区四区| 亚洲黄色av片| 久本草在线中文字幕亚洲| 亚洲欧洲高清在线| 国产又色又爽又高潮免费| 欧美午夜影院| 国产aaa精品| 国产一区二区波多野结衣| 成人激情免费电影网址| 日本不卡在线观看| a级影片在线观看| 欧美日韩久久久久| 日韩av片专区| 婷婷综合一区| 久久亚洲精品网站| 污污的网站18| 成人做爽爽免费视频| www黄色av| 欧美成人三级| 亚洲成人免费网站| 超薄肉色丝袜一二三| 欧美久久一级| 国产精品第二页| 自拍偷拍18p| 成人国产一区| 日韩一区二区三免费高清| 久久久久9999| 亚洲国产精品综合久久久| 国产91精品高潮白浆喷水| 国产成人精品毛片| 欧美激情在线免费观看| 亚洲人成无码网站久久99热国产 | 色噜噜狠狠一区二区三区狼国成人| 国产精品毛片久久久| 中文字幕亚洲一区在线观看| 一级片免费网址| 国产麻豆精品久久一二三| 欧美一区二区高清在线观看| 岛国片av在线| 欧美顶级少妇做爰| 国产精品密蕾丝袜| 亚洲国产婷婷| 草莓视频一区| 黄色av电影在线播放| 欧美视频在线一区| 亚洲欧美国产制服动漫| 欧美激情第三页| 日本网站在线免费观看| 国产自产高清不卡| 日韩av电影在线观看| 国产精选在线| 精品久久久久久久人人人人传媒| 五月天免费网站| 奇米精品一区二区三区四区| 欧美精品欧美精品系列c| 免费在线国产视频| 日韩一区二区三区视频在线观看| 免费黄色国产视频| 日韩高清不卡在线| 神马欧美一区二区| 电影一区二区| 综合网中文字幕| 日批视频免费观看| 日本一区二区三区免费乱视频| 国产二区视频在线播放| 欧美日韩另类图片| 97在线免费视频| 天堂资源最新在线| 色天天综合久久久久综合片| 黄色aaa视频| 免费高清完整在线观看| 国产九九在线| 国产日韩欧美亚洲| 国产成人亚洲精品无码h在线| 国产精品自在| 91av视频在线观看| 三级av在线播放| 色综合夜色一区| 亚洲图片第一页| 精品一区二区三区在线观看| 亚洲av综合色区| 风间由美一区二区av101 | 国产一区二区在线观看免费播放| av资源在线看片| 精品爽片免费看久久| 伊人久久久久久久久久久久| 国产精品久久久久三级| 午夜激情视频网| 亚洲精品裸体| 日本一区美女| 色综合视频一区二区三区日韩| 日韩视频免费观看| 亚洲av无码一区二区乱子伦 | 久久综合九色综合欧美98| 久久久久久草| 国精产品一区一区三区四川| 色小说视频一区| 国产www视频| 岛国av一区二区三区| 五月婷婷欧美激情| 国产精品一区二区无线| 国产精品自拍片| 久久伦理在线| 国产精品欧美久久| 亚洲不卡系列| 欧美精品一区二区三区国产精品| 性xxxx搡xxxxx搡欧美| 欧美日韩另类一区| 久久精品一区二区三| 久久综合狠狠综合久久综合88| 欧美女同在线观看| 激情欧美日韩| 午夜精品区一区二区三| 亚洲不卡在线| 国产精品第一区| 国产美女情趣调教h一区二区| 亚洲性生活视频在线观看| 精品人妻无码一区二区三区蜜桃一| 欧美黄色录像| 97久久超碰精品国产| 欧美成人精品欧美一级乱| 五月精品视频| 日韩精品福利视频| 91精品日本| 国产精品无av码在线观看| 黄色漫画在线免费看| 在线视频免费一区二区| 色婷婷在线视频| 91精品国产综合久久久久久| 成人公开免费视频| 亚洲风情在线资源站| 一级性生活免费视频| 久久久99精品免费观看| 国产精品成人99一区无码| 狠狠色伊人亚洲综合成人| 草草久久久无码国产专区| 中文字幕一区二区精品区| 亚洲第一在线综合在线| 亚洲人成网站77777在线观看| 岛国一区二区三区高清视频| 国产精品久久久久久久久久辛辛| 国产成人高清激情视频在线观看| a'aaa级片在线观看| 欧美大尺度在线观看| 欧美极品视频| 中文字幕亚洲在线| 黄色美女网站在线观看| 日韩电影免费观看在线观看| 国精产品乱码一区一区三区四区| 欧美一区二区在线观看| 一区二区久久精品66国产精品 | 国产乱码精品1区2区3区| 男女视频在线看| 久久综合导航| 99蜜桃臀久久久欧美精品网站| 亚洲在线免费| 男人天堂网视频| 免费视频一区二区三区在线观看| 免费在线观看视频a| 精品动漫一区| 欧美视频在线观看网站 | 欧美成人黑人猛交| 久久不射网站| 无码人妻丰满熟妇区毛片| 久久久天天操| 成人免费在线观看视频网站| 日韩不卡一区二区| 精品亚洲一区二区三区四区| 美女网站一区二区| 在线观看免费不卡av| 久久66热re国产| 一区二区三区国产好的精华液| 国产原创一区二区| 女同性αv亚洲女同志| 成人av网站在线观看| 天堂久久久久久| 久久精品在这里| 国产一二三av| 亚洲精品va在线观看| 久久精品久久国产| 欧美视频中文在线看| 免费看污视频的网站| 欧美人与z0zoxxxx视频| 国产黄色av片| 日韩电视剧在线观看免费网站| 国产高清视频免费最新在线| 中文字幕在线日韩| 综合图区亚洲| 2019亚洲男人天堂| 日韩电影免费观看高清完整版| 国产精品偷伦视频免费观看国产 | 国模精品视频| 国产精品18久久久久久麻辣| 久久麻豆视频| 国产伦视频一区二区三区| 神马香蕉久久| 一区二区在线观看网站| 亚洲午夜一区| 国产wwwxx| 成人亚洲一区二区一| 国产毛片久久久久久久| 亚洲激情图片小说视频| www欧美在线| 制服丝袜中文字幕亚洲| 性感美女福利视频| 久久综合电影一区| 阿v视频在线| 国内精品写真在线观看| 精品乱人伦小说| 青青草综合视频| 日本亚洲色大成网站www久久| 国产成人综合在线观看| 亚洲天堂成人av| 亚洲视频小说图片| 综合激情网五月| 欧美一区二区三区免费观看视频| 一本色道久久综合精品婷婷| 免费在线观看一区二区三区| 国产探花在线观看视频| 91蜜桃免费观看视频| 性欧美videos| 在线免费观看日本一区| www.亚洲天堂.com| 中文字幕亚洲一区| 午夜久久中文| 成人免费视频视频在| 日韩免费特黄一二三区| 国产亚洲欧美在线视频| 国产精品一区二区在线观看不卡| 国产一区二区三区精品在线| 午夜一区二区三区在线观看| 97在线视频人妻无码| 尤物精品国产第一福利三区| 蜜桃av在线播放| 国产传媒欧美日韩| 一级毛片免费高清中文字幕久久网| 欧美在线观看成人| 成人在线综合网| 老女人性淫交视频| 欧美日本在线观看| 国产福利第一视频在线播放| 欧美一级视频一区二区| 国产亚洲成av人片在线观黄桃| 51xx午夜影福利| 经典三级在线一区| 四虎成人免费影院| 欧美在线观看视频一区二区 | 天堂电影一区| 国产精品一区免费观看| 欧美三级第一页| 99国产精品免费视频| 亚洲视频在线一区二区| 91精品国产乱码久久久| 中文字幕亚洲欧美| 九七电影院97理论片久久tvb| 日韩欧美在线电影| 日韩福利电影在线观看| 国产精品www爽爽爽| 欧美手机在线视频| 秋霞午夜在线观看| 成人信息集中地欧美| 亚洲91中文字幕无线码三区| 亚洲18在线看污www麻豆| 1区2区3区国产精品| 亚洲一区二区人妻| 日韩视频第一页| 免费看一区二区三区| 草草草视频在线观看| 成人免费高清在线| 天天操天天摸天天干| 日韩精品在线私人| 高清电影一区| 亚洲精品久久久久久一区二区| 美国欧美日韩国产在线播放| 欧美做爰啪啪xxxⅹ性| 日韩视频在线观看一区二区| 国产网红女主播精品视频| 久久久亚洲综合网站| 日本欧美加勒比视频| 99久久久无码国产精品不卡| 91精品国产一区二区人妖| 国产91足控脚交在线观看| 精品欧美一区二区久久久伦| 视频一区二区三区在线| 天堂网中文在线观看| 日韩欧美国产小视频| 美女网站在线看| 亚洲综合首页| 成人黄页毛片网站| 久久久精品毛片| 久久综合免费视频| 国产精品毛片av| 亚洲欧洲日本精品| 亚洲国产成人av网| 国产在线三区| 97久久天天综合色天天综合色hd| 99在线观看免费视频精品观看| 中文字幕成人动漫| 日韩一区二区三区四区五区六区| 亚洲第一av| 婷婷视频在线播放| 99国内精品久久| 亚洲天堂视频网| 777精品视频| 亚洲精品888| 免费在线观看污| 日韩欧美精品在线视频| 欧美magnet| 天堂а√在线中文在线| 欧美国产精品一区二区三区| 亚洲a视频在线观看| 国产精品普通话|