basic paxos算法:描述的是多個(gè)節(jié)點(diǎn)就某個(gè)值達(dá)成共識(shí)。
muti-paxos 算法:描述的是執(zhí)行多個(gè)basic paxos實(shí)例,就一系列值達(dá)成共識(shí)。
共識(shí)其實(shí),比如當(dāng)多個(gè)客戶端請(qǐng)求服務(wù)器,修改同一個(gè)值X 多個(gè)階段達(dá)成共識(shí)。
原理
角色:提議者、接受者、學(xué)習(xí)者。
提議者 :說白了就是提出一個(gè)值,用于投票表決。
接受者:對(duì)提議者提出的值進(jìn)行投票表決,并存儲(chǔ)對(duì)應(yīng)的值。比如A、B、C三個(gè)節(jié)點(diǎn),參與協(xié)商,并接收和存儲(chǔ)數(shù)據(jù)。
所以一個(gè)節(jié)點(diǎn)即可能是提議者,也可能是接收者,比如對(duì)于一個(gè)集群來說,客戶端發(fā)送請(qǐng)求,當(dāng)一個(gè)節(jié)點(diǎn)接收到請(qǐng)求,就是提議者。
學(xué)習(xí)者:被告知投票的結(jié)果,接收達(dá)成共識(shí)的值,存儲(chǔ)保存,不參與投票的過程。 就是一個(gè)數(shù)據(jù)備份的作用。
提議者代表的是接入和協(xié)調(diào)功能,收到請(qǐng)求后發(fā)起二階段提交,進(jìn)行共識(shí)協(xié)商。
接受者代表投票協(xié)商和存儲(chǔ)數(shù)據(jù),對(duì)提議的值進(jìn)行投票,并接受達(dá)成共識(shí)的值,存儲(chǔ)保存
學(xué)習(xí)者只保存共識(shí)的值,不參與投票
提案編號(hào):每個(gè)提議者需要的一個(gè)編號(hào)。
提案值:需要達(dá)成共識(shí)的數(shù)據(jù)。
準(zhǔn)備階段
假設(shè)客戶端1發(fā)送一個(gè)[1,] 提案編號(hào),請(qǐng)求先達(dá)到節(jié)點(diǎn)A、B,客戶端2發(fā)送提案編號(hào)[5,] 先達(dá)到節(jié)點(diǎn)C。因?yàn)闇?zhǔn)備節(jié)點(diǎn)不需要提議值,寫需要寫到提案編號(hào)就可以了。
整個(gè)處理過程是這樣的。
節(jié)點(diǎn)A、B先收到1的提案編號(hào),并且查看之前沒有提案編號(hào),并承諾以后不響應(yīng)小于等于1的提案編號(hào),不會(huì)通過小于1的提案
節(jié)點(diǎn)c接受到請(qǐng)求后,因?yàn)槭翘岚?到達(dá),所以不響應(yīng)小于等于5的提案編號(hào),不會(huì)通過小于5的提案。
所以整個(gè)過程來說的話,其實(shí)就是針對(duì)節(jié)點(diǎn)A、B 提案編號(hào)1返回了響應(yīng)。節(jié)點(diǎn)C對(duì)于提案編號(hào)5返回了響應(yīng)。然后節(jié)點(diǎn)A、B 對(duì)于提案編號(hào)5返回響應(yīng),因?yàn)?>1。而節(jié)點(diǎn)C針對(duì)提案編號(hào)1 不發(fā)揮響應(yīng)。
接受階段
客戶端 接著發(fā)起接受階段,比如客戶端1發(fā)起的提議值是3,那么就是[1,3] 而客戶端2發(fā)起提議值是7,所以就是 [5,7]。由于有規(guī)則限定,接受者不會(huì)接受比自己小的提案編號(hào)的提議值,所以接受者 A、B、C三個(gè)節(jié)點(diǎn)否決了客戶端1的提議值。而接受了客戶端2的提議值。
所以最終三個(gè)節(jié)點(diǎn)就x=7達(dá)成了共識(shí)。
而basic paxos算法具備一定的容錯(cuò)能力,也就是集群中少于一半以上的節(jié)點(diǎn)出現(xiàn)故障的話,剩余節(jié)點(diǎn)依然可以就某個(gè)值達(dá)成共識(shí)。
小結(jié)
basic paxos是通過二階段提交的方式進(jìn)行達(dá)成共識(shí)的。
basic paxos可以實(shí)現(xiàn)容錯(cuò)能力,少于一半的節(jié)點(diǎn)故障,依然可以工作
提案編號(hào)其實(shí)就代表者優(yōu)先級(jí),
在請(qǐng)求階段,如果接受者不會(huì)返回小于等于已經(jīng)響應(yīng)過的提案編號(hào)。比如請(qǐng)求 1、2,2如果先到達(dá),1就不會(huì)響應(yīng)
在接受階段,如果接受請(qǐng)求的提案的提案編號(hào),小于已經(jīng)響應(yīng)過的提案編號(hào),接受者不會(huì)通過這個(gè)提案
如果接受者之前有通過提案,那么接受者將承諾,會(huì)在準(zhǔn)備請(qǐng)求返回已經(jīng)通過的最大編號(hào)的提案信息文章來源:http://www.zghlxwxcb.cn/news/detail-653989.html
三個(gè)說白了就是我不會(huì)響應(yīng)小于提案編號(hào)。不會(huì)通過已經(jīng)響應(yīng)過的提案值。如果有結(jié)果,那么就不會(huì)在產(chǎn)生新的值。文章來源地址http://www.zghlxwxcb.cn/news/detail-653989.html
到了這里,關(guān)于【分布式共識(shí)算法】Basic Paxos 算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!