分布式理论基础-选举、多数派、租约

选举

之前我们聊了2pc、3pc,其中都强调了coordinator的概念。实际上,在分布式系统中,节点之间一开始都是平等的,没有主次。为了运用2pc、3pc,也为了保证事务的原子性,一般都会选择一个节点作为coordinator(也叫leader、master节点)。因此就会有各种选举策略,本文列举了三种方式,可以解决大部分情况下的问题。

  • 选举(election)

实际上,选举问题也是一个一致性问题,关键在于独立的节点之间如何达成决议,选出大家都认可的leader。同时,需要对节点宕机、节点恢复、网络分化问题进行处理。

Bully算法,每个节点都有一个序号,初始化。每次选举当前节点中序号最高的为leader。即每次向比自己高的节点发起选举,如果对面无宕机,立即发回一个ok消息。高序号节点同时也向比自己高的发起重选。当一个节点因为超时没有收到任何回复,即没有更高的节点存在,即自己就是leader,并广播leader信息给所有其他节点。如图所示:

缺陷:

实际上, Bully算法是有缺陷的,即如果存在网络分化现象,就会产生多主。

  • 多数派(quorum)

如果存在网络分化,bully算法会有缺陷,会产生多个leader,这个时候需要引入多数派。多数派的思想在分布式系统很常见,即确保网络分化情况下的决议唯一。

原理是,假如节点总数是 2f + 1,那么一项决议得到多于f 个节点赞成则获得通过。leader选举中,网络分化下,只有具有多数派节点的部分才可能选出leader。多数派还可以用于副本管理(replica),根据实际情况调整写副本数和读副本数,在可靠性和性能之间取得平衡。

  • 租约(lease)

我们刚才也提到了,选举bully算法中最大的问题是网络分化下多主,而实际上,自己判定自己是leader也是一个问题(仅仅通过超时吗?如果产生了拥塞怎么办?),总结起来就是如何判断leader不可用,何时发起选举?最简单的方法是通过心跳(heart beat)判断leader是否正常。但网络拥塞下还是容易产生双主。

租约是解决该问题的常用方法,最初提出时用来解决分布式缓存一致性问题。在分布式锁等方面都有应用。实际上就是把选主交给另外一个辅助者,节点进行注册,辅助者根据(先到先得等策略)颁布租约给节点,保证一个时刻就一个leader,同时租约有时间。只有timeout,租约到期才重新选主。

总结

leader选举能够提升决策效率。但实际上leader选举本身也是一个一致性问题。选举过程根据业务不同列举了quorum、lease、leader的方法。看似这个是一个鸡生蛋、蛋生鸡的问题。而实际上,选主是为了提升效率,并没有必要保证不出现双主或者多主,比如paxos算法。将选举看成一个提升决策效率的方法。

这篇文章是根据别的博客资料自己的记录,请大家指正,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值