1. 程式人生 > >圖解分散式一致性協議Paxos

圖解分散式一致性協議Paxos

Paxos協議/演算法是分散式系統中比較重要的協議,它有多重要呢?

Google Chubby的作者Mike Burrows說過這個世界上只有一種一致性演算法,那就是Paxos,其它的演算法都是殘次品。

理解了這兩個分散式協議之後(Paxos/2PC),學習其他分散式協議會變得相當容易。

學習Paxos演算法有兩部分:a) 演算法的原理/證明;b) 演算法的理解/運作。

理解這個演算法的運作過程其實基本就可以用於工程實踐。而且理解這個過程相對來說也容易得多。

網上我覺得講Paxos講的好的屬於這篇:paxos圖解Paxos演算法詳解,我這裡就結合wiki上的例項進一步闡述。一些paxos基礎通過這裡提到的兩篇文章,以及wiki上的內容基本可以理解。

演算法內容

Paxos在原作者的《Paxos Made Simple》中內容是比較精簡的:

Phase 1

(a) A proposer selects a proposal number n and sends a prepare request with number n to a majority of acceptors.

(b) If an acceptor receives a prepare request with number n greater than that of any prepare request to which it has already responded, then it responds to the request with a promise not to accept any more proposals numbered less than n and with the highest-numbered pro-posal (if any) that it has accepted.

Phase 2

(a) If the proposer receives a response to its prepare requests (numbered n) from a majority of acceptors, then it sends an accept request to each of those acceptors for a proposal numbered n with a value v , where v is the value of the highest-numbered proposal among the responses, or is any value if the responses reported no proposals.

(b) If an acceptor receives an accept request for a proposal numbered n, it accepts the proposal unless it has already responded to a prepare request having a number greater than n.

借用paxos圖解文中的流程圖可概括為:

例項及詳解

Paxos中有三類角色ProposerAcceptorLearner,主要互動過程在ProposerAcceptor之間。

ProposerAcceptor之間的互動主要有4類訊息通訊,如下圖:

這4類訊息對應於paxos演算法的兩個階段4個過程:

  • phase 1
    • a) proposer向網路內超過半數的acceptor傳送prepare訊息
    • b) acceptor正常情況下回復promise訊息
  • phase 2
    • a) 在有足夠多acceptor回覆promise訊息時,proposer傳送accept訊息
    • b) 正常情況下acceptor回覆accepted訊息

因為在整個過程中可能有其他proposer針對同一件事情發出以上請求,所以在每個過程中都會有些特殊情況處理,這也是為了達成一致性所做的事情。如果在整個過程中沒有其他proposer來競爭,那麼這個操作的結果就是確定無異議的。但是如果有其他proposer的話,情況就不一樣了。

paxos中文wiki上的例子為例。簡單來說該例子以若干個議員提議稅收,確定最終通過的法案稅收比例。

以下圖中基本只畫出proposer與一個acceptor的互動。時間標誌T2總是在T1後面。propose number簡稱N。

情況之一如下圖:

A3在T1發出accepted給A1,然後在T2收到A5的prepare,在T3的時候A1才通知A5最終結果(稅率10%)。這裡會有兩種情況:

  • A5發來的N5小於A1發出去的N1,那麼A3直接拒絕(reject)A5
  • A5發來的N5大於A1發出去的N1,那麼A3回覆promise,但帶上A1的(N1, 10%)

這裡可以與paxos流程圖對應起來,更好理解。acceptor會記錄(MaxN, AcceptN, AcceptV)

A5在收到promise後,後續的流程可以順利進行。但是發出accept時,因為收到了(AcceptN, AcceptV),所以會取最大的AcceptN對應的AcceptV,例子中也就是A1的10%作為AcceptV。如果在收到promise時沒有發現有其他已記錄的AcceptV,則其值可以由自己決定。

針對以上A1和A5衝突的情況,最終A1和A5都會廣播接受的值為10%。

其實4個過程中對於acceptor而言,在回覆promise和accepted時由於都可能因為其他proposer的介入而導致特殊處理。所以基本上看在這兩個時間點收到其他proposer的請求時就可以瞭解整個演算法了。例如在回覆promise時則可能因為proposer發來的N不夠大而reject:

如果在發accepted訊息時,對其他更大N的proposer發出過promise,那麼也會reject該proposer發出的accept,如圖:

