Raft-好懂的分布式一致性解决办法
Posted 柒零贰大队
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Raft-好懂的分布式一致性解决办法相关的知识,希望对你有一定的参考价值。
一致性算法是用来解决一致性问题的,那么什么是一致性问题呢? 在分布式系统中,一致性问题(consensus problem)是指对于一组服务器,给定一组操作,我们需要一个协议使得最后它们对外呈现的结果达成一致. 更详细的解释就是,当其中某个服务器收到客户端的一组指令时,它必须与其它服务器交流以保证所有的服务器都是以同样的顺序收到同样的指令,这样的话所有的服务器会产生一致的结果,在外界看起来就像是一台机器一样。
常用的有Paxos和Raft,Raft是因为Paxos太难懂太难以实现而提出的,目的是在可靠性不输于Paxos的情况下,尽可能的简单易懂,我们就来着重介绍一下Raft。
Raft中所有节点一共有三种模式Leader(领袖)、Follower(群众)、Candidate(候选人),三类角色的变迁图如下
最初的时候所有人都是Follower状态,当一个节点收不到Leader的信息时,它就变成了Candidate,然后它会向所有其余节点发送请求投票的信息,如果节点在该轮竞选中没有投过票,就会给它投一票。如果一个节点收到了大多数(超过半数)的票,它就会成为Leader。这个过程我们称之为Leader选举。
在此之后,所有的系统操作全部通过Leader。当Leader收到一个操作,会先记录到自己的Log,然后会把这个操作复制给所有的其它节点,之后当Leader收到大多数(超过半数)的节点反馈操作成功时,会在自己这个节点执行操作,并告知所有人操作已经执行。这个操作我们称之为日志复制。
至此一个完整的操作流程以及全部完成。下面我们来讲写别的东西。
首先,如果所有的竞选者不能收到超过一半的选票,视为本次竞选失败,等待下一次超时开始下一轮竞选,直到有一个可以收到超过半数的选票。这个机制保证了一次竞选只会产生一个Leader。
其次如果由于网络出现故障或其他情况导致网络分区,可能整个系统中会出现多个Leader。当两个Leader恢复通信后,会选择选举版本较高的为Leader,其余节点均作为follower和该Leader同步。
以上就是Raft的基本思想和一些相关的问题。具体也可以看看这个网站http://thesecretlivesofdata.com/raft/,用动画的方式详细讲述了Raft的一些基本知识,非常生动形象。
此外也可以了解一下拜占庭将军问题,这是一个很经典的解决数据一次性的问题。
后台开发者
整理:司玮辰
以上是关于Raft-好懂的分布式一致性解决办法的主要内容,如果未能解决你的问题,请参考以下文章
一致性问题和Raft一致性算法——一致性问题是无法彻底解决的,可以说一个分布式系统可靠性达到99.99…%,但不能说它达到了100%