1. 一步一步带你实现raft(准备工作)

第一步,理解RSM,可复制的状态机。

https://www.infoq.cn/article/raft-paper
阅读这篇文章的前2节,一直到复制状态机那章。

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

http://thesecretlivesofdata.com/raft/

第三步,阅读LAB2的文档

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

第四步,回过头来,重读论文,一直读到5.2

这一步很关键,找个安静的地方,带着思考阅读。有时读到后面需要参阅图2的表哥。自己在纸上笔笔画画。
随后再看一遍动画,理解下领导选举是怎么做的

第五步,阅读框架代码(怎么获得在上一篇里)

type Raft struct

这边我们要把每一个RAFT SERVER的状态该写好

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

这里我们要返回server 的当前的TERM 和 是不是LEADER的信息

persist,readPersist 先不用管

RequestVoteArgs
RequestVoteReply

这是申请投票的RPC的REQUEST 和 RESPOND,可以根据论文的图2定义

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

这是一个RPC 收到RequestVote的HANDLER

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

这个是告诉我们怎么发送一个RPC CALL。

start,kill 这2个方法先不用管

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

这个方法是用来初始化SERVER的值,以及启动一个协程来监听CHANNEL的。

第六步,了解GO语言语法

如果你已经知道GO怎么写了,就进入到下一章实现领导选举吧。
要用到的GO知识点

  1. = vs :=
  2. defer 的作用
  3. if,for,switch,enum 怎么写
  4. 如何初始化一个数组
  5. goroutine 的作用和用法
  6. 指针 和 地址 (* &)
  7. 如何NEW 对象
  8. go interface
  9. select ,chanel
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容