RAFT(1)

简介

  Paxos是分布式协议的标准,由美国大佬莱斯利·兰伯特提出(2013年图灵奖,现在在微软研究院,学术软件laTex开发者)。Paxos是即使基于不可靠网络也能实现分布式服务器共识一致性的算法。分布式一致性(Distributed consenseus)不再阐述。

  不过Paxos不仅仅复杂难以理解,同时也很难在工程上实现,即使强如Google,它完成的分布式锁系统Chubby(作为Paxos的实现)也曾经遭遇到许多的坑。而Raft,《InSearch of an Understandable Consensus Algorithm》,则是一个更加可实现的新的分布式协议,它从设计之初就以可理解性作为准则之一。是更加容易理解,实现的分布式一致性算法。


角色

  分布式架构中,需要有一个主服务器(master)来管理其他的从服务器,统一他们的信息和状态,每一个节点,即一个服务器,虽然功能大体相同,但是都应该有各自的角色属性,或者说角色状态。在Raft中,每个服务器都可以扮演三种角色:

  • Leader
    处理所有的客户端的交互,日志的复制等,一般只有一个Leader。
  • Candidate
    当不存在一个Leader时,可以成为一个Candidate(候选者),来竞选成为Leader。
  • Follower
    存在一个已知的Leader时,其他的节点将会自动成为Follower听从Leader指挥。

选举

  即推选一个Leader过程,当集群中不存在一个Leader时,就会有Follower成为候选者并开始选举。成为Leader需要候选者得到半数以上的票,为了以容错方式达成一致,我们不可能要求所有服务器100%都达成一致状态,只要超过半数的大多数服务器达成一致就可以了,假设有N台服务器,N/2 +1就超过半数,代表大多数了。

投票

  每一个节点都存在一个Timeout,当一个节点的Timeout到达时,若此时没有Leader,则它将成为一个候选者,并向其他的节点发出投票请求,当它获得的票数大于N/2 +1时,该节点将当上Leader,此时Leader向其他节点发出心跳包,告诉其他节点它已当选Leader,并重置其他节点的Timeout。只要Leader不掉线,网络通畅,心跳包将持续发送到其他的Follower并重置他们的Timeout, 这样不会有下一个Candidate出现。注意,每一次重置的Timeout是范围内随机的一个值,这样能够制造’先后’。

多个候选者同票

  每个节点都有一个随机的Timeout,并且候选者发出投票请求后也会重置其它Follower的Timeout(即投票过的节点不太可能再在这一次选举中成为候选者),但是仍然有可能有多个候选者同时产生并发出请求。此时先达到半数投票的候选者会成为新的Leader,若候选者得到了相同的票数,那么这些候选者会重新举行一次选举并重新获得一个随机的Timeout,当Timeout完成后候选者依旧会发出投票请求。一般来说第二次投票先成为候选者的成为Leader的可能性是最大的(两次随机值都相同的可能性极小)。当然机制已经在这,不外乎多选几次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值