分布式系統一致性演算法Raft

2021-09-07 16:17:47 字數 1064 閱讀 7340

raft 演算法也是一種少數服從多數的演算法,在任何時候乙個伺服器可以扮演以下角色之一:

leader:負責 client 互動 和 log 複製,同一時刻系統中最多存在乙個

follower:被動響應請求 rpc,從不主動發起請求 rpc

candidate : 由follower 向leader轉換的中間狀態

在選舉leader的過程中,是有時間限制的,raft 將時間分為乙個個 term,可以認為是「邏輯時間」:

每個 term中至多存在1個 leader

某些 term由於不止乙個得到的票數一樣,就會選舉失敗,不存在leader。則會出現 split vote ,再由候選者發出邀票

每個 server 本地維護 currentterm

選舉過程:日誌更新問題:

如果在日誌複製過程中,發生了網路分割槽或者網路通訊故障,使得leader不能訪問大多數follwers了,那麼leader只能正常更新它能訪問的那些follower伺服器,

而大多數的伺服器follower因為沒有了leader,他們重新選舉乙個候選者作為leader,然後這個leader作為代表於外界打交道,如果外界要求其新增新的日誌,這個新的leader就按上述步驟通知大多數followers,

如果這時網路故障修復了,那麼原先的leader就變成follower,在失聯階段這個老leader的任何更新都不能算commit,都回滾,接受新的leader的新的更新。

流程:

client 傳送command 命令給 leader

leader追加日誌項,等待 commit 更新本地狀態機,最終響應 client

若 client超時,則不斷重試,直到收到響應為止(重發 command,可能被執行多次,在被執行但是由於網路通訊問題未收到響應)

解決辦法:client 賦予每個 command唯一標識,leader在接收 command 之前首先檢查本地log

分布式一致性演算法Raft

我們先來看乙個例子 我們有乙個單節點node,這個節點可以是資料庫,也可以是一台伺服器,當client向node傳送data時,x節點收到data,記錄下來 由此可見對於單個節點,一致性是很容易實現的。然而對於多個節點,我們如何來實現一致性,這就是分布式一致性的問題。raft就是乙個實現分布式一致性...

分布式系統的Raft演算法 一致性演算法

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

分布式系統 一致性模型

分布式系統中乙個重要的問題就是資料複製,資料複製一般是為了增強系統的可用性或提高效能。而實現資料複製的乙個主要難題就是保持各個副本的一致性。本文首先討論資料複製的場景中一致性模型如此重要的原因,然後討論一致性模型的含義,最後分析常用的一致性模型。資料複製主要的目的有兩個 可用性和效能。首先資料複製可...