ZooKeeper系统模型之Leader服务器。

        Leader服务器是整个ZooKeeper集群工作机制中的核心,其主要工作有以下两个。

  • 事务请求的唯一调度和处理者,保证集群事务处理的顺序性。
  • 集群内部各服务器的调度者。

请求处理链

        使用责任链模式来处理每一个客户端请求是ZooKeeper的一大特点。在每一个服务器启动的时候,都会进行请求处理链的初始化,Leader服务器的请求处理链如下图所示。

        从上图中可以看到,从PrepRequestProcessor到FinalRequestProcessor,前后一共7个请求处理器组成了Leader服务器的请求处理链。

PrepRequestProcessor

        PrepRequestProcessor是Leader服务器的请求预处理器,也是Leader服务器的第一个请求处理器。在ZooKeeper中,我们将那些会改变服务器状态的请求称为“事务请求”——通常指的就是那些创建节点、更新数据、删除节点以及创建会话等请求,PrepRequestProcessor能够识别出当前客户端请求是否是事务请求。对于事务请求,PrepRequestProcessor处理器会对其进行一系列预处理,诸如创建请求事务头、事务体、会话检查、ACL检查和版本检查等。

ProposalRequestProcessor

        ProposalRequestProcessor处理器是Leader服务器的事务投票处理器,也是Leader服务器事务处理流程的发起者。对于非事务请求,ProposalRequestProcessor会直接将请求流转到CommitProcessor处理器,不再做其他处理;而对于事务请求,除了将请求交给CommitProcessor处理器,不再做其他处理;而对于事务请求,除了将请求交给CommitProcessor处理器外,还会根据请求类型创建对应的Proposal提议,并发送给所有的Follower服务器来发起依次集群内的事务投票。同时,ProposalRequestProcessor还会将事务请求交付给SyncRequestProcessor进行事务日志的记录。

SyncRequestProcessor

        SyncRequestProcessor是事务日志记录处理器,该处理器主要用来将事务请求记录到事务日志文件中去,同时还会触发ZooKeeper进行数据快照。

AckRequestProcessor

        AckRequestProcessor处理器是Leader特有的处理器,其主要负责在SyncRequestProcessor处理器完成事务日志记录后,向Proposal的投票收集器发送ACK反馈,以通知投票收集器当前服务器已经完成了对该Proposal的事务日志记录。

CommitProcessor

        CommitProcessor是事务提交处理器。对于非事务请求,该处理器会直接将其交付给下一级处理器进行处理;而对于事务请求,CommitProcessor处理器会等待集群内针对Proposal的投票直到该Proposal可被提交。利用CommitProcessor处理器,每个服务器都可以很好地控制对事务请求的顺序处理。

ToBeCommitProcessor

        ToBeCommitProcessor是一个比较特别的处理器。该处理器中有一个toBeApplied队列,专门用来存储那些已经被CommitProcessor处理过的可被提交的Proposal。

        ToBeCommitProcessor处理器将这些请求逐个交付给FinalRequestProcessor处理器进行处理——等到FinalRequestProcessor处理器处理完之后,再将其从toBeApplied队列中移除。

FinalRequestProcessor

        FinalRequestProcessor是最后一个请求处理器。该处理器主要用来进行客户端请求返回之前的收尾工作,包括创建客户端请求的响应;针对事务请求,该处理器还会负责将事务应用到内存数据库中去。

LearnHandler

        为了保持整个集群内部的实时通信,同时也是为了确保可以控制所有的Follower/Observer服务器,Leader服务器会与每一个Follower/Observer服务器都建立一个TCP长连接,同时也会为每个Follower/Observer服务器都创建一个名为LearnerHandler的实体。

        LearnerHandler,顾名思义,是ZooKeeper集群中Learner服务器的管理器,主要负责Follower/Observer服务器和Leader服务器之间的一系列网络通信,包括数据同步、请求转发和Proposal提议的投票等。Leader服务器中保存了所有Follower/Observer对应的LearnerHandler。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值