国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

分布式一致性算法——Paxos 和 Raft 算法

這篇具有很好參考價(jià)值的文章主要介紹了分布式一致性算法——Paxos 和 Raft 算法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

寫在前面

本文隸屬于專欄《100個(gè)問題搞定大數(shù)據(jù)理論體系》,該專欄為筆者原創(chuàng),引用請(qǐng)注明來源,不足和錯(cuò)誤之處請(qǐng)?jiān)谠u(píng)論區(qū)幫忙指出,謝謝!

本專欄目錄結(jié)構(gòu)和參考文獻(xiàn)請(qǐng)見100個(gè)問題搞定大數(shù)據(jù)理論體系

I. 簡(jiǎn)介

介紹Paxos和Raft算法

Paxos和Raft算法都是分布式一致性算法,它們的目的都是在一個(gè)分布式系統(tǒng)中保證數(shù)據(jù)的一致性

在一個(gè)分布式系統(tǒng)中,由于各個(gè)節(jié)點(diǎn)之間的網(wǎng)絡(luò)延遲、節(jié)點(diǎn)故障等原因,數(shù)據(jù)同步可能會(huì)出現(xiàn)問題,這時(shí)候就需要使用一致性算法來保證數(shù)據(jù)的一致性。

Paxos算法是由Leslie Lamport在1998年提出的,它是一種經(jīng)典的分布式一致性算法。Paxos算法使用的是一個(gè)基于消息傳遞的算法,它通過在不同的階段進(jìn)行消息傳遞來達(dá)成一致性。Paxos算法的基本流程包括:提議者(Proposer)向多個(gè)接受者(Acceptor)發(fā)起提議,接受者對(duì)提議進(jìn)行投票,并將投票結(jié)果告知提議者,最終提議者根據(jù)接受者的投票結(jié)果確定一個(gè)值。

Raft算法是由Diego Ongaro和John Ousterhout在2013年提出的,它是一種相對(duì)較新的分布式一致性算法。Raft算法是一種更易于理解和實(shí)現(xiàn)的算法,它的基本思路是將分布式系統(tǒng)的狀態(tài)機(jī)復(fù)制到多個(gè)節(jié)點(diǎn)上,然后使用選舉機(jī)制來選出一個(gè)主節(jié)點(diǎn)來處理所有的客戶端請(qǐng)求。在Raft算法中,主節(jié)點(diǎn)負(fù)責(zé)接收客戶端請(qǐng)求,并將請(qǐng)求復(fù)制到其他節(jié)點(diǎn)上,從而保證了數(shù)據(jù)的一致性。

雖然Paxos和Raft算法在實(shí)現(xiàn)細(xì)節(jié)上有所不同,但它們都是為了保證分布式系統(tǒng)的一致性而設(shè)計(jì)的算法。在實(shí)際應(yīng)用中,選擇哪個(gè)算法取決于系統(tǒng)的具體需求和約束條件。

為什么需要分布式一致性算法?

在分布式系統(tǒng)中,多個(gè)節(jié)點(diǎn)通過網(wǎng)絡(luò)相互連接,共同協(xié)作來處理數(shù)據(jù)或提供服務(wù)。然而,由于網(wǎng)絡(luò)延遲、節(jié)點(diǎn)故障、消息丟失等原因,節(jié)點(diǎn)之間可能會(huì)出現(xiàn)不同步的情況,導(dǎo)致數(shù)據(jù)不一致或服務(wù)不可用。

分布式一致性算法的目的就是為了解決這些問題,確保在分布式系統(tǒng)中的多個(gè)節(jié)點(diǎn)之間保持?jǐn)?shù)據(jù)一致性和服務(wù)可用性。

分布式一致性算法主要用于以下情形:

  • 數(shù)據(jù)庫:分布式數(shù)據(jù)庫是現(xiàn)代應(yīng)用程序的核心。在分布式數(shù)據(jù)庫中,每個(gè)節(jié)點(diǎn)都有自己的副本,而每次更新都需要確保副本之間的數(shù)據(jù)一致性。
  • 分布式存儲(chǔ):在分布式存儲(chǔ)系統(tǒng)中,數(shù)據(jù)通常被分割成許多塊,并存儲(chǔ)在多個(gè)節(jié)點(diǎn)上。為了確保數(shù)據(jù)的一致性,需要使用分布式一致性算法來確保各節(jié)點(diǎn)上的數(shù)據(jù)副本保持同步。
  • 分布式計(jì)算:分布式計(jì)算是指將一個(gè)大型計(jì)算任務(wù)分解成許多小任務(wù),并在多個(gè)節(jié)點(diǎn)上并行執(zhí)行。分布式一致性算法可以確保各個(gè)節(jié)點(diǎn)上的結(jié)果與整個(gè)任務(wù)的結(jié)果一致。
    總之,分布式一致性算法是確保分布式系統(tǒng)數(shù)據(jù)一致性和服務(wù)可用性的重要工具。

II. Paxos算法

算法基本原理

Paxos算法是一種經(jīng)典的分布式一致性算法,它是通過一系列的消息傳遞協(xié)議來實(shí)現(xiàn)一致性的。其基本原理可以概括為以下三個(gè)階段:

  • 準(zhǔn)備階段(Prepare Phase):在這個(gè)階段中,提議者向多個(gè)接受者發(fā)出提議,并請(qǐng)求接受者給出他們的投票。同時(shí),提議者也會(huì)得到接受者的最新編號(hào)和值,用于在下一步中做出決策。
  • 提交階段(Commit Phase):在這個(gè)階段中,提議者根據(jù)接受者的投票結(jié)果做出決策,將自己的提議提交給接受者。如果大多數(shù)接受者都同意該提議,那么這個(gè)提議就會(huì)被選定為值。
  • 學(xué)習(xí)階段(Learn Phase):在這個(gè)階段中,選定的值將被通知給所有的節(jié)點(diǎn),以確保所有節(jié)點(diǎn)的值都是一致的。

Paxos算法的關(guān)鍵在于它如何確保一致性

在準(zhǔn)備階段,提議者向多個(gè)接受者發(fā)送提議,并要求它們給出它們的最新編號(hào)和值。只有當(dāng)大多數(shù)接受者響應(yīng)并返回自己的最新編號(hào)和值時(shí),提議者才可以進(jìn)入提交階段。這個(gè)過程保證了大多數(shù)接受者在同步自己的狀態(tài)后才會(huì)同意提議,從而保證了決策的一致性。

