目录
- LeaderZooKeeperServer
- 类结构
- 创建LeaderZooKeeperServer
- 加载初始化数据loadData()
- 启动LeaderZooKeeperServer
- setupRequestProcessors()
LeaderZooKeeperServer
类结构
ZooKeeperServer主要是设置了一系列Processor处理器,对于不同的服务器角色有不同的实例类型
创建LeaderZooKeeperServer
在第十六篇文章中提到创建Leader的时候会先创建LeaderZooKeeperServer实例,它的源码过程如下:
加载初始化数据loadData()
当服务器成为Leader后进入lead()
核心代码时会执行该方法。
启动LeaderZooKeeperServer
当Leader完成投票过半、与learner完成数据同步之后会启动LeaderZooKeeperServer实例,
在这个过程中最主要的是第6步,该步骤中会创建Leader的一系列处理器,用于处理请求。
setupRequestProcessors()
最终创建的处理器链如下:
- PrepRequestProcessor,该处理器会对事务请求,如创建节点、更新数据、删除节点等,进行一系列预处理,包括创建事务请求头、事务体、会话检查、ACL检查、版本检查等。它是Leader的第一个请求处理器。
- ProposalRequestProcessor,它是Leader服务器的事务投票处理器,对于非事务请求,它会将请求直接传递给CommitProcessor;对于事务请求,它还会根据请求类型创建对应Proposal提议,发送给集群中所有的Follower服务器进行事务投票,此外,它还会交给SyncRequestProcessor进行事务日志的记录。
- SyncRequestProcessor,事务日志记录处理器,将事务请求记录到事务日志文件中,同时在一定条件下触发数据快照。
- AckRequestProcessor,Leader特有的处理器,当SyncRequestProcessor完成记录后向Leader发送ACK反馈。
- CommitProcessor,对于非事务请求会直接传递到下一个处理器,对于事务请求会等待ProposalRequestProcessor发出的Proposal投票,直到获得足够投票可以提交Proposal为止。
- ToBeAppliedRequestProcessor,CommitProcessor处理过的proposal会被保存到
Leader.toBeApplied
队列中,然后由ToBeAppliedRequestProcessor逐个交给FinalRequestProcessor处理。 - FinalRequestProcessor,主要负责收尾工作,如创建客户端请求的响应、将事务应用到内存数据库中。
后续会针对具体的请求来详细分析这一系列的Processor的工作,本章只需了解LeaderZooKeeperServer的核心工作,即创建Leader一系列请求处理器。