ZooKeeper(十二)——ZooKeeper服务器角色

原创
10/18 22:06
阅读数 12

在zookeeper中,服务器一共有三种角色,分别是:Leader、Follower、Observer。注意:前面介绍ZAB协议时说道,服务器运行时可能处于的三种状态(LOOKING、FOLLOWING、LEADING),注意区分。一个是服务器运行时状态;这里讲是服务器的角色。

接下来看看这些角色分别在集群中负责的工作。

一:Leader

Leader服务器是zookeeper集群工作的核心,主要工作有以下两个:

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

使用责任链来处理每个客户端的请求是zookeeper的特色,leader服务器的请求处理链如下:

可以看到从PrepRequestProcessor到FinalRequestProcessor一共七个请求处理器组成了leade服务器的请求链。通过这些处理器对非事务请求事务请求(会改变服务器状态的请求,如:创建节点、更新数据,删除节点、创建会话等)进行处理。

  1. PrepRequestProcessor(请求预处理器):能够识别当前事务请求是否是事务请求,对于事务请求,PrepRequestProcessor处理器会对其进行一系列预处理,如创建事务请求头、事务体、会话检查、ACL检查和版本检查等。

  2. ProposalRequestProcessor(事务投票处理器)

  • 对于非事务请求:不做任何处理,交给CommitProcessor。
  • 对于事务请求:根据事务请求类型创建对应的Proposal提案,并发送给所有的follower服务器来发起一次集群内的事务投票。然后转发给CommitProcessor及SyncRequestProcessor处理器
  1. SyncRequestProcessor(事务日志记录处理器):用来将事务请求记录到事务日志文件中,同时触发zookeeper进行数据快照。

  2. AckRequestProcessor:负责在SyncRequestProcessor完成事务日志记录后,向Proposal的投票收集器发送ACK反馈,以通知投票收集器当前服务器已完成对该Proposal的事务日志记录

  3. CommitProcessor(事务提交处理器)

  • 对于非事务请求:不做任何处理,直接交给ToBeCommitProcessor处理器。
  • 对于事务请求:等待集群内的这个提案(Proposal)的投票,直到该提案可被提交。(利用事务提交处理器,每个服务器可以很好的控制事务请求的顺序处理)
  1. ToBeCommitProcessor\ToBeAppliedProcessor:该处理器有一个toBeApplied队列,用来存储那些已经被CommitProcessor处理过可被提交的提案。它会将这些请求交付给FinalRequestProcessor处理器,待其处理完成后,再将其从toBeApplied队列中移除。

  2. FinalRequestProcessor:用来进行客户端请求返回前的操作,包括创建客户端请求的响应,针对事务请求,该处理器还会负责将事务应用到内存数据库中去。

二:Follower

Follower服务器是zookeeper集群中的跟随者,主要工作有以下三个方面:

  1. 处理客户端非事务请求,转发事务请求给Leader服务器。
  2. 参数事务请求的提案的投票工作。
  3. 参与leader选举。

其处理链如下:

follower服务器的第一个处理器变成了FollowerRequestProcessor,同时由于不需要统计事务请求投票,所以没有ProposalRequestProcesso处理器。

  1. FollowerRequestProcessor:识别当前请求是否为事务请求。
  • 对于非事务请求:转发给CommitProcessor处理器,直到最后交给FinalRequestProcessor处理器创建客户端请求的响应。
  • 对于事务请求:转发给leader服务器,进入leader的处理链进行处理。
  1. SendAckRequestProcessor:承担了在SyncRequestProcessor处理器记录完事务日志后反馈ACK消息的工作,表示完成了事务日志的记录工作。

三:Observer

Observer是zookeeper3.3.0版本引入的全新的服务器角色,充当观察者角色——观察Zookeeper集群的最新状态变化并将这些状态同步过来。

其对于非事务请求可以进行独立处理;对于事务请求,则会转发给Leader服务器进行处理。Observer不会参与任何形式的投票,包括事务请求Proposal的投票和Leader选举投票。其处理链如下:

注意:Observer服务器在初始化阶段会将SyncRequestProcessor事务日志记录处理器也组装上去,但是实际运行过程中,leader服务器不会发送事务请求的投票请求给它,所以它是不起作用的。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部