Paxos算法的實(shí)現(xiàn)相對(duì)較為復(fù)雜,但是它是一種經(jīng)典的分布式一致性算法,具有廣泛的應(yīng)用前景。例如,在分布式數(shù)據(jù)庫、分布式存儲(chǔ)系統(tǒng)和分布式計(jì)算等領(lǐng)域,Paxos算法都是一個(gè)重要的基礎(chǔ)工具。

paxos raft,大數(shù)據(jù)理論體系,分布式,大數(shù)據(jù),paxos,raft

上圖描述了Paxos算法的基本過程,其中Proposer表示提議者,Acceptor表示接受者。整個(gè)過程可以概括為以下三個(gè)步驟:

  • 提議者向接受者發(fā)送準(zhǔn)備請(qǐng)求(Prepare),接受者在回復(fù)消息時(shí),攜帶自己的最新編號(hào)和值(Promise)。
  • 提議者根據(jù)接受者的響應(yīng),決定是否提交自己的提議,并向接受者發(fā)送提交請(qǐng)求(Accept)。
  • 接受者根據(jù)提議者的提交請(qǐng)求,進(jìn)行決策,如果大多數(shù)接受者同意該提議,那么這個(gè)提議就會(huì)被選定為值(Accepted)。

角色和狀態(tài)

在Paxos算法中,有三種角色:提議者(Proposer)、接受者(Acceptor)和學(xué)習(xí)者(Learner),它們各自扮演著不同的角色。同時(shí),每個(gè)節(jié)點(diǎn)都有一個(gè)狀態(tài)機(jī),狀態(tài)機(jī)包括以下狀態(tài):

  • 未決定狀態(tài)(Undecided State):當(dāng)一個(gè)節(jié)點(diǎn)剛剛啟動(dòng)時(shí),它的狀態(tài)是未決定狀態(tài),即還沒有決定值的狀態(tài)。
  • 準(zhǔn)備狀態(tài)(Prepare State):當(dāng)一個(gè)節(jié)點(diǎn)接收到來自提議者的準(zhǔn)備請(qǐng)求時(shí),它會(huì)進(jìn)入準(zhǔn)備狀態(tài),并回復(fù)一個(gè)Promise消息。
  • 提交狀態(tài)(Accept State):當(dāng)一個(gè)節(jié)點(diǎn)接收到來自提議者的提交請(qǐng)求時(shí),如果它已經(jīng)收到了更高的提案,那么它會(huì)拒絕請(qǐng)求。否則,它會(huì)進(jìn)入提交狀態(tài),并將Accepted消息發(fā)送給提議者。
  • 決定狀態(tài)(Decide State):當(dāng)一個(gè)節(jié)點(diǎn)收到大多數(shù)節(jié)點(diǎn)的Accepted消息時(shí),它會(huì)進(jìn)入決定狀態(tài),并決定要提交的值。

以上狀態(tài)在不同的節(jié)點(diǎn)上可能會(huì)出現(xiàn)不同的情況,根據(jù)算法執(zhí)行的過程不斷地變化。例如,在一個(gè)提議者節(jié)點(diǎn)上,它的狀態(tài)機(jī)可能會(huì)從未決定狀態(tài)到準(zhǔn)備狀態(tài),然后到提交狀態(tài),最終進(jìn)入決定狀態(tài)。在接受者節(jié)點(diǎn)上,它的狀態(tài)機(jī)可能會(huì)從未決定狀態(tài)到準(zhǔn)備狀態(tài),然后再到提交狀態(tài),但不會(huì)進(jìn)入決定狀態(tài)。學(xué)習(xí)者節(jié)點(diǎn)只有一個(gè)狀態(tài):已學(xué)習(xí)狀態(tài),即已學(xué)習(xí)到值的狀態(tài)。

總的來說,Paxos算法的角色和狀態(tài)相對(duì)較為復(fù)雜,但是通過清晰地定義每個(gè)角色的職責(zé)和狀態(tài)的變化過程,可以更加有效地理解和實(shí)現(xiàn)Paxos算法。

基本流程

Paxos算法的基本流程包括以下幾個(gè)步驟:

paxos raft,大數(shù)據(jù)理論體系,分布式,大數(shù)據(jù),paxos,raft

Proposer 為提議者,Acceptor 為接受者,Learner 為學(xué)習(xí)者。箭頭表示消息的發(fā)送和接收方向。可以看到,Paxos 算法的基本流程就是提議者向接受者發(fā)送準(zhǔn)備請(qǐng)求、提交請(qǐng)求,然后接收者回復(fù)Promise、Accepted消息,最后提議者將最終值發(fā)送給所有學(xué)習(xí)者。

  1. 提議者向接受者發(fā)送準(zhǔn)備請(qǐng)求(Prepare)。準(zhǔn)備請(qǐng)求包括一個(gè)提案編號(hào)(Proposal Number),它是一個(gè)唯一的、單調(diào)遞增的編號(hào),用于標(biāo)識(shí)提議的版本號(hào)。接受者收到準(zhǔn)備請(qǐng)求后,會(huì)檢查提案編號(hào)是否比自己已經(jīng)接受的提案編號(hào)更大,如果更大,那么接受者將自己已經(jīng)接受的提案編號(hào)和對(duì)應(yīng)的值(如果有的話)回復(fù)給提議者。否則,接受者忽略該請(qǐng)求。
  2. 如果提議者收到了大多數(shù)接受者的回復(fù),那么它就可以繼續(xù)進(jìn)行下一步操作。接著,提議者向接受者發(fā)送提交請(qǐng)求(Accept)。提交請(qǐng)求包括一個(gè)提案編號(hào)和一個(gè)值(Value)。如果接受者沒有收到更高的提案,那么它會(huì)接受這個(gè)值,并將Accepted消息發(fā)送給提議者。
  3. 如果提議者收到了大多數(shù)接受者的Accepted消息,那么它就可以將該提案決定為最終值(Decided),并將最終值發(fā)送給所有的學(xué)習(xí)者(Learner)。此時(shí),所有的學(xué)習(xí)者都會(huì)接收到相同的最終值,并將其保存。

需要注意的是,如果在任何時(shí)刻提議者發(fā)現(xiàn)自己的提案被其他提議者打敗,那么它就需要放棄自己的提案,重新開始一個(gè)新的提案流程。另外,Paxos算法中還有一些優(yōu)化和擴(kuò)展的技巧,例如Fast Paxos、Multi-Paxos等,這些技巧可以進(jìn)一步提高算法的性能和可靠性。

使用 Paxos 算法來選舉

