Zookeeper服务器角色介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asty9000/article/details/85494984

Leader

Leader服务器是整个Zookeeper集群工作机制中的核心,主要工作有两个:

1.事务请求的唯一调度和处理者,保证集群事务处理的顺序性。

2.集群内部各服务器的调度者。

Zookeeper使用责任链来处理每一个客户端请求。Leader服务器的责任链从PrepRequestProcessor到FinalRequestProcessor包含了7个请求处理器。

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

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

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

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

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

ToBeAppliedRequestProcessor是一个比较特殊的处理器。该处理器内部有一个toBeApplied队列,专门用来存储那些已经被CommitProcessor处理过的可被提交的Proposal。ToBeAppliedRequestProcessor将这些请求逐个交付给FinalRequestProcessor处理器进行处理——等到FinalRequestProcessor处理器处理完之后,再将其从toBeApplied队列中移除。

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

为了保持整个集群内部的实时通信,同时为了确保可以控制所有的Follower/Observer服务器,Leader服务器会与每一个Follower/Observer服务器建立一个TCP长连接,同时会为每个Follower/Observer服务器都创建一个名为LearnerHandler的实体。LearnerHandler是Zookeeper集群中Learner服务器的管理器,主要负责Follower/Observer服务器和Leader服务器之间的一系列网络通信,包括数据同步、请求转发和Proposal提议的投票等。Leader服务器中保存了所有Follower/Observer对应的LearnerHandler。

Follower

Follower服务器同样采用责任链模式组装的请求处理链来处理每一个客户端请求,由于不需要负责对事务请求的投票处理,因此相对来说简单一些,和Leader服务器的请求处理链最大的不同点在于,Follower服务器的第一个处理器换成了FollowerRequestProcessor,同时由于不需要处理事务请求的投票,因此没有ProposalRequestProcessor。

FollowerRequestProcessor是Follower服务器的第一个请求处理器,主要工作是识别出当前请求是否是事务请求,如果是事务请求,就会将该事务请求转发给Leader服务器,Leader服务器在接收到这个事务请求后,就会将其提交到请求处理链,按照正常的事务请求进行处理。

SendAckRequestProcessor是Follower服务器上另一个和Leader服务器有差异的请求处理器,SendAckRequestProcessor与Leader服务器上的AckRequestProcessor处理器同样承担了事务日志记录反馈的角色,在SyncRequestProcessor完成事务日志记录后,会向Leader服务器发送Ack消息以表明自身完成了事务日志的记录工作。亮着的唯一区别在于,AckRequestProcessor处理器和Leader服务器在同一个服务器上,因此它的Ack反馈仅仅是一个本地操作,而SendAckRequestProcessor处理器由于在Follower服务器上,因此需要通过以Ack消息的形式来向Leader服务器进行反馈。

Observer

Observer服务器在工作原理上和Follower基本是一致的,对于非事务请求,都可以独立处理,对于事务请求,都会转发给Leader服务器进行处理。唯一的区别在于Observer不参与任何形式的投票。

虽然Observer服务器在初始化阶段会将SyncRequestProcessor处理器组装上去,但在实际运行中,Leader服务器不会将事务请求的投票发送给Observer服务器。

猜你喜欢

转载自blog.csdn.net/asty9000/article/details/85494984
今日推荐