目錄服務器
- 三個狀態
- 什麼是任期
- 節點之間的通訊
1. 三個狀態
Raft 設計了 3 個狀態,用於表示節點的狀態,分別是跟隨者,候選者,領導者。設計
- 領導者:一般只有一個領導人,而且其餘節點都是跟隨者。
- 跟隨者:跟隨者不會發送任何請求,只是簡單的響應領導者或者候選人的請求,由領導人處理全部的客戶端請求(若是客戶端請求了跟隨者,那麼跟隨者會將請求轉發給領導者)
- 候選者:選舉新的領導人時使用。
3 個角色的轉換關係和流程:日誌
能夠看到,這張圖裏的幾個概念:blog
- 初始化:全部服務器啓動時,都是跟隨者
- 超時:當初始時, 沒有收到領導人的心跳,便開始選舉。若是候選者選舉的時候,也超時了,便從新選舉。
- 大多數的選票:成爲領導人的關鍵是 —— 獲取大多數服務器的選票,能夠看作是鴿籠原理。
2. 什麼是任期
目錄:集羣
- 2 個階段
- 任期
- 服務器之間的通訊
背景:因爲機器的物理時間是不可靠的,因此須要一個邏輯時間。稱之爲任期(term)。原理
從 2 個階段開始提及:隨機數
集羣節點一般有 2 個節點:請求
- 選舉階段
- 領導者正常運行
例外:當選舉失敗,會進行加時賽,即連續有 2 個選舉過程。方法
見下圖:im
圖 2 可見任期 3 選舉失敗,而後進行了從新選舉。
從新選舉會繼續失敗嗎?
答:若是不作限制,是會理解失敗的。
Raft 使用了一個限制來規避:每臺服務器在選舉的時候,使用一個隨機數(150 -200),即每一個服務器在不一樣的時間發出選舉。防止衝突。稱之爲「加時賽」。
任期號
在上文中說道:因爲機器的物理時間是不可靠的,因此須要一個邏輯時間。稱之爲任期(term)。
有關任期的幾個特色:
- 節點有可能觀察不到任何一次選舉或者任期。
- 任期充當邏輯時鐘,服務器節點能夠經過任期號查明過時的領導者或過時的信息。
- 每一個節點存儲當前任期號,單調遞增。
- 服務器之間的每次通訊,都會交換當前任期號,交換任期號的目的: 4.1 若是一個服務器的當前任期號比其餘人小,則更新本身。 4.2 若是一個候選人或者領導人發現本身的任期號過時了,馬上將本身變成跟隨者狀態。 4.3 若是一個節點收到一個過時的任期號的請求,直接拒絕。
3. 節點之間的通訊
服務器之間經過 RPC 通訊,即遠程方法調用。
在 Raft 中,RPC 分紅 3 種:
- 請求投票: RequestVote 由候選人在選舉任期發起
- 附加條目 AppendEntries 由領導人發起,用來複制日誌和提供心跳。
- 爲了傳輸快照單獨增長的 RPC。
備註:當服務沒有及時收到 RPC 的響應時,會發起重試。
Summary
- 3 個狀態的意義和他們之間切換
- 任期的設計背景,任期在節點通訊時的做用,任期在增加策略。
- 節點直接的通訊 RPC 類型以及策略。