Paxos算法本身并沒有選舉的過程,因?yàn)樗且环N完全分布式的協(xié)議,沒有中心節(jié)點(diǎn)。但是,在某些應(yīng)用場(chǎng)景下,比如使用Paxos實(shí)現(xiàn)分布式鎖或領(lǐng)導(dǎo)者選舉,就需要在Paxos協(xié)議的基礎(chǔ)上擴(kuò)展出一些選舉算法。

在分布式系統(tǒng)中,選舉通常用于選出一個(gè)領(lǐng)導(dǎo)者(Leader)來負(fù)責(zé)協(xié)調(diào)整個(gè)集群的工作。選舉算法的目標(biāo)是使得每個(gè)節(jié)點(diǎn)都能同意一個(gè)唯一的領(lǐng)導(dǎo)者,而且當(dāng)領(lǐng)導(dǎo)者失效時(shí),能夠快速地重新選舉出一個(gè)新的領(lǐng)導(dǎo)者。

Paxos算法實(shí)現(xiàn)選舉的一種常見方式是,將所有節(jié)點(diǎn)分為兩類:候選者(Candidate)和投票者(Voter)。在每個(gè)選舉周期內(nèi),所有候選者都可以向投票者發(fā)送選舉請(qǐng)求,并且每個(gè)投票者只能投票給一個(gè)候選者。在投票完成后,候選者可以根據(jù)得票情況決定是否成為領(lǐng)導(dǎo)者,如果得票數(shù)超過半數(shù),則成為領(lǐng)導(dǎo)者。如果得票數(shù)沒有達(dá)到半數(shù),那么就需要進(jìn)行新一輪的選舉。

具體的選舉流程如下:

  1. 所有候選者向投票者發(fā)送選舉請(qǐng)求,請(qǐng)求中包括候選者的編號(hào)和任期號(hào)(Term)。候選者的任期號(hào)是單調(diào)遞增的,每次選舉的任期號(hào)都比上一次大。
  2. 投票者收到選舉請(qǐng)求后,如果自己沒有投票給其他候選者,那么就可以投票給這個(gè)候選者,并回復(fù)投票響應(yīng)(Vote Response)。投票響應(yīng)包括投票者的編號(hào)、候選者的編號(hào)和任期號(hào)。如果投票者已經(jīng)投票給了其他候選者,那么就忽略該請(qǐng)求。
  3. 候選者收到投票響應(yīng)后,可以根據(jù)得票情況決定是否成為領(lǐng)導(dǎo)者。如果一個(gè)候選者收到了超過半數(shù)的投票,那么它就可以成為領(lǐng)導(dǎo)者,向其他節(jié)點(diǎn)發(fā)送心跳包,維持自己的領(lǐng)導(dǎo)地位。否則,它就需要開始新一輪的選舉,提升自己的任期號(hào),重新向其他節(jié)點(diǎn)發(fā)送選舉請(qǐng)求。

需要注意的是,選舉過程可能會(huì)出現(xiàn)腦裂(Split-Brain)的情況,即網(wǎng)絡(luò)故障或節(jié)點(diǎn)故障導(dǎo)致集群分裂成兩個(gè)或多個(gè)子集群,每個(gè)子集群都選舉出了自己的領(lǐng)導(dǎo)者。為了避免這種情況,通常需要引入一些機(jī)制,如超時(shí)機(jī)制或者仲裁節(jié)點(diǎn)機(jī)制,來確保集群最終只有一個(gè)領(lǐng)導(dǎo)者。

超時(shí)機(jī)制是指在每個(gè)節(jié)點(diǎn)上設(shè)置一個(gè)隨機(jī)的超時(shí)時(shí)間,如果一個(gè)節(jié)點(diǎn)在規(guī)定的時(shí)間內(nèi)沒有收到心跳包或者選舉請(qǐng)求,那么就認(rèn)為當(dāng)前的任期已經(jīng)過期,需要重新開始選舉。這樣可以確保在出現(xiàn)網(wǎng)絡(luò)分裂時(shí),每個(gè)子集群最終只會(huì)選舉出一個(gè)領(lǐng)導(dǎo)者。

仲裁節(jié)點(diǎn)機(jī)制是指在集群中引入一個(gè)專門的仲裁節(jié)點(diǎn)(Arbiter),用于處理集群分裂的情況。當(dāng)集群分裂成多個(gè)子集群時(shí),每個(gè)子集群都可以選舉出自己的領(lǐng)導(dǎo)者,但是只有仲裁節(jié)點(diǎn)可以決定哪個(gè)領(lǐng)導(dǎo)者是有效的。仲裁節(jié)點(diǎn)會(huì)定期向每個(gè)子集群發(fā)送心跳包,檢查每個(gè)領(lǐng)導(dǎo)者是否還在工作,如果發(fā)現(xiàn)某個(gè)領(lǐng)導(dǎo)者失效了,那么就會(huì)通知其他節(jié)點(diǎn)重新進(jìn)行選舉。這種方式需要引入額外的仲裁節(jié)點(diǎn),增加了系統(tǒng)的復(fù)雜度,但是可以提高系統(tǒng)的可用性和容錯(cuò)性。

總之,Paxos算法本身并沒有選舉的過程,但是在一些應(yīng)用場(chǎng)景下需要擴(kuò)展出選舉算法,以保證分布式系統(tǒng)的可用性和一致性。選舉過程可以利用Paxos協(xié)議的基本流程和狀態(tài)機(jī)模型來實(shí)現(xiàn),但是需要引入一些機(jī)制來解決腦裂問題,確保最終只有一個(gè)領(lǐng)導(dǎo)者。

由于Paxos算法選舉過程比較復(fù)雜,需要多個(gè)狀態(tài)和角色之間的相互作用,因此可以使用狀態(tài)機(jī)來描述。下面是一個(gè)簡(jiǎn)化的狀態(tài)機(jī)圖,描述了Paxos算法的選舉過程:

paxos raft,大數(shù)據(jù)理論體系,分布式,大數(shù)據(jù),paxos,raft

上述狀態(tài)機(jī)圖中包含了以下狀態(tài)和角色:

  • LOOKING: Follower的初始狀態(tài),表示當(dāng)前節(jié)點(diǎn)正在尋找一個(gè)leader,等待leader的心跳包;
  • PRE_CANDIDATE: Follower進(jìn)入該狀態(tài)后會(huì)嘗試發(fā)起選舉,成為Candidate,向其他節(jié)點(diǎn)發(fā)送投票請(qǐng)求;
  • CANDIDATE: 當(dāng)前節(jié)點(diǎn)成為Candidate,等待其他節(jié)點(diǎn)投票,如果收到足夠的票數(shù),就會(huì)成為L(zhǎng)eader;
  • LEADER: 當(dāng)前節(jié)點(diǎn)成為L(zhǎng)eader后,會(huì)向其他節(jié)點(diǎn)發(fā)送心跳包以保持自己的領(lǐng)導(dǎo)地位;
  • FOLLOWING: 當(dāng)前節(jié)點(diǎn)成為Follower后,會(huì)等待Leader的心跳包并響應(yīng)。

