Nacos的Raft演算法原理分析

2021-10-14 14:16:37 字數 1604 閱讀 4588

什麼是raft演算法?

raft是一種共識演算法,旨在替代paxos。 它通過邏輯分離比paxos更容易理解,但它也被正式證明是安全的,並提供了一些額外的功能。[1]

raft提供了一種在計算系統集群中分布狀態機的通用方法,確保集群中的每個節點都同意一系列相同的狀態轉換。

raft演算法解決了什麼問題?

單節點的資料的操作問題,很簡單,並不會出現資料不一致的問題,但是一旦涉及到多個節點,就無法確定究竟以哪乙個節點為準,也無法判斷應該去訪問哪個節點。而raft演算法就是用來保證分布式事務的一致性,保證在任何時候,客戶端來訪問的時候,獲取的資料都是一致的。

raft演算法的原理

raft演算法中,節點有三種狀態:

leader:領導節點

follower:跟隨節點

candidate:競選節點

服務啟動(以三個節點為例)

當服務啟動時,所有節點預設都是follower節點,因為這時候沒有leader,所以不會收到來自leader的心跳資訊,follower會變為candidate節點,表示參與競選leader節點,這時候每個節點都會開始倒計時,並記錄term(表示時鐘轉的圈數),倒計時的時間每個節點都是乙個一定範圍內的隨機數,所以,必定有乙個節點先倒計時結束,記這個節點為a,這時候該節點a會傳送投票資訊給其他節點,告訴其他兩個節點投他。

這時候,如果當另兩個節點都還未倒計時結束,那麼因為節點a已經結束,a(term=1),而另兩個節點的term=0,(raft演算法中以term大的節點資料為準),那麼另兩個節點會預設贊同a,並將票數給a,當a收到投票資訊後,發現有過半節點都投票給自己(包括了自己的一票),那麼a就會成為leader節點,並傳送訊息給另兩個節點,通知自己已經是leader了。而收到訊息的兩個節點,根據term進行判斷,確認已經選舉出leader,則自動變為follower節點。

節點資料同步

當leader選舉出來後,所有的事務請求都會發起給leader節點,然後leader將資料操作寫入節點日誌中,並傳送訊息通知follower節點,告訴他們要修改資料了,follower節點接收到通知後,也會把操作寫入自己節點的日誌中,並返回確認寫入訊息給leader,當leader收到返回訊息後,如果過半的節點都確認已經寫入日誌成功,才會把剛才的操作從日誌中讀取出來,並進行提交操作,這時候才是真的寫入資料成功,並且再次發起通知給follower節點,告訴他們可以提交資料了。

leader節點下線

當leader節點發生故障,導致下線,則無法傳送心跳資訊到follower節點。而follower會一直進行倒計時,這時候無法收到心跳資訊,則先結束倒計時的follower節點會進入candidate狀態,參與競選leader,當選出leader節點後,則可以正常提供服務。當剛才下線的leader節點重新上線後,因為已經有leader節點了,並且很顯然該節點的term比當前的leader節點的term小,所以這個原來leader節點會服從當前leader節點,變為follower節點。

原始碼分析

//todo

原文:

Raft演算法原理和解析

與paxos不同raft強調的是易懂,raft和paxos一樣只要保證n 2 1節點正常就能夠提供服務 raft把演算法流程分為三個子問題 2.follower 從節點 追隨者 日誌同步 剛啟動時候所有節點為follower狀態,響應leader的日誌同步請求,響應candidate請求,把請求到f...

Raft演算法原理和解析

raft演算法原理和解析 原創 小誠信驛站 最後發布於2019 06 20 12 50 58 閱讀數 622 收藏 展開與paxos不同raft強調的是易懂,raft和paxos一樣只要保證n 2 1節點正常就能夠提供服務 raft把演算法流程分為三個子問題 選舉 leader election 日...

raft原理的動畫演示

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