TODO
- 用命令 go test -run 2A 测试
- 看论文的图2,尤其是发送和接收 RequestVote RPCs,与选举有关的状态
- 在 raft.go 中实现图2中与选举有关的 struct state,定义一个保存log entry信息的struct
- 实现 RequestVoteArgs 和 RequestVoteReply,修改Make()函数创建一个后台线程,该线程在一定时间没有收到leader发送的心跳就会发起选举 RequestVote()
- 定义一个AppendEntries RPC struct 实现心跳,leader定期发送,写一个方法来重置选举超时
- 每个节点不要同时发生选举
- leader 每秒发送心跳不要超过10次
- 在旧的leader故障的时候5秒内选出新的leader
- 编写延迟执行代码
- 实现 GetState()