其中,節(jié)點(diǎn)之間的通信是通過appendEntries和vote兩種消息實(shí)現(xiàn)的。在選舉過程中,如果Candidate收到了來自某個(gè)節(jié)點(diǎn)的appendEntries消息,那么該節(jié)點(diǎn)就會(huì)轉(zhuǎn)變?yōu)镕ollower狀態(tài),開始跟隨新的Leader。如果一個(gè)節(jié)點(diǎn)收到了來自Candidate或Leader的vote消息,那么它就會(huì)根據(jù)一定的規(guī)則進(jìn)行投票,并回復(fù)vote消息告訴發(fā)送者自己的投票結(jié)果。

在狀態(tài)機(jī)圖中,箭頭表示狀態(tài)之間的轉(zhuǎn)移條件,其中超時(shí)是主要的轉(zhuǎn)移條件之一,因?yàn)镻axos算法選舉過程中必須引入超時(shí)機(jī)制以避免出現(xiàn)死鎖或者長(zhǎng)時(shí)間的等待。如果當(dāng)前節(jié)點(diǎn)在規(guī)定時(shí)間內(nèi)沒有收到心跳包或者其他消息,就會(huì)觸發(fā)超時(shí)事件,進(jìn)入下一個(gè)狀態(tài)。

總之,Paxos算法選舉過程中的狀態(tài)機(jī)可以幫助我們更好地理解節(jié)點(diǎn)之間的交互過程和角色的轉(zhuǎn)換關(guān)系,從而更好地理解Paxos算法的本質(zhì)和設(shè)計(jì)思想。

細(xì)節(jié)優(yōu)化

除了上面描述的基本狀態(tài)轉(zhuǎn)移,Paxos算法的選舉過程還包含了一些細(xì)節(jié)和優(yōu)化,例如:

  • 防止重復(fù)選舉:在某個(gè)節(jié)點(diǎn)成為L(zhǎng)eader之后,它會(huì)向其他節(jié)點(diǎn)發(fā)送心跳包,這些心跳包中包含了該節(jié)點(diǎn)的當(dāng)前任期編號(hào),其他節(jié)點(diǎn)會(huì)根據(jù)任期編號(hào)來判斷當(dāng)前的Leader是否有效,避免了因?yàn)榫W(wǎng)絡(luò)延遲等原因?qū)е碌闹貜?fù)選舉。
  • 防止"split vote"問題:在Paxos算法中,如果多個(gè)Candidate同時(shí)發(fā)起選舉,可能會(huì)導(dǎo)致投票分散,導(dǎo)致沒有一個(gè)Candidate獲得足夠的票數(shù)。為了解決這個(gè)問題,Paxos算法采用了隨機(jī)化的機(jī)制,在Candidate發(fā)起選舉之前,先生成一個(gè)隨機(jī)數(shù)作為自己的"選票編號(hào)",這樣可以保證在多個(gè)Candidate同時(shí)發(fā)起選舉的情況下,最終只會(huì)有一個(gè)Candidate獲勝。
  • 快速選舉:在Paxos算法中,選舉過程需要經(jīng)過多輪投票,如果每輪投票的超時(shí)時(shí)間都很長(zhǎng),那么選舉過程的時(shí)間會(huì)很長(zhǎng)。為了加快選舉速度,Paxos算法引入了"快速選舉"機(jī)制,即如果Candidate收到了足夠多的投票,那么就可以直接成為L(zhǎng)eader,而不需要等待完整的投票流程。這種機(jī)制能夠在網(wǎng)絡(luò)環(huán)境較好的情況下,顯著縮短選舉時(shí)間。

總之,Paxos算法的選舉過程比較復(fù)雜,需要考慮多種情況,例如網(wǎng)絡(luò)延遲、節(jié)點(diǎn)故障、重復(fù)選舉等等。只有在各種異常情況下都能夠正常工作,才能保證Paxos算法的一致性和可靠性。

Paxos的優(yōu)缺點(diǎn)

Paxos 算法作為分布式一致性算法中的代表之一,具有以下優(yōu)點(diǎn)和缺點(diǎn):

優(yōu)點(diǎn):

  • 可擴(kuò)展性:Paxos 算法在節(jié)點(diǎn)數(shù)量增加時(shí),其性能不會(huì)有較大的下降,能夠保證在高負(fù)載情況下也能正常運(yùn)行。
  • 容錯(cuò)性:Paxos 算法能夠在節(jié)點(diǎn)出現(xiàn)故障、網(wǎng)絡(luò)分區(qū)等情況下依然能夠保證系統(tǒng)的正常運(yùn)行。
  • 一致性:Paxos 算法能夠保證分布式系統(tǒng)中數(shù)據(jù)的一致性,確保了節(jié)點(diǎn)間的數(shù)據(jù)同步。

缺點(diǎn):

  • 實(shí)現(xiàn)難度:Paxos 算法本身的實(shí)現(xiàn)相對(duì)復(fù)雜,需要對(duì)分布式系統(tǒng)和網(wǎng)絡(luò)通信有一定的了解,因此對(duì)于一些沒有分布式經(jīng)驗(yàn)的開發(fā)者來說,實(shí)現(xiàn)起來比較困難。
  • 性能開銷:Paxos 算法需要進(jìn)行多次消息傳遞和狀態(tài)同步,因此在一些對(duì)性能有較高要求的系統(tǒng)中,Paxos 算法可能會(huì)成為性能瓶頸。
  • 高延遲:Paxos 算法需要進(jìn)行多輪的消息傳遞和狀態(tài)同步,因此會(huì)導(dǎo)致較高的延遲,不適用于對(duì)延遲要求較高的場(chǎng)景。

III. Raft算法

算法基本原理

Raft 算法是一種分布式一致性算法,旨在通過將復(fù)制狀態(tài)機(jī)的問題分解為幾個(gè)相對(duì)較小的子問題,以更好地理解和實(shí)現(xiàn)分布式一致性。

