Raft

hhahaa 2018-12-25

Raft算法:最初是一个用于管理复制日志的共识算法,它是一个为真实世界应用建立的协议,主要注重协议的落地性和可理解性.

面向多个决策达成一致的问题,分解了Leader选举,日志复制和安全方面的考虑,并通过约束减少了不确定的状态空间

一个Raft集群通常包含5个服务器,允许系统有两个故障服务器.服务器处于leader,follower和candidate这三个状态之一.

Leader(领导者):仅有一个,决定日志的提交,日志只能Leader向Follower单向复制.处理所有的客户端请求,若服务端请求Follower则将该请求转发给Leader

Follower(跟随者):是被动的,不会对自身发出请求,只对leader和candidate的请求做出响应

Candidate(候选领导者):该状态用来选举Leader

共识过程:

1.首先选举一个Leader,接着赋予Leader完全的权力管理记账.

a.开始所有结点都是Follower,在随机超时发生后未收到来自Leader或Candidate消息,则转变角色为Candidate,提出选举请求.

b.最近选举阶段(Term)中得票超过一半者被选为Leader

c.如果未选出,随机超时后进入新的阶段重试.Leader负责从客户端接收log,并分发到其他节点

2.Leader从客户端接收记账请求.完成记账操作,生成区块并复制到其他记账节点.

a.Leader会找到系统中日志最新的记录,并强制所有的Follower来刷新到这个记录,数据的同步是单向的

3.Leader可能失效或与其他节点失去联系.这时,系统就会选出新的Leader

Leader选举:

1.任何一个服务器都可以成为candidate,它向其他服务器follower发送要求选举自己的请求

2.其它服务器发出OK后,只要有N/2+1的服务器同意,就可成为leader

记账过程

1.Leader已经选出,客户端发出增加日志的请求

2.Leader要求Follower遵从它的指令,都将这个新的日志追加到他们各自日志中

3.大多数Follower服务器将交易记录写入账本后,确认追加成功,发出确认成功信息

4.在下一个心跳(150-300ms)中,Leader会通知所有Follower更新确认的项目

相关推荐