這個對應於Phase 2 b):

it accepts the proposal unless it has already responded to a prepare request having a number greater than n.

總結

Leslie Lamport沒有用數學描述Paxos,但是他用英文闡述得很清晰。將Paxos的兩個Phase的內容理解清楚,整個演算法過程還是不復雜的。

至於Paxos中一直提到的一個全域性唯一且遞增的proposer number,其如何實現,引用如下:

如何產生唯一的編號呢?在《Paxos made simple》中提到的是讓所有的Proposer都從不相交的資料集合中進行選擇,例如系統有5個Proposer,則可為每一個Proposer分配一個標識j(0~4),則每一個proposer每次提出決議的編號可以為5*i + j(i可以用來表示提出議案的次數)

參考文件

相關推薦

圖解分散式一致性協議Paxos

Paxos協議/演算法是分散式系統中比較重要的協議,它有多重要呢? Google Chubby的作者Mike Burrows說過這個世界上只有一種一致性演算法,那就是Paxos,其它的演算法都是殘次品。 理解了這兩個分散式協議之後(Paxos/2PC),學習其他分散式協議會變得相當容易。 學習P

分散式一致性協議Paxos

轉自:https://blog.csdn.net/qq_35440678/article/details/78080431 什麼是paxos協議? Paxos用於解決分散式系統中一致性問題。分散式一致性演算法(Consensus Algorithm)是一個分散式計算領域的基礎性

圖解分布式一致性協議Paxos

算法 gre 全局 having flow 特殊情況 競爭 set 多重 Paxos協議/算法是分布式系統中比較重要的協議,它有多重要呢? <分布式系統的事務處理>: Google Chubby的作者Mike Burrows說過這個世界上只有一種一致性算法,那

分散式一致性協議Paxos演算法

最近特別喜歡一句話:實踐是最好的成長,發表是最好的記憶。 筆者在今年國慶7天沒有回家,累計有6天的時間是在公司度過,要麼寫部落格,要麼看書。我記得當時寫的關於分散式系統一致性的原理和實踐。作者是倪超。書名《從Paxos到Zookeeper分散式一致性原理與實踐》。當時就想要通過發表Paxos來跟自己做心靈的

使用GO實現Paxos分散式一致性協議

什麼是Paxos分散式一致性協議 最初的服務往往都是通過單體架構對外提供的,即單Server-單Database模式。隨著業務的不斷擴充套件,使用者和請求數都在不斷上升,如何應對大量的請求就成了每個服務都需要解決的問題,這也就是我們常說的高併發。為了解決單臺伺服器面對高併發的蒼白無力,可以通過增加伺服器數量來

分散式一致性協議

為保證分散式系統的高可靠和高可用性,資料在系統中一般儲存多個副本。當某個副本所在的節點出現故障時,分散式系統能夠自動將服務切換到其他的副本,從而實現自動容錯。同一份資料的多個副本中往往有一個副本為主副本,其他為備副本。從一份資料的角度講,主副本所在的節點為主節點,備副本所在的節點為備節點。但在整個系統範圍上看

區塊鏈系列----分散式一致性演算法---Paxos 和 Raft

背景 在一個分散式系統中,如何保證叢集中所有節點中的資料完全相同並且能夠對某個提案(Proposal)達成一致是分散式系統正常工作的核心問題,而共識演算法就是用來保證分散式系統一致性的方法。 然而分散式系統由於引入了多個節點,所以系統中會出現各種非常複雜

分散式一致性paxos演算法

一致性協議 Paxos是一個一致性協議。什麼叫一致性?一致性有很多種,從強到弱分了很多等級,如線性一致性、因果一致性、最終一致性,等等。什麼是一致?這裡舉個例子,三臺機器,每臺機器的磁碟儲存為128位元組,如果三臺機器這128位元組資料都完全相同,那麼可以說這

分散式一致性演算法:paxos

一、背景 分散式系統中存在資料一致性問題,一般可以通過共享記憶體(需要鎖)或者訊息傳遞實現。目前解決此類問題的主流演算法是Paxos 演算法,採用的是訊息傳遞實現。 二、介紹 作為一個基於訊息傳遞的一致性演算法, LeslieLamport 在 1990 年提出,近幾年被廣