Raft 算法的基本原理可以歸納為以下三個(gè)方面:

  1. 領(lǐng)導(dǎo)者選舉:Raft 算法采用領(lǐng)導(dǎo)者選舉的方式來保證系統(tǒng)的正常運(yùn)行。在 Raft 算法中,節(jié)點(diǎn)可以處于三種狀態(tài)之一:跟隨者、候選者和領(lǐng)導(dǎo)者。當(dāng)一個(gè)節(jié)點(diǎn)成為領(lǐng)導(dǎo)者時(shí),它負(fù)責(zé)向其他節(jié)點(diǎn)發(fā)送心跳信號(hào),并協(xié)調(diào)處理客戶端請(qǐng)求。在領(lǐng)導(dǎo)者選舉過程中,節(jié)點(diǎn)通過相互投票來選舉領(lǐng)導(dǎo)者,每個(gè)節(jié)點(diǎn)只能投票一次。
  2. 日志復(fù)制:Raft 算法通過在每個(gè)節(jié)點(diǎn)上維護(hù)一個(gè)完整的日志來保證系統(tǒng)的數(shù)據(jù)一致性。當(dāng)客戶端向領(lǐng)導(dǎo)者發(fā)送請(qǐng)求時(shí),領(lǐng)導(dǎo)者將該請(qǐng)求附加到其日志中,并將該日志條目復(fù)制到其他節(jié)點(diǎn)。只有當(dāng)大多數(shù)節(jié)點(diǎn)確認(rèn)接收到該日志條目時(shí),該日志條目才被視為已提交。
  3. 安全性:Raft 算法通過使用隨機(jī)超時(shí)來觸發(fā)領(lǐng)導(dǎo)者選舉,以確保系統(tǒng)能夠容忍故障節(jié)點(diǎn)。此外,Raft 算法還使用逐步復(fù)制機(jī)制來確保所有節(jié)點(diǎn)上的日志條目是相同的,并且使用日志復(fù)制的全序化來確保所有節(jié)點(diǎn)執(zhí)行的操作順序相同。

通過上述三個(gè)方面的設(shè)計(jì),Raft 算法能夠保證分布式系統(tǒng)的一致性和可用性,并且易于理解和實(shí)現(xiàn)。

角色和狀態(tài)

Raft 算法中,節(jié)點(diǎn)可以處于三種狀態(tài)之一:跟隨者(Follower)、候選者(Candidate)和領(lǐng)導(dǎo)者(Leader)。

每個(gè)節(jié)點(diǎn)的狀態(tài)會(huì)在不同的情況下進(jìn)行轉(zhuǎn)換。

  • 跟隨者(Follower):節(jié)點(diǎn)初始狀態(tài)為跟隨者,接受來自領(lǐng)導(dǎo)者的指令,如果在超時(shí)時(shí)間內(nèi)沒有收到領(lǐng)導(dǎo)者的心跳信號(hào)或者候選者的選舉請(qǐng)求,則節(jié)點(diǎn)將成為候選者。
  • 候選者(Candidate):如果節(jié)點(diǎn)成為候選者,則它將開始一次新的選舉,并將自己提升為候選者狀態(tài)。在此狀態(tài)下,節(jié)點(diǎn)將請(qǐng)求其他節(jié)點(diǎn)投票支持,它的選舉計(jì)數(shù)器會(huì)自增,同時(shí)它會(huì)將自己的信息廣播到其他節(jié)點(diǎn)。如果一個(gè)候選者獲得了超過半數(shù)的投票,則該候選者將成為領(lǐng)導(dǎo)者。
  • 領(lǐng)導(dǎo)者(Leader):如果一個(gè)候選者成功地成為領(lǐng)導(dǎo)者,則它將向所有跟隨者發(fā)送心跳信號(hào),以保持它們的狀態(tài)與其自身的狀態(tài)同步。領(lǐng)導(dǎo)者還將接收客戶端的請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)換成日志條目并復(fù)制到所有節(jié)點(diǎn)中。如果一個(gè)跟隨者的心跳超時(shí),它會(huì)開始一次新的選舉并變?yōu)楹蜻x者狀態(tài)。

通過這些狀態(tài)的轉(zhuǎn)換,Raft 算法可以保證系統(tǒng)的一致性和可用性,并且能夠自動(dòng)進(jìn)行節(jié)點(diǎn)的切換和重新選舉,以應(yīng)對(duì)各種可能的故障情況。

基本流程

paxos raft,大數(shù)據(jù)理論體系,分布式,大數(shù)據(jù),paxos,raft

上述圖形描述了 Raft 算法的基本流程,包括從跟隨者(Follower)狀態(tài)到候選者(Candidate)狀態(tài),再到領(lǐng)導(dǎo)者(Leader)狀態(tài)的轉(zhuǎn)換,以及領(lǐng)導(dǎo)者向跟隨者發(fā)送心跳信號(hào)和客戶端請(qǐng)求的處理過程,最終日志條目被提交并應(yīng)用到狀態(tài)機(jī)中。

Raft 算法的基本流程如下:

  1. 節(jié)點(diǎn)初始狀態(tài)為跟隨者(Follower),等待接收來自領(lǐng)導(dǎo)者的心跳信號(hào)或者候選者的選舉請(qǐng)求。
  2. 如果跟隨者在超時(shí)時(shí)間內(nèi)沒有收到領(lǐng)導(dǎo)者的心跳信號(hào)或者候選者的選舉請(qǐng)求,則節(jié)點(diǎn)將成為候選者(Candidate)。
  3. 候選者開始一次新的選舉,并將自己提升為候選者狀態(tài)。在此狀態(tài)下,節(jié)點(diǎn)將請(qǐng)求其他節(jié)點(diǎn)投票支持,它的選舉計(jì)數(shù)器會(huì)自增,同時(shí)它會(huì)將自己的信息廣播到其他節(jié)點(diǎn)。
  4. 如果一個(gè)候選者獲得了超過半數(shù)的投票,則該候選者將成為領(lǐng)導(dǎo)者(Leader)。
  5. 領(lǐng)導(dǎo)者向所有跟隨者發(fā)送心跳信號(hào),以保持它們的狀態(tài)與其自身的狀態(tài)同步。領(lǐng)導(dǎo)者還將接收客戶端的請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)換成日志條目并復(fù)制到所有節(jié)點(diǎn)中。
  6. 如果一個(gè)跟隨者的心跳超時(shí),它會(huì)開始一次新的選舉并變?yōu)楹蜻x者狀態(tài),重復(fù)上述步驟。

