用户您好!请先登录!

动态演示Raft分布式一致性协议

动态演示Raft分布式一致性协议

Raft作为一种比较好理解的分布式一致性算法(相对于paxos来说,其实要理解还是有点难度的!),是通过选举机制,日志复制来保证发布式系统数据的一致性。

相对于Paxos算法,Raft引入主节点,通过竞选。其中节点类型:

  • Follower
  • Candidate
  • Leader

Leader 会周期性的发送心跳包给 Follower。每个 Follower 都设置了一个随机的竞选超时时间,一般为 150ms~300ms,如果在这个时间内没有收到 Leader 的心跳包,就会变成 Candidate,进入竞选阶段。

1. 无Leader阶段(系统初始阶段)

流程:

① 下图表示一个分布式系统的最初阶段,此时只有 Follower,没有 Leader。Follower A 等待一个随机的竞选超时时间之后,没收到 Leader 发来的心跳包,因此进入竞选阶段。

② 此时 A 发送投票请求给其它所有节点。

③ 其它节点会对请求进行回复,如果超过一半的节点回复了,那么该 Candidate 就会变成 Leader。

④ 之后 Leader 会周期性地发送心跳包给 Follower,Follower 接收到心跳包,会重新开始计时。

2. 多个 Candidate 竞选

① 如果有多个 Follower 成为 Candidate,并且所获得票数相同,那么就需要重新开始投票,例如下图中 Candidate B 和 Candidate D 都获得两票,因此需要重新开始投票。

② 当重新开始投票时,由于每个节点设置的随机竞选超时时间不同,因此能下一次再次出现多个 Candidate 并获得同样票数的概率很低。

3. 日志复制

① 来自客户端的修改都会被传入 Leader。注意该修改还未被提交,只是写入日志中。

② Leader 会把修改复制到所有 Follower。

③ Leader 会等待大多数的 Follower 也进行了修改,然后才将修改提交。

④ 此时 Leader 会通知的所有 Follower 让它们也提交修改,此时所有节点的值达成一致。

 

X-Eyes Admin
X-Eyes Admin

要发表评论,您必须先登录