《Zookeeper》源码分析(十七)之 LeaderZooKeeperServer

LeaderZooKeeperServer

类结构

ZooKeeperServer主要是设置了一系列Processor处理器,对于不同的服务器角色有不同的实例类型
在这里插入图片描述

创建LeaderZooKeeperServer

在第十六篇文章中提到创建Leader的时候会先创建LeaderZooKeeperServer实例,它的源码过程如下:
在这里插入图片描述

加载初始化数据loadData()

当服务器成为Leader后进入lead()核心代码时会执行该方法。
在这里插入图片描述

启动LeaderZooKeeperServer

当Leader完成投票过半、与learner完成数据同步之后会启动LeaderZooKeeperServer实例,
在这里插入图片描述

在这个过程中最主要的是第6步,该步骤中会创建Leader的一系列处理器,用于处理请求。

setupRequestProcessors()

在这里插入图片描述

最终创建的处理器链如下:
在这里插入图片描述

  1. PrepRequestProcessor,该处理器会对事务请求,如创建节点、更新数据、删除节点等,进行一系列预处理,包括创建事务请求头、事务体、会话检查、ACL检查、版本检查等。它是Leader的第一个请求处理器。
  2. ProposalRequestProcessor,它是Leader服务器的事务投票处理器,对于非事务请求,它会将请求直接传递给CommitProcessor;对于事务请求,它还会根据请求类型创建对应Proposal提议,发送给集群中所有的Follower服务器进行事务投票,此外,它还会交给SyncRequestProcessor进行事务日志的记录。
  3. SyncRequestProcessor,事务日志记录处理器,将事务请求记录到事务日志文件中,同时在一定条件下触发数据快照。
  4. AckRequestProcessor,Leader特有的处理器,当SyncRequestProcessor完成记录后向Leader发送ACK反馈。
  5. CommitProcessor,对于非事务请求会直接传递到下一个处理器,对于事务请求会等待ProposalRequestProcessor发出的Proposal投票,直到获得足够投票可以提交Proposal为止。
  6. ToBeAppliedRequestProcessorCommitProcessor处理过的proposal会被保存到Leader.toBeApplied队列中,然后由ToBeAppliedRequestProcessor逐个交给FinalRequestProcessor处理。
  7. FinalRequestProcessor,主要负责收尾工作,如创建客户端请求的响应、将事务应用到内存数据库中。

后续会针对具体的请求来详细分析这一系列的Processor的工作,本章只需了解LeaderZooKeeperServer的核心工作,即创建Leader一系列请求处理器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值