Raft 算法通過這種基本流程實(shí)現(xiàn)了分布式系統(tǒng)中的一致性和容錯(cuò)性,同時(shí)具備良好的可讀性和可理解性,方便開發(fā)人員進(jìn)行調(diào)試和維護(hù)。

選舉過程

Raft 的選舉過程分為以下幾個(gè)步驟:

  1. 節(jié)點(diǎn)變?yōu)楹蜻x者狀態(tài);
  2. 候選者向其他節(jié)點(diǎn)發(fā)送請(qǐng)求投票的 RPC(RequestVote RPC);
  3. 其他節(jié)點(diǎn)根據(jù)自身的情況,判斷是否投票給候選者;
  4. 候選者根據(jù)收到的投票數(shù),決定是否變?yōu)轭I(lǐng)導(dǎo)者。

以下是具體的過程:

  1. 節(jié)點(diǎn)變?yōu)楹蜻x者狀態(tài)
    當(dāng)一個(gè)節(jié)點(diǎn)在選舉超時(shí)時(shí)間內(nèi)沒有收到來自領(lǐng)導(dǎo)者的心跳信號(hào)時(shí),該節(jié)點(diǎn)將會(huì)變?yōu)楹蜻x者狀態(tài),這時(shí)節(jié)點(diǎn)會(huì)自增當(dāng)前的任期號(hào),并給自己投一票,向其他節(jié)點(diǎn)發(fā)送投票請(qǐng)求。
  2. 候選者向其他節(jié)點(diǎn)發(fā)送請(qǐng)求投票的 RPC
    候選者在發(fā)送投票請(qǐng)求的 RPC 時(shí),會(huì)包含以下信息:
  • 當(dāng)前任期號(hào);
  • 候選者的 ID;
  • 最后一條日志條目的索引值和任期號(hào)。
  1. 其他節(jié)點(diǎn)根據(jù)自身的情況,判斷是否投票給候選者
    收到請(qǐng)求投票的節(jié)點(diǎn)會(huì)根據(jù)以下情況進(jìn)行投票:
  • 如果收到的請(qǐng)求的任期號(hào)小于當(dāng)前節(jié)點(diǎn)的任期號(hào),則拒絕投票;
  • 如果當(dāng)前節(jié)點(diǎn)已經(jīng)投票給了其他候選者,則拒絕投票;
  • 如果候選者的日志信息不夠新,則拒絕投票;
  • 否則投票給候選者。
  1. 候選者根據(jù)收到的投票數(shù),決定是否變?yōu)轭I(lǐng)導(dǎo)者

如果候選者收到了大多數(shù)節(jié)點(diǎn)的投票,則認(rèn)為自己被選為了領(lǐng)導(dǎo)者,此時(shí)會(huì)向其他節(jié)點(diǎn)發(fā)送成為領(lǐng)導(dǎo)者的消息。如果候選者在等待投票結(jié)果的過程中,收到了其他節(jié)點(diǎn)成為領(lǐng)導(dǎo)者的消息,則自己會(huì)重新變?yōu)楦S者狀態(tài)。

如果候選者在等待投票結(jié)果的過程中,沒有收到足夠的投票數(shù),則會(huì)重新進(jìn)入跟隨者狀態(tài),并且重置選舉超時(shí)時(shí)間。重新進(jìn)入跟隨者狀態(tài)之后,節(jié)點(diǎn)會(huì)接收來自其他節(jié)點(diǎn)的心跳信號(hào)。如果節(jié)點(diǎn)在選舉超時(shí)時(shí)間內(nèi)沒有收到心跳信號(hào),則會(huì)再次成為候選者狀態(tài),重復(fù)以上流程。

paxos raft,大數(shù)據(jù)理論體系,分布式,大數(shù)據(jù),paxos,raft

在 Raft 的選舉過程中,節(jié)點(diǎn)會(huì)根據(jù)收到的消息轉(zhuǎn)移狀態(tài)。當(dāng)節(jié)點(diǎn)未收到 Leader 的心跳或候選人的投票請(qǐng)求時(shí),它會(huì)保持跟隨者狀態(tài)。當(dāng)收到候選人的投票請(qǐng)求時(shí),它會(huì)轉(zhuǎn)變成候選人狀態(tài),并發(fā)送投票請(qǐng)求。如果收到多數(shù)選票,它會(huì)轉(zhuǎn)變成領(lǐng)導(dǎo)者狀態(tài)。如果在投票期間收到 Leader 的心跳,則節(jié)點(diǎn)將重置選舉超時(shí)并返回跟隨者狀態(tài)。如果在投票期間未能收到多數(shù)選票,則節(jié)點(diǎn)將返回跟隨者狀態(tài)。如果節(jié)點(diǎn)在投票期間收到來自其他候選人的心跳,則它將轉(zhuǎn)換為投票狀態(tài),并發(fā)送一張選票。如果在投票期間收到多數(shù)選票,則節(jié)點(diǎn)將轉(zhuǎn)換為領(lǐng)導(dǎo)者狀態(tài)。在領(lǐng)導(dǎo)者狀態(tài)下,節(jié)點(diǎn)會(huì)定期向其他節(jié)點(diǎn)發(fā)送心跳以保持其領(lǐng)導(dǎo)地位。

Raft 的優(yōu)缺點(diǎn)

Raft 算法相對(duì)于 Paxos 算法來說,更容易理解和實(shí)現(xiàn)。同時(shí),Raft 算法也具有以下的優(yōu)點(diǎn):

優(yōu)點(diǎn):

  • 更易于理解和實(shí)現(xiàn):Raft 算法將復(fù)雜的一致性問題分解為多個(gè)子問題,使得每個(gè)子問題都相對(duì)簡(jiǎn)單,更容易理解和實(shí)現(xiàn)。
  • 更好的可讀性和可維護(hù)性:Raft 算法的模塊化設(shè)計(jì)和清晰的角色劃分,使得代碼更易于維護(hù)和擴(kuò)展。
  • 更好的性能:Raft 算法在網(wǎng)絡(luò)分區(qū)發(fā)生時(shí),可以保證至少有一個(gè)節(jié)點(diǎn)可以處理客戶端請(qǐng)求,因此具有更好的可用性。
  • 更快的恢復(fù)速度:Raft 算法在發(fā)生網(wǎng)絡(luò)分區(qū)后,可以快速恢復(fù)正常運(yùn)行,而不需要等待所有節(jié)點(diǎn)都恢復(fù)正常。

