分佈式一致性協議,paxos保證安全性和最終一致性安全
找到的最好的一幅圖: 分佈式
每一次提議能夠分爲3個階段:日誌
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在此時發生生故障了了怎麼辦? 進入入下一輪,重複,一直到在某一輪中三階段都順利利結束。