分布式協(xié)議-兩階段、三階段提交、paxos、raft備份

又?jǐn)]了一遍分布式協(xié)議,準(zhǔn)備自己對(duì)paxos復(fù)盤下,下面是感覺(jué)還不錯(cuò)可以參考的文章, 知識(shí)只能是??闯P铝?。

推薦書:從PAXOS到ZOOKEEPER分布式一致性原理與實(shí)踐

1 文章摘抄


basic paxos一些想法

  • basic paxos一些想法:
    分布式一致性與分布式鎖之間存在差別,例如對(duì)于一個(gè)值同時(shí)發(fā)起兩個(gè)修改,一致性不確保兩個(gè)修改都會(huì)執(zhí)行,執(zhí)行其中任意一個(gè)都是可能的,常見(jiàn)情況是其中一個(gè)返回修改失敗,再次進(jìn)行修改后成功。一致性只保證所有機(jī)器中的值是相等的。其實(shí)在預(yù)決議和最終決議兩個(gè)階段,acceptor的策略是一樣的,同意編號(hào)更大的,proposer的策略也是一樣的,超過(guò)一半同意就執(zhí)行下一步。但是因?yàn)闀r(shí)序問(wèn)題,不同消息到達(dá)acceptor時(shí),acceptor存在不同情況(錯(cuò)位),需要作出一個(gè)能最終達(dá)到一致性的決定,
    優(yōu)先級(jí):更大編號(hào)的最終決議>更小編號(hào)的最終決議>更大編號(hào)的預(yù)決議>更小編號(hào)的預(yù)決議>沒(méi)有預(yù)決議。

作者:樓虎彪
鏈接:https://www.zhihu.com/question/19787937/answer/370367692


提議ID生成算法

image.png

作者:涼拌灰土
原文:https://blog.csdn.net/cnh294141800/article/details/53768464
有的文章這么寫,有的從別的地方直接貼,容易把人看糊涂了。
我說(shuō)下自己的理解,
主要要看m的理解,m應(yīng)該是最新的生成輪次??聪掠?jì)算式子:
s%n=ir ==> s= m*n+ir ==> m=(s-ir)/n, s是已知的,s是當(dāng)前節(jié)點(diǎn)自增值和接收到acceptor的拒絕后所得到的值比較后最大的那個(gè)值,ir是節(jié)點(diǎn)編號(hào),n是當(dāng)前節(jié)點(diǎn)個(gè)數(shù)。注意paxos協(xié)議里面如果acceptor拒絕的話會(huì)回傳最新的值是哪個(gè)proposer提交的,所以這個(gè)例子應(yīng)該這么寫:
例: 以3個(gè)proposer P0、P1、P2為例,開始時(shí)各節(jié)點(diǎn)的初始m=0,編號(hào)分別為0,1,2。

1) P0提交的時(shí)候發(fā)現(xiàn)了P1已經(jīng)提交,P1編號(hào)為1 >P0的0,因此P0重新計(jì)算編號(hào):當(dāng)前最大的s是1,是P1提供的,那最大s對(duì)應(yīng)m的計(jì)算公式是m1=(s1-ir1)/n,即為m=(1-1)/3=0,當(dāng)前節(jié)點(diǎn)m是0,與P0現(xiàn)在的m是相等的,因此m++;那new s0=m*n+ir0 即為1*3+0=3

2) P2以編號(hào)2提交,發(fā)現(xiàn)小于P0的3,因此P2重新編號(hào):當(dāng)前最大的s是P0的3,所以m=(3-0)/3=1;比當(dāng)前節(jié)點(diǎn)的m大,所以當(dāng)前節(jié)點(diǎn)的m需要等于最新的m,那new P2 = 1*3+2 = 5。

這個(gè)算法如果proposer擴(kuò)節(jié)點(diǎn)了怎么整?


paxos協(xié)議的問(wèn)題

  1. 活鎖問(wèn)題。在base-paxos算法中,不存在leader這樣的角色,于是存在這樣一種情況,即P1提交了一個(gè)proposal n1并且通過(guò)了prepare階段;此時(shí)P2提交了一個(gè)proposal n2(n2>n1)并且也通過(guò)了prepare階段;P1在commit時(shí)因?yàn)橐呀?jīng)通過(guò)了n2而被拒絕;于是P1繼續(xù)提交一個(gè)proposal n3并且通過(guò)prepare階段;巧的是此時(shí)P2開始commit了,由于n2<n3再次被拒絕……如此循環(huán)往復(fù)。這種情況被稱為活鎖。即整個(gè)系統(tǒng)都沒(méi)死,但由于互相請(qǐng)求資源而被互相鎖死。為了不發(fā)生活鎖的情況,最簡(jiǎn)單的方式當(dāng)然是縮減proposer到一個(gè),這樣就不會(huì)發(fā)生互相請(qǐng)求鎖死的情況,也即退化。事實(shí)上很多后來(lái)的工業(yè)級(jí)協(xié)議,都是paxos協(xié)議的退化或者變種。

  2. 復(fù)雜度問(wèn)題。base-paxos協(xié)議中還存在這樣那樣的問(wèn)題,于是各種變種paxos出現(xiàn)了,比如為了解決活鎖問(wèn)題,出現(xiàn)了multi-paxos;為了解決通信次數(shù)較多的問(wèn)題,出現(xiàn)了fast-paxos;為了盡量減少?zèng)_突,出現(xiàn)了epaxos??梢钥吹剑I(yè)級(jí)實(shí)現(xiàn)需要考慮更多的方面,諸如性能,異常等等。這也是為啥許多分布式的一致性框架并非真正基于paxos來(lái)實(shí)現(xiàn)的原因。

  3. 全序問(wèn)題。對(duì)于paxos算法來(lái)說(shuō),不能保證兩次提交最終的順序,zab解決了這個(gè)問(wèn)題。

作者:liweisnake
原文:https://blog.csdn.net/liweisnake/article/details/70045164


2 擼了好幾天paxos算法了,按照自己的理解整理下。自己寫了個(gè)流程圖,便于理解吧。

分布式算法.png

3 數(shù)學(xué)歸納法

看了好久也沒(méi)看明白算法的證明,惡補(bǔ)了下數(shù)學(xué)歸納法,高中的知識(shí)已經(jīng)還給老師了。。。。。

按照出題的形式來(lái)吧,一般數(shù)學(xué)歸納法證明的數(shù)學(xué)題都張下面這樣。手寫吧,電腦寫數(shù)學(xué)題還是麻煩。


微信圖片_20190412172811.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容