缺點(diǎn):

  • 選舉過程可能導(dǎo)致性能問題:Raft 算法的選舉過程可能會(huì)導(dǎo)致性能問題,因?yàn)楫?dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)或節(jié)點(diǎn)崩潰時(shí),需要重新選舉新的領(lǐng)導(dǎo)者。
  • 需要更多的節(jié)點(diǎn):相對(duì)于 Paxos 算法來說,Raft 算法需要更多的節(jié)點(diǎn)才能達(dá)到同樣的容錯(cuò)性能。
  • 不適用于大規(guī)模分布式系統(tǒng):在大規(guī)模分布式系統(tǒng)中,Raft 算法的選舉過程可能會(huì)導(dǎo)致網(wǎng)絡(luò)負(fù)載過高,因此不適用于大規(guī)模分布式系統(tǒng)。

IV. Paxos vs Raft

相似之處

Paxos和Raft都是用于實(shí)現(xiàn)分布式系統(tǒng)中的一致性算法,兩者的目標(biāo)都是要讓多個(gè)節(jié)點(diǎn)之間達(dá)成一致的狀態(tài)。它們的相似之處包括:

  • 兩者都使用了一個(gè)類似于“領(lǐng)導(dǎo)人”的角色,這個(gè)角色負(fù)責(zé)協(xié)調(diào)其他節(jié)點(diǎn)的操作,保證整個(gè)系統(tǒng)達(dá)成一致的狀態(tài)。
  • 兩者都實(shí)現(xiàn)了多個(gè)節(jié)點(diǎn)之間的選舉過程,保證了整個(gè)系統(tǒng)在某些節(jié)點(diǎn)宕機(jī)或者失聯(lián)的情況下仍然能夠正常運(yùn)行。
  • 兩者都能夠處理節(jié)點(diǎn)之間的網(wǎng)絡(luò)延遲和丟包等問題,保證了整個(gè)系統(tǒng)的可靠性。
  • 兩者都采用了日志復(fù)制的機(jī)制,保證了多個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)一致性。

因此,Paxos和Raft算法在解決分布式系統(tǒng)一致性問題上有很多相似之處。

區(qū)別之處

Paxos和Raft雖然都是用于實(shí)現(xiàn)分布式系統(tǒng)中的一致性算法,但是它們之間也存在一些區(qū)別,包括以下幾點(diǎn):

  1. 算法難度不同:Paxos算法比較復(fù)雜,理解起來比較困難,而Raft算法則相對(duì)來說更加簡(jiǎn)單,容易理解。
  2. 日志復(fù)制的方式不同:Paxos算法采用的是多數(shù)派決策的方式,即當(dāng)多數(shù)派節(jié)點(diǎn)接收到相同的決策時(shí),就將這個(gè)決策寫入到自己的日志中;而Raft算法采用的是領(lǐng)導(dǎo)人方式,即由領(lǐng)導(dǎo)人負(fù)責(zé)將日志復(fù)制到所有的節(jié)點(diǎn)中。
  3. 領(lǐng)導(dǎo)人選舉機(jī)制不同:Paxos算法中的領(lǐng)導(dǎo)人是由所有節(jié)點(diǎn)共同決定的,而Raft算法中的領(lǐng)導(dǎo)人則是通過選舉產(chǎn)生的。
  4. 數(shù)據(jù)同步方式不同:Paxos算法中的數(shù)據(jù)同步是異步的,即當(dāng)一個(gè)節(jié)點(diǎn)提交了一個(gè)請(qǐng)求后,不需要等待其他節(jié)點(diǎn)的回應(yīng);而Raft算法則是同步的,即當(dāng)一個(gè)節(jié)點(diǎn)提交了一個(gè)請(qǐng)求后,需要等待大多數(shù)節(jié)點(diǎn)的回應(yīng)后才能繼續(xù)執(zhí)行下一個(gè)操作。
  5. 可擴(kuò)展性不同:Paxos算法在實(shí)際應(yīng)用中難以擴(kuò)展,而Raft算法相對(duì)來說更容易擴(kuò)展。

綜上所述,雖然Paxos和Raft算法都是用于解決分布式系統(tǒng)中的一致性問題,但是它們?cè)趯?shí)現(xiàn)細(xì)節(jié)、可擴(kuò)展性、算法難度等方面存在一定的差異。

何時(shí)選擇哪個(gè)算法

選擇Paxos還是Raft算法,取決于具體應(yīng)用的需求和限制。

Paxos算法在一些極端的情況下可以保證達(dá)成一致,但是其實(shí)現(xiàn)較為復(fù)雜,學(xué)習(xí)曲線較陡峭。因此,對(duì)于一些對(duì)一致性要求較高、可以接受較為復(fù)雜的系統(tǒng),選擇Paxos算法會(huì)更加合適。

Raft算法的實(shí)現(xiàn)相對(duì)簡(jiǎn)單,易于理解和部署。因此,對(duì)于那些對(duì)一致性要求不是特別高、但是要求系統(tǒng)可用性和可靠性的應(yīng)用,選擇Raft算法是一種不錯(cuò)的選擇。

同時(shí),實(shí)際應(yīng)用中,還可以考慮各種場(chǎng)景下的不同需求和約束條件,根據(jù)具體情況進(jìn)行選擇和調(diào)整。文章來源地址http://www.zghlxwxcb.cn/news/detail-808440.html

