数据一致性算法即共识算法,共识就是多个节点对某一个事件达成一致的看法,即使出现部分节点故障、网络分割、网络延时等情况,也不影响各节点。
加密货币(比特币、区块链)的应用就需要共识算法,在分布式系统中,共识算法更多用于提高系统的容错性
raft是使用较为广泛的分布式协议,具有强一致性、去中心化以及高可用性。是一个leader-based算法。
raft算法提供三种成员身份:
领导者(leader):处理写请求,管理日志复制、发送心跳消息
跟随者(follower):相当于paxos中的acceptor,接收处理leader的消息,当leader出现故障时,主动推荐自己为候选人
候选人(candidate):向其他节点发送请求投票消息(Request Vote),如果获得大多数选票,则晋升为leader。
Raft算法将分布式系统的一致性问题主要分解成为三个子模块即Leader选举、日志同步和安全性。
leader选举
Leader选举时使用了一个随机定时器,这个随机时钟设定的时间一般是在150ms-300ms中的随机值。节点刚启动时其状态为Follower,等待Leader心跳消息的随机超时由每个节点自己设置,因此每个节点的超时时间不同。Follower节点在这个超时时间内没有收到Leader的心跳消息或者Canditate的请求投票消息时,便自荐成为Candidate,随后增加自己的任期编号term并以Candidate身份向系统中的其他节点发送请求投票消息,请求晋升为Leader,在自己设定的随机超时时间内若收到大多数选票时,则晋升为Leader开始向集群中其他节点持续发送心跳消息来维持自己的Leader身份。
日志同步
Raft算法实现日志同步的具体过程如下:
Leader收到来自客户端的事务操作,将之封装成log entry并追加到自己的日志中;Leader并行地向系统中所有节点发送日志复制消息;接收到消息的节点确认消息没有问题,则将log entry追加到自己的日志中,并向Leader返回ACK表示接收成功;Leader若在随机超时时间内收到大多数节点的ACK,则将该log entry应用到状态机并向客户端返回成功。
如果觉得《【分布式系统数据一致性算法】Raft算法》对你有帮助,请点赞、收藏,并留下你的观点哦!