分布式系統學習(一) Raft演算法

2022-02-06 14:27:50 字數 1357 閱讀 2323

一致性

對某個指定的客戶端來說,讀操作保證能夠返回最新的寫操作結果。

可用性非故障的節點在合理的時間內返回合理的響應。

分割槽容忍性

當出現網路分割槽後,系統能夠繼續「履行職責」。

cap關注的粒度是資料,而不是整個系統。

一、拜占庭將軍問題

在很久很久以前,拜占庭是東羅馬帝國的首都。那個時候羅馬帝國國土遼闊,為了防禦目的,因此每個軍隊都分隔很遠,將軍與將軍之間只能靠信使傳遞訊息。

在打仗的時候,拜占庭軍隊內所有將軍必需達成一致的共識,才能更好地贏得勝利。但是,在軍隊內有可能存有叛徒,擾亂將軍們的決定。

這時候,在已知有成員不可靠的情況下,其餘忠誠的將軍需要在不受叛徒或間諜的影響下達成一致的協議。

拜占庭將軍問題是計算機科學家萊斯利·蘭伯特提出的有關計算機網路中所存在的一致性問題的問題。

二、raft演算法流程

raft演算法依靠狀態機主從同步的方式,在各個節點之間實現資料的一致性。

raft演算法的兩個核心要點:

同步資料(log replication)

選舉主節點

三種角色、狀態:

選舉流程:

所有節點的初始狀態都是follower,如果follower超過一段時間沒有接收到leader的心跳,就會成為candidate 。

candidate 會向follower發起投票,讓follower將票投給自己

follower將會投出它們的票(如果有3個candidate,那這個follower要投給誰?)

得到票數最多的candidate 成為主節點

同步資料

所有的修改操作都要經過leader,leader會等待,直到majority(大多數)節點都被修改,leader會commit這個修改。

三、raft演算法細節

選舉超時

follower等待,直到成為candidate的時間,選舉超時為150ms-300ms之間的任意值

follower超時之後,成為candidate,開始選舉流程,給它自己投票,並傳送投票請求給其他節點

其他節點投票給candidate,並reset自己的選舉超時時間

當candidate有majority(大多數)選票,就成為leader

心跳超時

直到follower沒有接收到leader的心跳,然後開始選舉過程,成為candidate

分布式系統 Raft演算法

什麼是拜占庭將軍問題?在很久很久以前,拜占庭是東羅馬帝國的首都。那個時候羅馬帝國國土遼闊,為了防禦目的,因此每個軍隊都分隔很遠,將軍與將軍之間只能靠信使傳遞訊息。在打仗的時候,拜占庭軍隊內所有將軍必需達成一致的共識,才能更好地贏得勝利。但是,在軍隊內有可能存有叛徒,擾亂將軍們的決定。這時候,在已知有...

分布式 Raft演算法

raft也是分布式一致性協議,主要是用來競選主節點。有三種節點 follower,candidate和leader。leader會週期性的傳送心跳給follower。每個follower都設定了乙個隨機的競選超時時間,一般為150ms 300ms,如果在這個時間內沒有收到leader的心跳包,就會變...

分布式系統的Raft演算法

過去,paxos一直是分布式協議的標準,但是paxos難於理解,更難以實現,google的分布式鎖系統chubby作為paxos實現曾經遭遇到很多坑。來自stanford的新的分布式協議研究稱為raft,它是乙個為真實世界應用建立的協議,主要注重協議的落地性和可理解性。在了解raft之前,我們先了解...