到了這里,關(guān)于分布式一致性算法——Paxos 和 Raft 算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 分布式系統(tǒng)中的那些一致性(CAP、BASE、2PC、3PC、Paxos、ZAB、Raft)

    分布式系統(tǒng)中的那些一致性(CAP、BASE、2PC、3PC、Paxos、ZAB、Raft)

    本文介紹 CAP、BASE理論的正確理解、Paxos 算法如何保證一致性及死循環(huán)問題、ZAB 協(xié)議中原子廣播及崩潰恢復(fù)以及 Raft 算法的動(dòng)態(tài)演示。 下面還有投票,一起參與進(jìn)來吧?? 工作過幾年的同學(xué),尤其是這幾年,大家或多或少都參與過分布式系統(tǒng)的開發(fā),遇到過各式各樣“分布式

    2024年02月05日
    瀏覽(27)
  • 分布式系統(tǒng)共識(shí)機(jī)制:一致性算法設(shè)計(jì)思想

    分布式系統(tǒng)共識(shí)機(jī)制:一致性算法設(shè)計(jì)思想

    這次以一個(gè)宏觀的角度去總結(jié) 自己學(xué)習(xí)過的一致性算法。一致性算法的目標(biāo)就是讓分布式系統(tǒng)里的大部分節(jié)點(diǎn) 保持?jǐn)?shù)據(jù)一致。 區(qū)塊鏈中的共識(shí)算法,pow、pos這類就屬于這個(gè)范圍,但他們僅僅是在區(qū)塊鏈領(lǐng)域內(nèi)應(yīng)用的,下面介紹一致性算法是在分布式系統(tǒng)中 應(yīng)用廣泛的,當(dāng)然

    2023年04月16日
    瀏覽(26)
  • 分布式系統(tǒng)的一致性級(jí)別劃分及Zookeeper一致性級(jí)別分析

    分布式系統(tǒng)的一致性級(jí)別劃分及Zookeeper一致性級(jí)別分析

    在談到Zookeeper的一致性是哪種級(jí)別的一致性問題,以及CAP原則中的C是哪一種一致性級(jí)別時(shí)有些疑惑。 下面是大多數(shù)文章中提到的一致性級(jí)別 一致性(Consistency)是指多副本(Replications)問題中的數(shù)據(jù)一致性。可以分為強(qiáng)一致性、順序一致性與弱一致性。 1.1 強(qiáng)一致性(Stric

    2024年04月12日
    瀏覽(27)
  • 聊聊分布式架構(gòu)09——分布式中的一致性協(xié)議

    聊聊分布式架構(gòu)09——分布式中的一致性協(xié)議

    目錄 01從集中式到分布式 系統(tǒng)特點(diǎn) 集中式特點(diǎn) 分布式特點(diǎn) 事務(wù)處理差異 02一致性協(xié)議與Paxos算法 2PC(Two-Phase Commit) 階段一:提交事務(wù)請(qǐng)求 階段二:執(zhí)行事務(wù)提交 優(yōu)缺點(diǎn) 3PC(Three-Phase Commit) 階段一:CanCommit 階段二:PreCommit 階段三:doCommit 優(yōu)缺點(diǎn) Paxos算法 拜占庭將軍問題

    2024年02月08日
    瀏覽(25)
  • 【分布式】一致性哈希和哈希槽

    【分布式】一致性哈希和哈希槽

    當(dāng)我們擁有了多臺(tái)存儲(chǔ)服務(wù)器之后,現(xiàn)在有多個(gè)key,希望可以將這些個(gè)key均勻的緩存到這些服務(wù)器上,可以使用哪些方案呢? 1.1 直接哈希取模 這是一種最容易想到的方法,使用取模算法hash(key)% N,對(duì)key進(jìn)行hash運(yùn)算后取模,N是機(jī)器的數(shù)量。key進(jìn)行hash后的結(jié)果對(duì)3取模,得

    2024年02月03日
    瀏覽(28)
  • 分布式數(shù)據(jù)庫-事務(wù)一致性

    分布式數(shù)據(jù)庫-事務(wù)一致性

    version: v-2023060601 author: 路__ 分布式數(shù)據(jù)庫的“強(qiáng)一致性”應(yīng)該包含兩個(gè)方面: serializability(串行) and linearizability(線性一致) ,上述圖為“Highly Available Transactions: Virtues and Limitations”論文中對(duì)于一致性模型的介紹。圖中箭頭表示一致性模型之間的關(guān)系。對(duì)于異步網(wǎng)絡(luò)上的分

    2024年02月08日
    瀏覽(26)
  • RocketMQ分布式事務(wù) -> 最終一致性實(shí)現(xiàn)

    RocketMQ分布式事務(wù) -> 最終一致性實(shí)現(xiàn)

    · 分布式事務(wù)的問題常在業(yè)務(wù)與面試中被提及, 近日摸魚看到這篇文章, 闡述的非常通俗易懂, 固持久化下來我博客中, 也以便于我二刷 轉(zhuǎn)載源 : 基于RocketMQ分布式事務(wù) - 完整示例 本文代碼不只是簡(jiǎn)單的demo,考慮到一些異常情況、冪等性消費(fèi)和死信隊(duì)列等情況,盡量向可靠業(yè)務(wù)

    2024年02月15日
    瀏覽(26)
  • 分布式系統(tǒng)架構(gòu)設(shè)計(jì)之分布式數(shù)據(jù)存儲(chǔ)的擴(kuò)展方式、主從復(fù)制以及分布式一致性

    分布式系統(tǒng)架構(gòu)設(shè)計(jì)之分布式數(shù)據(jù)存儲(chǔ)的擴(kuò)展方式、主從復(fù)制以及分布式一致性

    在分布式系統(tǒng)中,數(shù)據(jù)存儲(chǔ)的擴(kuò)展是為了適應(yīng)業(yè)務(wù)的增長(zhǎng)和提高系統(tǒng)的性能。分為水平擴(kuò)展和垂直擴(kuò)展兩種方式,這兩種方式在架構(gòu)設(shè)計(jì)和應(yīng)用場(chǎng)景上有著不同的優(yōu)勢(shì)和局限性。 水平擴(kuò)展是通過增加節(jié)點(diǎn)或服務(wù)器的數(shù)量來擴(kuò)大整個(gè)系統(tǒng)的容量和性能。在數(shù)據(jù)存儲(chǔ)領(lǐng)域,水平擴(kuò)

    2024年02月03日
    瀏覽(94)
  • 本地消息表模式保障分布式系統(tǒng)最終一致性

    本地消息表模式保障分布式系統(tǒng)最終一致性

    訂單表 消息表 process_queue 庫存系統(tǒng) return_queue 說明 成功 失敗 / / / 訂單庫回滾 成功 成功 失敗 / / 訂單系統(tǒng)重發(fā)消息 成功 成功 成功 失敗 / Broker自動(dòng)重試,注意接口冪等 成功 成功 成功 庫存不足退回 / Broker通知回掉,訂單/消息作廢 成功 成功 成功 成功 失敗 訂單系統(tǒng)重發(fā)消

    2024年04月28日
    瀏覽(32)
  • Zookeeper分布式一致性協(xié)議ZAB源碼剖析

    Zookeeper分布式一致性協(xié)議ZAB源碼剖析

    ZAB 協(xié)議全稱:Zookeeper Atomic Broadcast(Zookeeper 原子廣播協(xié)議)。 Zookeeper 是一個(gè)為分布式應(yīng)用提供高效且可靠的分布式協(xié)調(diào)服務(wù)。在解決分布式一致性方面,Zookeeper 并沒有使用 Paxos ,而是采用了 ZAB 協(xié)議,ZAB是Paxos算法的一種簡(jiǎn)化實(shí)現(xiàn)。 ZAB 協(xié)議定義:ZAB 協(xié)議是為分布式協(xié)調(diào)服

    2024年02月07日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包