Raft演算法系列教程3 日誌複製

2022-01-30 12:43:35 字數 1323 閱讀 1347

客戶端的每乙個請求都包含被複製狀態機執行的指令。leader把這個指令作為一條新的日誌條目新增到日誌中,然後並行發起 rpc 給其他的伺服器,讓它們複製這條資訊。假如這條日誌被安全的複製,leader就應用這條日誌到自己的狀態機中,並返回給客戶端。如果follower宕機或者執行緩慢或者丟包,leader會不斷的重試,直到所有的follower最終都複製了所有的日誌條目。

日誌由有序編號(log index)的日誌條目組成。每個日誌條目包含它被建立時的任期號(term)和用於狀態機執行的命令。如果乙個日誌條目被複製到大多數伺服器上,就被認為可以提交(commit)了。

上圖顯示,共有 8 條日誌,提交了 7 條。提交的日誌都將通過狀態機持久化到磁碟中,防止宕機。

當leader接收到由客戶端傳送的請求(請求中包含可以被複製狀態機執行的命令)時,leader將會把該請求作為新的內容新增到日誌中(任期號為當前leader所處的任期號,索引號為當前leader本地儲存的日誌集合中的日誌的最高索引號加1)。

備註:leader在當前任期內最多只能建立乙個給定索引號的日誌(即不可能在乙個任期內建立兩個以上的具有相同索引的日誌條目)

在網路中follower接收到該日誌訊息後則會返回複製成功的回覆。

在leader接收到網路中大部分的follower的成功複製的回覆之後,leader便認為該日誌可以被提交。此時leader將會同時做三件事:

(1)將該日誌應用到leader本地的複製狀態機

(2)向所有follower傳送訊息通知所有接收到該日誌的follower將該日誌進行提交,然後應用到各自本地的複製狀態機

(3)將執行結果通知客戶端

當該日誌訊息成功在網路中大部分follower本地的複製狀態機執行過後,則可認為該日誌已被提交。在當前日誌被提交的過程中,如果leader先前的某些日誌還沒有被提交,則將會一同提交。

一致性檢查是乙個歸納的過程。正常情況下,網路中第一條日誌一定滿足日誌的一致性檢查,然後第二條日誌中包含第一條日誌的任期號與索引號,所以只要leader與follower的第一條日誌保持一致,那麼第二條日誌也會滿足一致性檢查,從而之後的每一條日誌都會滿足一致性檢查。

從而得出了日誌匹配屬性:

(1)如果兩個不同的日誌實體具有相同的索引和任期號,那麼它們儲存有相同的命令。

(2)如果兩個不同的日誌實體具有相同的索引和任期號,則所有先前條目中的日誌都相同。(由一致性檢查結果得出)

Raft演算法系列教程1 Leader選舉

raft演算法中伺服器主要分為三種角色 leader follower candidate,並且三種角色相互獨立,也就是伺服器在同一時間內只可能扮演其中一種角色。leader 用於對所有使用者的請求進行處理以及日誌的複製等等。follower 不會主動傳送訊息,只響應來自leader與candida...

演算法系列教程01 開篇

為什麼要學習演算法呢?我個人覺得最終目的還是為了提高自己的職場競爭力。演算法的本質就是解決問題,所以學習演算法本質上是在提高解決問題的能力,這是職場最重要的能力之一。另外,如果你想在面試中表現得更加出色,也要對演算法有一定程度的掌握。寫教程是很耗費精力的,而且學習演算法是很枯燥的,但如果大家都能參與...

演算法系列3《SHA》

sha是一種資料加密演算法,該演算法經過加密專家多年來的發展和改進已日益完善,現在已成為公認的最安全的雜湊演算法之一,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段 通常更小 密文,也可以簡單的理解為取一串輸入碼 稱為預對映或資訊 並把它們轉化為長度較短 位數固定的...