分散式一致性協議Raft全面詳解(建議收藏)
來源:mikechen的網際網路架構
談到分散式架構就不得不談到相關的分散式一致性協議,比如:Pasox、Raft等分散式一致性協議,本篇就來談談目前主流的Raft協議
Raft協議簡介
Raft是分散式的一致性協議,其相對Pasox更加簡單,都是為了實現 一致性 產生的,解決分散式系統的資料一致性和高可用。
Raft協議將一致性協議的核心內容分拆成為幾個關鍵階段:包括:領導選舉(leader selection)、日誌複製(log replication)等以簡化流程,提高協議的可理解性。
所以搞懂Raft協議重點就是要理解Raft協議角色,以及領導選舉、日誌複製這3大核心點,下面我分別詳解@mikechen
Raft協議角色
在Raft演算法中一個叢集裡面的所有節點有以下三種狀態:
Raft協議的每個副本都會處於三種狀態之一:Leader、Follower、Candidate。
1.跟隨者(follower)
類似選民,完全被動的角色,這樣的伺服器等待被通知投票。
2.候選者(candidate)
候選者就是在選舉過程中提名自己的實體,一旦選舉成功,則成為領導者。
3.領導者(leader)
領導者的作用:處理客戶端互動,日誌複製等動作,Raft 要求系統在任何一個時刻最多隻有一個 Leader,正常工作期間只有 Leader 和 Follower。
Raft 協議角色狀態轉換,如下圖所示:
領導leader選舉
Raft透過心跳機制來觸發leader選舉,當一個伺服器啟動時,預設位於followers狀態,並且一直持續知道它一直接受到leader的RPC請求。
leader會週期性傳送心跳給所有的followers,如果follower一段時間內沒有接受到心跳,那麼就認為當前沒有leader應該開始leader selection。
一個最小的 Raft叢集需要三個參與者,這樣才可能投出多數票,如下圖所示:
初始狀態下 ABC三個節點開始選舉Leader,Leader選舉過程中有三種可能的情形發生。
第一種:A節點要投自己一票,並把提議拉票請求發給B和C,如下圖所示:
B和C接受了A的提議,也投票給A,最終A成為Leader。
第二種:A節點投了自己一票,B節點也投了自己一票,C節點支援A節點的提議,如下圖所示:
第二種少數服從多數,最終A成為Leader。
第三種:A節點、B節點、C節點都各自投了自己一票,如下圖所示:
這樣就沒有節點獲得多數票,第三種情況本輪投票無效,出現了平票(Split Votes),因為沒有任何一方獲得多數票,所以要發起新的一輪投票。
Raft協議為了不讓選舉機制反覆出現平票,定義了一個隨機超時機制(randomized election timeouts),一旦發生平票,平票的節點會各自再來一次隨機timeout倒數,然後重新拉票,先發起拉票的節點就可以優先獲得了多數節點的投票。
日誌複製
在 Raft 演算法中需要實現分散式一致性的資料被稱作日誌, Raft 演算法中的資料提交記錄,會按照時間順序進行追加,Raft 也是嚴格按照時間順序並已一定的格式寫入日誌檔案中。
下面這張圖就描述了Raft叢集中日誌的組成結構:
每一個小方框就是entry,每個日誌項包含一條命令、任期資訊、日誌項在日誌中的位置資訊(索引值 LogIndex)。
指令:由客戶端請求傳送的執行指令,有點繞口,我覺得理解成客戶端需要儲存的日誌資料即可。
索引值:日誌項在日誌中的位置,需要注意索引值是一個連續並且單調遞增的整數。
任期編號:建立這條日誌項的領導者的任期編號。
Raft 的日誌複製過程,大致如下圖所示:
1.領導者接收到客戶端發來的請求,建立一個新的日誌項,並將其追加到本地日誌中;
2.接著領導者透過追加條目 RPC 請求,將新的日誌項複製到跟隨者的本地日誌中;
3.當領導者收到大多數跟隨者的成功響應之後,則將這條日誌項應用到狀態機中,可以理解成該條日誌寫成功了;
4.最後領導者返回日誌寫成功的訊息響應客戶端。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2951721/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- raft協議詳解Raft協議
- 分散式理論(六) - 一致性協議Raft分散式協議Raft
- 分散式一致性協議Raft原理與例項分散式協議Raft
- Raft協議精解Raft協議
- 搞懂分散式技術2:分散式一致性協議與Paxos,Raft演算法分散式協議Raft演算法
- raft協議Raft協議
- 分散式協議與演算法-Raft演算法分散式協議演算法Raft
- 分散式系統一致性協議分散式協議
- 分散式協議分散式協議
- raft協議初識Raft協議
- 實現 Raft 協議Raft協議
- Paxos、Raft不是一致性演算法/協議?Raft演算法協議
- 分散式應用中的一致性協議分散式協議
- 上萬字詳解Spark Core(建議收藏)Spark
- 分散式技術專題-分散式協議演算法-帶你徹底認識Paxos演算法、Zab協議和Raft協議的原理和本質分散式協議演算法Raft
- 分散式概念與協議分散式協議
- 【史上最全】Hadoop 核心 - HDFS 分散式檔案系統詳解(上萬字建議收藏)Hadoop分散式
- 使用GO實現Paxos分散式一致性協議Go分散式協議
- Raft協議學習筆記Raft協議筆記
- Raft 協議學習筆記Raft協議筆記
- Gossip 協議詳解Go協議
- VxLAN協議詳解協議
- WebSocket 協議詳解Web協議
- UDP協議詳解UDP協議
- TCP協議詳解TCP協議
- FTP協議詳解FTP協議
- USB協議詳解協議
- QUIC協議詳解UI協議
- SMB協議詳解協議
- Redis協議詳解Redis協議
- SNMP協議詳解協議
- HTTP 協議詳解HTTP協議
- HTTP協議詳解HTTP協議
- Kraft協議詳解Raft協議
- SPI協議詳解協議
- 史上最全執行緒池超詳解(建議收藏)執行緒
- 網路通訊協議-ICMP協議詳解!協議
- 網路通訊協議-TCP協議詳解!協議TCP