一、Raft是一種相對(duì)簡(jiǎn)化的分布式一致性算法,它由Diego Ongaro和John Ousterhout于2013年提出。與Paxos相比,Raft的設(shè)計(jì)目標(biāo)是使一致性問題更易于理解、實(shí)現(xiàn)和部署。
Raft協(xié)議核心思想是將一致性問題分解為幾個(gè)關(guān)鍵組件,包括領(lǐng)導(dǎo)者選舉、日志復(fù)制和安全性。
-
領(lǐng)導(dǎo)者選舉:Raft協(xié)議通過選舉一個(gè)節(jié)點(diǎn)作為領(lǐng)導(dǎo)者來協(xié)調(diào)整個(gè)系統(tǒng)的操作。每個(gè)節(jié)點(diǎn)在初始狀態(tài)下都是跟隨者(Follower)。跟隨者只負(fù)責(zé)接收來自領(lǐng)導(dǎo)者或候選者的指令,并進(jìn)行相應(yīng)的操作。如果跟隨者在一段時(shí)間內(nèi)沒有接收到領(lǐng)導(dǎo)者的心跳信號(hào),則會(huì)觸發(fā)新的選舉過程。選舉過程中,節(jié)點(diǎn)會(huì)轉(zhuǎn)變?yōu)楹蜻x者(Candidate),并向其他節(jié)點(diǎn)發(fā)送投票請(qǐng)求。如果候選者得到多數(shù)節(jié)點(diǎn)的支持,則成為新的領(lǐng)導(dǎo)者。
-
日志復(fù)制:一旦選出領(lǐng)導(dǎo)者,它就負(fù)責(zé)接收客戶端的操作請(qǐng)求并將其轉(zhuǎn)換為日志條目(Log Entries)。領(lǐng)導(dǎo)者將這些日志條目廣播給其他節(jié)點(diǎn),并要求它們復(fù)制這些條目以保持一致性。當(dāng)大多數(shù)節(jié)點(diǎn)(大致上半數(shù)以上)確認(rèn)復(fù)制成功后,領(lǐng)導(dǎo)者將該日志條目提交(Commit),并將結(jié)果應(yīng)用于狀態(tài)機(jī)。然后領(lǐng)導(dǎo)者通知其他節(jié)點(diǎn)該日志已經(jīng)提交,其他節(jié)點(diǎn)也可以將其應(yīng)用到狀態(tài)機(jī)上。這樣,整個(gè)系統(tǒng)就保持了數(shù)據(jù)的一致性。
-
安全性:Raft協(xié)議通過限制領(lǐng)導(dǎo)者的行為來確保安全性。領(lǐng)導(dǎo)者在向其他節(jié)點(diǎn)發(fā)送日志條目之前,必須等待大多數(shù)節(jié)點(diǎn)(包括自身)確認(rèn)前一條日志已經(jīng)復(fù)制成功。這樣可以防止過期的領(lǐng)導(dǎo)者覆蓋了新的日志條目。如果領(lǐng)導(dǎo)者失效,系統(tǒng)會(huì)觸發(fā)新的選舉過程,確保選出新的領(lǐng)導(dǎo)者。
總體而言,Raft算法的設(shè)計(jì)相對(duì)清晰,并且易于理解和實(shí)現(xiàn)。它提供了領(lǐng)導(dǎo)者選舉、日志復(fù)制和安全性等基本機(jī)制,以實(shí)現(xiàn)分布式系統(tǒng)中的一致性。由于其簡(jiǎn)單性和可理解性,Raft被廣泛用于構(gòu)建可靠的分布式系統(tǒng)。
二、Paxos協(xié)議是一種分布式一致性協(xié)議,由Leslie Lamport于1990年提出。它被廣泛應(yīng)用于分布式系統(tǒng)中,用于解決在異步網(wǎng)絡(luò)環(huán)境下的一致性問題。
Paxos協(xié)議的核心思想是通過多個(gè)階段的消息傳遞和投票來達(dá)成一致。以下是Paxos協(xié)議的基本流程:
-
階段一:準(zhǔn)備(Prepare)
- 提議者(Proposer)選擇一個(gè)提案號(hào)(Proposal Number),并向多個(gè)接受者(Acceptor)發(fā)送準(zhǔn)備請(qǐng)求。
- 接受者收到準(zhǔn)備請(qǐng)求后,如果收到的提案號(hào)大于等于之前的最高提案號(hào),則接受者返回一個(gè)承諾(Promise),其中包含接受者之前接受的最高提案號(hào)及其對(duì)應(yīng)的提案值。
- 如果接受者已經(jīng)接受了某個(gè)提案,則將該提案的提案號(hào)及其對(duì)應(yīng)的提案值作為返回承諾的一部分。
-
階段二:接受(Accept)
- 如果提議者收到了大多數(shù)接受者返回的承諾,則提議者可以發(fā)送接受請(qǐng)求。
- 接受請(qǐng)求中包含提議者選擇的提案號(hào)以及根據(jù)收到的承諾確定的提案值。
- 接受者收到接受請(qǐng)求后,如果接受者收到的提案號(hào)大于等于之前承諾的最高提案號(hào),則接受請(qǐng)求,并返回一個(gè)接受回復(fù)(Accepted)。
- 如果接受者接受了某個(gè)提案,則將接受回復(fù)中的提案號(hào)及其對(duì)應(yīng)的提案值記為當(dāng)前接受的提案。
-
階段三:學(xué)習(xí)(Learn)文章來源:http://www.zghlxwxcb.cn/news/detail-605560.html
- 當(dāng)提議者收到大多數(shù)接受者返回的接受回復(fù)后,提議者知道自己的提案已經(jīng)被大多數(shù)節(jié)點(diǎn)接受。
- 提議者可以發(fā)送學(xué)習(xí)請(qǐng)求(Learn Request)來廣播已經(jīng)被接受的提案。
- 接受者收到學(xué)習(xí)請(qǐng)求后,將保存該提案并告知其他節(jié)點(diǎn)。
Paxos協(xié)議通過階段一和階段二的消息傳遞和投票過程,保證了在異步網(wǎng)絡(luò)環(huán)境下的一致性。協(xié)議要求提議者需要得到大多數(shù)接受者的確認(rèn)才能繼續(xù)推進(jìn),以確保系統(tǒng)的一致性。文章來源地址http://www.zghlxwxcb.cn/news/detail-605560.html
到了這里,關(guān)于分布式協(xié)議Raft和Paxos詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!