一、选举流程
通过看了源码,了解到,zookeeper为了提升并发性能,使用了多级队列架构,提高了服务的并发;大概原理如下图:二、处理选票核心逻辑
选票核心参数:
id:推荐机器的id
zxid:事务id
Epoch选举周期;
开始选举时,选举周期加一,每个机器,都会投自己机器的选票,则id为档期机器的id,myid,事务id为当前机器最大事务号,获取当前选举周期;
获取到选票后,比较选票的逻辑:
1.先判断选举周期,如果获取到的选举周期大于当前机器的选举周期,则,获取到的选票直接胜出,并且修改当前周期为选票中的周期;
2.如果周期相等,再比较事务id,事务id大的机器胜出,并且修改当选的选票,且广播出去;
3.获取到的选票比当前小,则打印警告日志,直接忽略
每台机器会有一个选票桶,桶的结构,结构为Map<机器id,选票>,所以当有机器重复投票时,会覆盖原来的选票;
当选票桶中,某台机器当选的选票数量超过了机器数量的一半,则该台机器被选举为leader,并且广播出去