Raft演算法原理和解析

2021-10-04 21:30:19 字數 1564 閱讀 3944

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 大家還...