什么是分布式一致性
首先假设我们服务器系统中只有一个结点(node),这个结点可以是一个数据库服务器存储着单一的值,有一个客户端向这个服务器发送了一个值,这个值可以很容易就满足一致性。但是,如果我们的服务器部署在集群上,有多个结点,每次对这些服务器发起的操作,都需要使他们的结果达成一致,看起来像是一台机器一样,这就是分布式一致性问题。Raft就是一种实现分布式一致性的协议
结点的状态
每个结点可以有三种状态:Follower,Candidate,Leader。所有的结点都是从Follower状态开始的,如果followers没有收到leader的RPC消息,则可以转换为candidate,而candidate需要发起投票,其他结点参与投票,回复他们的投票结果,如果这个candidate获得了大部分的选票,就可以成为leader结点了。这就是Leader Election过程。。
Leader Election
下面来看看选举的具体过程。Raft里有两个管理选举的计时器,第一个选举计时器(election timeout)是记录follower结点变成candidate结点所需要的时间,一般在150ms-300ms之间(随机),在这一轮计时结束后,有的follower结点转换成了candidate结点,就开始了真正的选举,首先candidate结点会投票给自己,然后向其他结点发起投票请求,如果收到消息的结点在这一轮倒计时中没有投出票,默认是投给candidate结点的。一旦一个candidate得到了大部分的选票,就转换成了leader结点。大部分的选