1. 一步一步帶你實現(xiàn)raft(準備工作)

第一步,理解RSM,可復制的狀態(tài)機。

https://www.infoq.cn/article/raft-paper
閱讀這篇文章的前2節(jié),一直到復制狀態(tài)機那章。

第二步,直觀的感受下RAFT再做什么

http://thesecretlivesofdata.com/raft/

第三步,閱讀LAB2的文檔

https://pdos.csail.mit.edu/6.824/labs/lab-raft.html
看到2A即可

第四步,回過頭來,重讀論文,一直讀到5.2

這一步很關(guān)鍵,找個安靜的地方,帶著思考閱讀。有時讀到后面需要參閱圖2的表哥。自己在紙上筆筆畫畫。
隨后再看一遍動畫,理解下領(lǐng)導選舉是怎么做的

第五步,閱讀框架代碼(怎么獲得在上一篇里)

type Raft struct

這邊我們要把每一個RAFT SERVER的狀態(tài)該寫好

func (rf *Raft) GetState() (int, bool) {

這里我們要返回server 的當前的TERM 和 是不是LEADER的信息

persist,readPersist 先不用管

RequestVoteArgs
RequestVoteReply

這是申請投票的RPC的REQUEST 和 RESPOND,可以根據(jù)論文的圖2定義

func (rf *Raft) RequestVote(args *RequestVoteArgs, reply *RequestVoteReply) {

這是一個RPC 收到RequestVote的HANDLER

func (rf *Raft) sendRequestVote(server int, args *RequestVoteArgs, reply *RequestVoteReply) bool {

這個是告訴我們怎么發(fā)送一個RPC CALL。

start,kill 這2個方法先不用管

func Make(peers []*labrpc.ClientEnd, me int,

這個方法是用來初始化SERVER的值,以及啟動一個協(xié)程來監(jiān)聽CHANNEL的。

第六步,了解GO語言語法

如果你已經(jīng)知道GO怎么寫了,就進入到下一章實現(xiàn)領(lǐng)導選舉吧。
要用到的GO知識點

  1. = vs :=
  2. defer 的作用
  3. if,for,switch,enum 怎么寫
  4. 如何初始化一個數(shù)組
  5. goroutine 的作用和用法
  6. 指針 和 地址 (* &)
  7. 如何NEW 對象
  8. go interface
  9. select ,chanel
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容