今天開始算是正式編寫Sraft這個庫, 開發的原因有兩個:

  • 我需要通過這次開發來熟悉Raft這個協議.(以後面試或者和人攀談也更有底氣)
  • 我的微服務框架的服務中心需要一個能達成分佈式一致性的功能.

語言採用的是Go, 目前的編程模型大概也完成了, 下面我來介紹:

本人喜歡簡單並且高效的設計, 對於設計複雜難以實現的東西會感到不適(腦子不夠用),

Raft Kernel

整個編程模型會有比較多的模塊, 整體採用的是微核架構, Raft Kernel會協調各個模塊之間的工作.

模塊之間的通信由Raft Kernel來完成. 通信方式採用Channel異步非阻塞的形式.

Exchange Network

外部通信從這裡進入, 由Exchange Network將通信內容封裝為事件, 發送給Raft Kernel.

或者Raft Kernel傳遞事件給Exchange Network, 再由Exchange Network執行外部通信.

State Machine

Raft協議的核心實現, 狀態機會在Leader, Follower, Candidate三種角色之間自動切換, 每一角色處理的事件都是一樣的, 但是具體過程是不一樣的. (這個部分的密度會比較大)

Data Log Synchronizer

負責同步數據的模塊, 採用的是日誌提交形式.


以上的我目前已經構思出的編程模型, 但是為暫定. 實際的編寫模型肯定會有少許修改.

PROJECT: github.com/sdttttt/sraft