1. Basic Paxos
1.1 經(jīng)典Basic Paxos
映照到現(xiàn)實(shí)世界中的問(wèn)題就是要保證消息可靠,需要將消息交代給多個(gè)人奠旺,
理論證明這里不再贅述
只有弄懂這套機(jī)制的正確性邊界厦幅,才能在工程中靈活使用
1.2 Acceptor的承諾
- accepor可以多次接受提案沾鳄,acceptor響應(yīng)prepare的請(qǐng)求要如實(shí)上報(bào)accept_proposal和accept_value并更新min_proposal
- 如果acceptor作弊未更新min_proposal,可能出現(xiàn)兩個(gè)proposer prepare成功并且accept成功确憨,這樣后面的accept把前面的chosen覆蓋掉了
- 如果acceptor作弊未返回accept_proposal和accept_value那么可能造成已經(jīng)chosen的value被重新修改
從這里可以看出Acceptor肯定不能作弊
1.3 Proposer的承諾
- Proposer Prepare階段發(fā)現(xiàn)的值一定要處理译荞,決不能視而不見(jiàn)
- Proposer Prepare階段未形成majority決不能發(fā)Accept
- Proposer Prepare majority成功,未發(fā)現(xiàn)任何accept_value說(shuō)明此時(shí)一定還未形成chosen的value
- Proposer Prepare majority成功休弃,并發(fā)現(xiàn)一致的accept_value(accept_proposal相同)說(shuō)明此時(shí)一定形成了chosen的value
- Proposer Prepare majority成功磁椒,發(fā)現(xiàn)還未一致的accept_value,此時(shí)accept未決玫芦,需要繼續(xù)看其他節(jié)點(diǎn)
- Proposer Prepare 全部節(jié)點(diǎn)成功浆熔,發(fā)現(xiàn)majority一致的accept_value,說(shuō)明此時(shí)形成了chosen的value
- Proposer Prepare 全部節(jié)點(diǎn)成功桥帆,未發(fā)現(xiàn)majority一致的accept_value医增,說(shuō)明此時(shí)一定未形成chosen的value,可以繼續(xù)提議新值老虫,或者執(zhí)行rollback
- Proposer Prepare的epoch值必須要遞增唯一否則會(huì)出現(xiàn)嚴(yán)重錯(cuò)誤
1.4 核心
要正確實(shí)現(xiàn)Paxos協(xié)議就要嚴(yán)格遵守這些正確性邊界
1.5 Flexible Basic Paxos
Prepare階段和Accept階段要求有交集即可叶骨,不一定非要兩個(gè)都是多數(shù)派,比如4副本情況
可以設(shè)置 Prepare的quorum為3 Accept的Quorum為2
也可以設(shè)置Prepare的quorum為2 Accept的Quorum為3
2 工程
2.1 multi-paxos
Multi-paxos大部分應(yīng)用場(chǎng)景就是數(shù)據(jù)流祈匙,既然是數(shù)據(jù)流傳輸忽刽,其實(shí)相關(guān)優(yōu)化都可以在tcp滑動(dòng)窗口上找到相應(yīng)點(diǎn),滑動(dòng)窗口中存儲(chǔ)的就是value:
https://www.zhihu.com/question/57321934
multi-paxos組和instance的區(qū)別夺欲?性能跪帝?并行提交+并行apply
2.2 作用域
Paxos可以作用于單個(gè)對(duì)象/chunk 甚至更整個(gè)系統(tǒng)
2.3 asymmetric Paxos
- support seal semantics
- support rollback semantics
rollback的安全行為問(wèn)題的核心在于prepare階段是否已經(jīng)能夠阻擋住之前的accept形成quorum
2.4 Raft安全性
leader上任要先寫一條noop的entry,但是可能部分成功
對(duì)于非對(duì)稱結(jié)構(gòu)(不是等價(jià)的數(shù)據(jù)副本)S1在(c)場(chǎng)景下不能輕易通過(guò)復(fù)制index 2的日志(比如EC模式下)
此時(shí)S1需要聯(lián)系更多的節(jié)點(diǎn)來(lái)確認(rèn)這條日志可以安全rollback