分散式一致性協議之2pc

在分散式系統中,每一個機器節點雖然都能夠明確地知道自己在進行事務操作過程中的結果是成功或失敗,但卻無法直接獲取到其他分散式節點的操作結果。因此,當一個事務操作需要跨越多個分散式節點的時候,為了保持事務處理的ACID特性,就需要引人一個稱為“協調者(Coordinator)”的

各大中介軟體底層技術-分散式一致性協議 Raft 詳解

前言 正式介紹 Raft 協議之前,我們先來舉個職場產研團隊的一個例子

《從 PAXOS 到 ZOOKEEPER:分散式一致性原理與實踐》讀書筆記[1]——一致性協議

1 分散式 1.1 定義 分散式系統是一個硬體或軟體元件分佈在不同的網路計算機上,彼此之間僅僅通過訊息傳遞進行通訊和協調的系統 1.2 特點 分佈性、對等性、併發性、缺乏全域性時鐘、故障總是會發生 2 CAP 和 BASE 2.1 CAP CAP 理論:一個分散式系統不可

Paxos到Zookeeper分散式一致性原理與實踐-------------2.一致性協議

1.2PC 2PC就是二段提交協議,簡單來說就是把過程分為兩個階段來處理: 1.提交事務請求       我們假如有A(協調者),B(參與者),C(參與者)三臺伺服器。首先A(協調者)向所有的參與者B和C傳送一個提交事務的請求。然後所有的參與者B和C向A(協

【讀書筆記-從Paxos到ZooKeeper分散式一致性原理與實踐】第二章 一致性協議

2PC與 3PC 在分散式系統中,每個節點都明確知道自己事務操作的成功或失敗,但無法獲取其他分散式節點的操作結果。因此當一個事務需要跨節點進行事務操作時,需要引入協調者(Coordinator)元件來統一排程所有分散式節點的執行邏輯,這些被排程的節點稱為參與者

[從Paxos到ZooKeeper][分布式一致性原理與實踐]<二>一致性協議

邏輯 計算機 二階段提交 是否 組成 原子性 per 缺點 兩種 Overview 在<一>有介紹到,一個分布式系統的架構設計,往往會在系統的可用性和數據一致性之間進行反復的權衡,於是產生了一系列的一致性協議。 為解決分布式一致性問題,在長期的探索過程中,湧現

Zookeeper - 簡述分布式一致性協議(2pc、3pc、paxos、zab)

傳遞 val 其他 中斷 可選 2pc 不一致 操作 nco 分布式一致性協議 二階段提交協議(2pc) 三階段提交協議(3pc) paxos zab 在分布式系統中,每個機器都可以確定自己進行的事務操作是否成功,但是無法直接了解其他機器的操作結果。因此,當一個分布式事

分布式一致性協議介紹(Paxos、Raft)

設置 -s ssi 選擇 參與 follow 初始 red 但是 兩階段提交 Two-phase Commit(2PC):保證一個事務跨越多個節點時保持 ACID 特性; 兩類節點:協調者(Coordinator)和參與者(Participants),協調者只有一個,參與

Paxos到Zookeeper分散式一致性原理與實踐 讀書筆記之(一) 分散式架構

1.1 從集中式到分散式  1 集中式特點  結構簡單,無需考慮對多個節點的部署和節點之間的協作。  2  分散式特點 分不性:在時間可空間上隨意分佈,機器的分佈情況隨時變動 對等性:計算機之間沒有主從之分,所有計算機之間是對等的。副本是分散式系統對資料

分散式學習筆記九:一致性協議

2PC與3PC 在分散式系統中,每一個機器節點雖然都能夠明確地知道自己在進行事務操作過程中的結果是成功或失敗,但卻無法直接獲取到其他分散式節點的操作結果。因此,當一個事務操作需要跨越多個分散式節點的時候,為了保持事務處理的ACID特性,就需要引入一個稱為"協調者(Coordinator)"的元件

分散式應用中的一致性協議

在一個分散式系統中,需要一個規定來保證資料的一致性、各節點服務的容錯性等等,這個規定就是一致性協議。常見的分散式協議有2PC、3PC、Paxos和raft等。 2PC 即Two-Phase Commit,二階段提交。目前大多數的關係型資料庫都是採用2PC協議來完成分散式事務處理的。 執行過程