paxos協議

paxos協議

分佈式一致性協議,paxos保證安全性和最終一致性安全

  • 壞事不會發生:兩個節點不會作出不一樣的決定
  • 好事終會發生:最終達到一致性

找到的最好的一幅圖: image分佈式

每一次提議能夠分爲3個階段:日誌

  • 階段1: 選取一一個leader (Election Phase).
  • 階段2: Leader多播一一個提案數值,其餘節點收到消息後確認。 (Bill Phase).
  • 階段3: Leader多播最終決定。 (Law Phase).

協議過程:

  1. proposer發起提案,提案編號爲K,廣播給全部節點
  2. acceptor節點收到信息後,若是已經存在大於K的接受過的編號N,則忽略,不然,返回已經接受過的提案編號k和值v。
  3. proposer若是收到超過半數的節點的accept,那麼返回accept中k最大的v,若是accept中都爲null,則返回特定v和提案編號K。若是沒有收到超過半數節點的accept,那麼從新發起提案。
  4. accept收到值後,若是已經存在大於K的接受過的編號N,則忽略,不然,回覆ack,並設置接受值爲K,v
  5. 若是收到超過半數的ack,那麼廣播通知提議成功。

概括法證實:

Paxos原命題數學

若是一個提議{n0,v0}被大多數Acceptor接受,那麼不存在提議{n1,v1}被大多數Acceptor接受,其中n0 < n1,v0 != v1。io

Paxos原命題增強im

若是一個提議{n0,v0}被大多數Acceptor接受,那麼不存在Acceptor接受提議{n1,v1},其中n0 < n1,v0 != v1。協議

Paxos原命題進一步增強img

若是一個提議{n0,v0}被大多數Acceptor接受,那麼不存在Proposer發出提議{n1,v1},其中n0 < n1,v0 != v1。語言

若是「Paxos原命題進一步增強」成立,那麼「Paxos原命題」顯然成立。下面咱們經過證實「Paxos原命題進一步增強」,從而證實「Paxos原命題」。論文中是使用數學概括法進行證實的,這裏用比較緊湊的語言從新表述證實過程。集合

概括法證實

假設,提議{m,v}(簡稱提議m)被多數派接受,那麼提議m到n(若是存在)對應的值都爲v,其中n不小於m。

這裏對n進行概括假設,當n = m時,結論顯然成立。

設n = k時結論成立,即若是提議{m,v}被多數派接受,

那麼提議m到k對應的值都爲v,其中k不小於m。

當n = k+1時,若提議k+1不存在,那麼結論成立。

若提議k+1存在,對應的值爲v1,

由於提議m已經被多數派接受,又k+1的Prepare被多數派承諾並返回結果。

基於兩個多數派必有交集,易知提議k+1的第一階段B有帶提議回來。

那麼v1是從返回的提議中選出來的,不妨設這個值是選自提議{t,v1}。

根據第二階段B,由於t是返回的提議中編號最大,因此t >= m。

又由第一階段A,知道t < k + 1,t <= k,而根據假設,{k,v}已是被接受的了,這個v是從k最大的值中接受的,也就是從{t,v1}接受的。因此根據假設t對應的值爲v。

即有v1 = v。因此由n = k結論成立,能夠推出n = k+1成立。

因而對於任意的提議編號不小於m的提議n,對應的值都爲v。

因此命題成立。那麼v1是從返回的提議中選出來的,不妨設這個值是選自提議{t,v1}。

根據第二階段B,由於t是返回的提議中編號最大,因此t >= m。

又由第一階段A,知道t < k + 1,t <= k,而根據假設,{k,v}已是被接受的了,這個v是從k最大的值中接受的,也就是從{t,v1}接受的。因此根據假設t對應的值爲v。

即有v1 = v。因此由n = k結論成立,能夠推出n = k+1成立。

因而對於任意的提議編號不小於m的提議n,對應的值都爲v。

因此命題成立。

一致性達成

什麼時間點能夠認爲已經達成一致性,系統不可能再更改決定值了呢?

當超過一半的節點收到階段2中的消息時,可認爲已經達成一致決定值。此刻,節點自本身己可能並不不知道,可是最終決定值實際上已經肯定了了:即便leader也可能在此刻還不不知道。 若是leader在此時發生生故障了了怎麼辦? 進入入下一輪,重複,一直到在某一輪中三階段都順利利結束。

節點故障:

  • 過半數的集合不不包含該節點。
  • 節點重啓時,經過讀取本地日日誌了了解以前的信息,獲取以前可能已經作出的決定值和輪 數id。

Leader故障時

  • 啓動新一輪

消息丟失

  • 若是過於古怪,啓動新一輪
  • 任何節點在任什麼時候間均可以啓動新的一輪Paxos。
  • Paxos協議可能永遠運行下去不中止 —— 你的運氣氣不好
  • 不不保證活動,只能是最終活性:運氣氣好的話能夠最終達成一致。
相關文章
相關標籤/搜索