Raft(6.824-lab2/3)

Raft : 分布式的一致性算法

Raft动画 http://thesecretlivesofdata.com/raft/     // 很棒

 

主要解决 分布式系统下共识的问题

  每个节点有三个状态: Follower(追随者), Candidate(候选人), Leader(领导者)

  两种RPC:RequestVote(请求投票),AppendEntries(追加log,同时作为心跳包)

  以及两个超时设置来控制选举:election timeout(选举超时,会随机在150~300ms),heartbeat time(心跳时间)

 

LAB2 :保证能完成选主,并在Leader宕机后重新选主。

  开始所有节点都在Follower状态,开始等待选举超时,对于先超时的节点会成为候选人,给自己发送投票同时会发送请求投票给其他节点,当节点本term没有给其他节点投票过时,就会投票给候选人,并且重置选举超时时间。当某个候选人在本term获得大多数投票,就会成为领导者。领导者会发送日志给其他追随者以心跳时间,追随者会响应追加的日志,领导者发现过半追随者已经获得某个日志以后,本个日志就可以交给状态机来执行。

 

 难点就是理解这张图。

 

LAB3 :对于每个raft节点,同时作为server。客户端通过找到leader来进行追加数据。

      Leader将本次请求分配一个递增的index,当有超过n/2个节点保存了本次请求数据,就可以进行提交,并返回请求成功。

     对于日志过多时,可以进行快照操作,例如kv数据可以直接将kv映射进行序列化保存,而去掉日志。并在某个raft节点数据缺少过多时,直接发送快照。

 

个人Raft相关代码 :https://github.com/hrbust-liu/Raft

 

参考资料:

 Raft论文 英文:https://pdos.csail.mit.edu/6.824/papers/raft-extended.pdf       

                中文:https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md

参数讲解:https://www.cnblogs.com/lushilin/p/9268969.html

参考其中代码:https://blog.csdn.net/qq_42397248/article/details/100064450

posted @ 2019-11-13 15:56  注册以后还能改吧  阅读(310)  评论(0编辑  收藏  举报