Raft 基礎

目錄服務器

  1. 三個狀態
  2. 什麼是任期
  3. 節點之間的通訊

1. 三個狀態

Raft 設計了 3 個狀態,用於表示節點的狀態,分別是跟隨者,候選者,領導者。設計

  1. 領導者:一般只有一個領導人,而且其餘節點都是跟隨者。
  2. 跟隨者:跟隨者不會發送任何請求,只是簡單的響應領導者或者候選人的請求,由領導人處理全部的客戶端請求(若是客戶端請求了跟隨者,那麼跟隨者會將請求轉發給領導者)
  3. 候選者:選舉新的領導人時使用。

3 個角色的轉換關係和流程:日誌

圖 1

能夠看到,這張圖裏的幾個概念:blog

  1. 初始化:全部服務器啓動時,都是跟隨者
  2. 超時:當初始時, 沒有收到領導人的心跳,便開始選舉。若是候選者選舉的時候,也超時了,便從新選舉。
  3. 大多數的選票:成爲領導人的關鍵是 —— 獲取大多數服務器的選票,能夠看作是鴿籠原理。

2. 什麼是任期

目錄:集羣

  1. 2 個階段
  2. 任期
  3. 服務器之間的通訊

背景:因爲機器的物理時間是不可靠的,因此須要一個邏輯時間。稱之爲任期(term)。原理

從 2 個階段開始提及隨機數

集羣節點一般有 2 個節點:請求

  1. 選舉階段
  2. 領導者正常運行

例外:當選舉失敗,會進行加時賽,即連續有 2 個選舉過程。方法

見下圖:im

圖 2

圖 2 可見任期 3 選舉失敗,而後進行了從新選舉。

從新選舉會繼續失敗嗎?

答:若是不作限制,是會理解失敗的。

Raft 使用了一個限制來規避:每臺服務器在選舉的時候,使用一個隨機數(150 -200),即每一個服務器在不一樣的時間發出選舉。防止衝突。稱之爲「加時賽」。

任期號

在上文中說道:因爲機器的物理時間是不可靠的,因此須要一個邏輯時間。稱之爲任期(term)。

有關任期的幾個特色:

  1. 節點有可能觀察不到任何一次選舉或者任期。
  2. 任期充當邏輯時鐘,服務器節點能夠經過任期號查明過時的領導者或過時的信息。
  3. 每一個節點存儲當前任期號,單調遞增。
  4. 服務器之間的每次通訊,都會交換當前任期號,交換任期號的目的: 4.1 若是一個服務器的當前任期號比其餘人小,則更新本身。 4.2 若是一個候選人或者領導人發現本身的任期號過時了,馬上將本身變成跟隨者狀態。 4.3 若是一個節點收到一個過時的任期號的請求,直接拒絕。

3. 節點之間的通訊

服務器之間經過 RPC 通訊,即遠程方法調用。

在 Raft 中,RPC 分紅 3 種:

  1. 請求投票: RequestVote 由候選人在選舉任期發起
  2. 附加條目 AppendEntries 由領導人發起,用來複制日誌和提供心跳。
  3. 爲了傳輸快照單獨增長的 RPC。

備註:當服務沒有及時收到 RPC 的響應時,會發起重試。

Summary

  1. 3 個狀態的意義和他們之間切換
  2. 任期的設計背景,任期在節點通訊時的做用,任期在增加策略。
  3. 節點直接的通訊 RPC 類型以及策略。
相關文章
相關標籤/搜索