raft演算法原理和解析
原創 小誠信驛站 最後發布於2019-06-20 12:50:58 閱讀數 622 收藏
展開與paxos不同raft強調的是易懂,raft和paxos一樣只要保證n/2+1節點正常就能夠提供服務;raft把演算法流程分為三個子問題:
選舉(leader election)
日誌複製(log replication)
安全性(safety)
什麼是 raft 演算法?raft 演算法是一種簡單易懂的共識演算法。它依靠狀態機 和 主從同步的方式,在各個節點之間實現資料的一致性。
raft的兩個核心要點:
1.選取主節點
2.同步資料不難理解,使用主從同步的方式,可以讓集群各個節點的資料更新以主節點為準,從而保證了一致性。
那麼,如何選取主節點呢?raft演算法在選擇主節點的過程中,也是通過多個節點之間的投票競爭。說到這裡,不得不說一下raft演算法的狀態機。
raft演算法為節點定義了三種角色:
raft 演算法選主的具體流程:
第一步,在最初,還沒有乙個主節點的時候,所有節點的身份都是follower。每乙個節點都有自己的計時器,當計時達到了超時時間(election timeout),該節點會轉變為candidate。
在這裡插入描述
第二步,成為candidate的節點,會首先給自己投票,然後向集群中其他所有的節點發起請求,要求大家都給自己投票。
在這裡插入描述
第三步,其他收到投票請求且還未投票的follower節點會向發起者投票,發起者收到反饋通知後,票數增加。
在這裡插入描述
第四步,當得票數超過了集群節點數量的一半,該節點晉公升為leader節點。leader節點會立刻向其他節點發出通知,告訴大家自己才是老大。收到通知的節點全部變為follower,並且各自的計時器清零
在這裡插入描述
這裡需要說明一點,每個節點的超時時間都是不一樣的。比如a節點的超時時間是3秒,b節點的超時時間是5秒,c節點的超時時間是4秒。這樣一來,a節點將會最先發起投票請求,而不是所有節點同時發起。為什麼這樣設計呢?設想如果所有節點同時發起投票,必然會導致大家的票數差不多,形成僵局,誰也當不成老大。那麼,成為leader的節點是否就坐穩了老大的位置呢?並不是。leader節點需要每隔一段時間向集群其他節點傳送心跳通知,表明你們的老大還活著。
一旦leader節點掛掉,發不出通知,那麼計時達到了超時時間的follower節點會轉變為candidate節點,發起選主投票,周而復始…
在這裡插入描述
raft 演算法資料同步流程:
第一步,由客戶端提交資料到leader節點。
在這裡插入描述
第二步,由leader節點把資料複製到集群內所有的follower節點。如果一次複製失敗,會不斷進行重試。在這裡插入描述
第三步,follower節點們接收到複製的資料,會反饋給leader節點。
在這裡插入描述
第四步,如果leader節點接收到超過半數的follower反饋,表明複製成功。於是提交自己的資料,並通知客戶端資料提交成功。
在這裡插入描述
第五步,由leader節點通知集群內所有的follower節點提交資料,從而完成資料同步流程。
Raft演算法原理和解析
與paxos不同raft強調的是易懂,raft和paxos一樣只要保證n 2 1節點正常就能夠提供服務 raft把演算法流程分為三個子問題 2.follower 從節點 追隨者 日誌同步 剛啟動時候所有節點為follower狀態,響應leader的日誌同步請求,響應candidate請求,把請求到f...
Nacos的Raft演算法原理分析
什麼是raft演算法?raft是一種共識演算法,旨在替代paxos。它通過邏輯分離比paxos更容易理解,但它也被正式證明是安全的,並提供了一些額外的功能。1 raft提供了一種在計算系統集群中分布狀態機的通用方法,確保集群中的每個節點都同意一系列相同的狀態轉換。raft演算法解決了什麼問題?單節點...
raft演算法 Paxos和Raft共識演算法(二)
raft 譯文 在過去的 10 年中,leslie lamport 的 paxos 演算法幾乎已經成為了一致性演算法的代名詞,但是paxos 有兩個致命的缺點 第乙個是 paxos 太難以理解,第二個缺點是它難以在實際環境中實現。其中乙個原因是,對於多決策 paxos multi paxos 大家還...