Distributed Systems-leader based分布式一致性协议
上一篇文章推導(dǎo)了基本Paxos算法,并引出了在實(shí)際使用中其存在的問(wèn)題,然后說(shuō)明了leader-based分布式一致算法的優(yōu)勢(shì)。這篇文章分析一下選主的本質(zhì),選出一個(gè)主對(duì)整個(gè)算法的影響,以及采用選主會(huì)存在的問(wèn)題以及基本Paxos協(xié)議是怎么樣保證這些問(wèn)題不會(huì)影響一致性的。
1.為什么選主
至于為什么選主?個(gè)人認(rèn)為有如下原因:
避免并發(fā)決議導(dǎo)致的livelock和新丟失的問(wèn)題
可以采用一定方法在選主時(shí)(raft),選主中或者選主后保證leader上有最新的達(dá)成多數(shù)派(達(dá)成多數(shù)派應(yīng)該用多數(shù)派已經(jīng)將值寫(xiě)入持久化日志來(lái)判定),這樣可以優(yōu)化針對(duì)同一個(gè)項(xiàng)的讀請(qǐng)求,不然每次客戶端讀請(qǐng)求也需要走一遍基本Paxos
選出leader可以保證在一個(gè)leader的統(tǒng)治期間內(nèi)只有這一個(gè)leader可以接收客戶端請(qǐng)求,發(fā)起決議(至于腦裂的問(wèn)題,后面會(huì)分析),
2.不同的選主算法,其本質(zhì)是什么?
前面說(shuō)了在一個(gè)leader統(tǒng)治期間內(nèi),不可能存在多個(gè)leader同時(shí)對(duì)一個(gè)項(xiàng)達(dá)成多數(shù)派(如果一個(gè)leader也沒(méi)有自然滿足,包括腦裂后面會(huì)分析到也是滿足的),但是對(duì)于選主本身來(lái)說(shuō),實(shí)際上其本質(zhì)上就是一個(gè)分布式一致性問(wèn)題,并且可能有多個(gè)proposer并發(fā)提出選主決議,所以可以使用基本Paxos來(lái)解決,這就回到了基本的Paxos算法了!所以我們需要為每次選主決議編號(hào),比如raft算法的term,這個(gè)實(shí)際上就對(duì)應(yīng)基本Paxos算法的proposal id。
3.選主后對(duì)整個(gè)算法造成什么影響?
前面提到了”選出leader可以保證在一個(gè)leader的統(tǒng)治期間內(nèi)只有這一個(gè)leader可以接收客戶端請(qǐng)求,發(fā)起決議”。這樣實(shí)際上基本Paxos的第一階段prepare就沒(méi)有必要了,因?yàn)閷?duì)于下一個(gè)項(xiàng)來(lái)說(shuō),在這個(gè)leader統(tǒng)治期內(nèi),在達(dá)成多數(shù)派之前,不可能有其他人提出決議并達(dá)成多數(shù)派,所以可以直接使用客戶端的值進(jìn)入第二階段accept。
4.選主可能會(huì)導(dǎo)致的問(wèn)題?
最大的問(wèn)題應(yīng)該是腦裂了,也就是說(shuō)可能存在多個(gè)分區(qū)多個(gè)leader接收客戶端響應(yīng),但是由于多數(shù)派的限制,只能最多有一個(gè)分區(qū)能達(dá)成多數(shù)派。我們假設(shè)最簡(jiǎn)單的情況,A/B/C/D/E五臺(tái)機(jī)器,兩個(gè)分區(qū)P1有三臺(tái)A/B/C和P2有兩臺(tái)D/E,那么可能的情況是:
(1).P1有l(wèi)eader;P2沒(méi)有l(wèi)eader
(2).P1有l(wèi)eader;P2也有l(wèi)eader
顯然由于多數(shù)派的限制,只有P1可能達(dá)成決議
5.新的leader選出來(lái)后的操作
一般來(lái)說(shuō),新的leader選出來(lái)后,我們需要對(duì)leader進(jìn)行日志恢復(fù),以便leader決定下一次客戶端請(qǐng)求的時(shí)候該用哪個(gè)日志槽位或者說(shuō)哪個(gè)項(xiàng)吧,這里也是不同的算法差異較大的地方,比如raft,viewstamped replication,zab以及l(fā)amport 《Paxos Made Simple》里面第三節(jié)描述的方法。在lamport論文的描述中,還是采用基本的Paxos,對(duì)未明確知道達(dá)成多數(shù)派的項(xiàng)重新走一遍基本Paxos算法,具體可以參照原論文,細(xì)節(jié)還是挺多。對(duì)于raft來(lái)說(shuō),由于其保證日志是連續(xù)的,且保證在選主的時(shí)候只選擇具有最新的日志的機(jī)器,所以選主之后,新的leader上的日志本身就是最新的。
下一篇會(huì)著重分析在新的leader選舉后,新leader怎么恢復(fù)日志記錄以及怎么確定已提交的日志,這一點(diǎn)還是通過(guò)對(duì)比lamport在《Paxos Made Simple》第三節(jié)提到的方法以及raft中的實(shí)現(xiàn)來(lái)說(shuō)明。
總結(jié)
以上是生活随笔為你收集整理的Distributed Systems-leader based分布式一致性协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux输入法
- 下一篇: 10g TNS 13541 监听错误 t