一、前言

  前一篇已经详细的讲解了Zookeeper的Leader选举过程,下面接着学习Zookeeper中服务器的各个角色及其细节。

二、服务器角色

  2.1 Leader

  Leader服务器是Zookeeper集群工作的核心,其主要工作如下

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

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

  1. 请求处理链

  使用责任链来处理每个客户端的请求时Zookeeper的特色,Leader服务器的请求处理链如下

  (1) PrepRequestProcessor。请求预处理器。在Zookeeper中,那些会改变服务器状态的请求称为事务请求(创建节点、更新数据、删除节点、创建会话等),PrepRequestProcessor能够识别出当前客户端请求是否是事务请求。对于事务请求,PrepRequestProcessor处理器会对其进行一系列预处理,如创建请求事务头、事务体、会话检查、ACL检查和版本检查等。

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

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

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

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

  (5) ToBeCommitProcessor。该处理器有一个toBeApplied队列,用来存储那些已经被CommitProcessor处理过的可被提交的Proposal。其会将这些请求交付给FinalRequestProcessor处理器处理,待其处理完后,再将其从toBeApplied队列中移除。

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

  2. LearnerHandler

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

  2.2 Follower

  Follower是Zookeeper集群的跟随者,其主要工作如下

  (1) 处理客户端非事务性请求(读取数据),转发事务请求给Leader服务器。

  (2) 参与事务请求Proposal的投票。

  (3) 参与Leader选举投票。

  Follower也采用了责任链模式组装的请求处理链来处理每一个客户端请求,由于不需要对事务请求的投票处理,因此Follower的请求处理链会相对简单,其处理链如下

  (1) FollowerRequestProcessor。其用作识别当前请求是否是事务请求,若是,那么Follower就会将该请求转发给Leader服务器,Leader服务器是在接收到这个事务请求后,就会将其提交到请求处理链,按照正常事务请求进行处理。

  (2) SendAckRequestProcessor。其承担了事务日志记录反馈的角色,在完成事务日志记录后,会向Leader服务器发送ACK消息以表明自身完成了事务日志的记录工作。

  2.3 Observer

  Observer充当观察者角色,观察Zookeeper集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给Leader服务器进行处理。Observer不会参与任何形式的投票,包括事务请求Proposal的投票和Leader选举投票。其处理链如下

  2.4 集群间消息通信

  Zookeeper的消息类型大体分为数据同步型、服务器初始化型、请求处理型和会话管理型。

  (1) 数据同步型。指在Learner和Leader服务器进行数据同步时,网络通信所用到的消息,通常有DIFF、TRUNC、SNAP、UPTODATE。

  (2) 服务器初始化型。指在整个集群或是某些新机器初始化时,Leader和Learner之间相互通信所使用的消息类型,常见的有OBSERVERINFO、FOLLOWERINFO、LEADERINFO、ACKEPOCH和NEWLEADER五种。

  (3) 请求处理型。指在进行清理时,Leader和Learner服务器之间互相通信所使用的消息,常见的有REQUEST、PROPOSAL、ACK、COMMIT、INFORM和SYNC六种。

  (4) 会话管理型。指Zookeeper在进行会话管理时和Learner服务器之间互相通信所使用的消息,常见的有PING和REVALIDATE两种。

三、总结

  经过本篇博文的讲解,明白了服务器的各种角色及其作用,以及集群间如何进行通信。谢谢各位园友的观看~

转载于:https://www.cnblogs.com/leesf456/p/6139266.html

【分布式】Zookeeper的服务器角色相关推荐

  1. 学习Docker容器网络模型 - 搭建分布式Zookeeper集群

    ZooKeeper是一个流行的分布式协调服务.它提供了两种不同的部署方式:单机模式和分布式模式.其中单机模式的部署非常简单,网上也有很多资料,我们今天会利用Docker搭建分布式Zookeeper集群 ...

  2. 介绍Windows Server服务器角色、角色服务和功能

    1.1 服务器角色.角色服务和功能 什么是服务器角色.角色服务和功能? 本部分定义适用于 Windows Server 2008 的术语:角色.角色服务和功能. 角色 Roles是出现Windows ...

  3. 【二】分布式训练---参数服务器训练(飞桨paddle1.8)

    1.参数服务器训练简介 参数服务器训练是分布式训练领域普遍采用的编程架构,主要解决以下两类问题: 模型参数过大:单机内存空间不足,需要采用分布式存储. 训练数据过多:单机训练太慢,需要加大训练节点,来 ...

  4. Java物联网开发(二) —— 开源百万级分布式 MQTT 消息服务器EMQX

    开源百万级分布式 MQTT 消息服务器EMQX 一. 是什么 1. 简介 2. 分类 3. EMQ X 消息服务器功能列表 二. 安装 1. 安装方式 rpm安装 docker安装 免安装 2. 目录 ...

  5. ue4 服务器模式性能,UE4连接分布式商业级MMORPG服务器高级教学

    第一章:MMORPG分布式负载均衡服务器 0101_MMORPG分布式服务器 0102_分布式负载均衡服务器框架 0103_DB服务器架构 0104_linux下DB服务器架构 0105_Center ...

  6. springboot分布式(zookeeper+Dubbo)

    文章目录 springBoot 分布式zookeeper+Dubbo 一.基础知识 单一应用架构 垂直应用架构 分布式架构 流动计算架构 什么是RPC? 二.Dubbo 什么是Dubbo 为什么使用D ...

  7. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  8. 使用克隆配置任务配置边缘传输服务器角色

    环境拓扑: 策略:  实验内容: 1. 订阅第1台边缘服务器到组织中 2. 使用克隆配置任务配置第2台边缘服务器 3. 订阅第2台边缘服务器到组织中 4. 配置DNS服务器进行MX记录轮询 5. 结果 ...

  9. SQL Server 2005的服务器角色(public)的问题

    SQL Server 默认会有9个服务器角色,而且这些角色是不能删除和新增.修改的.关于这些角色相关介绍和权限,请参考 其中有一个特殊的角色public,任何登录都会属于该角色,它只拥有的权限是VIE ...

最新文章

  1. 乔春洋:话说文化模式
  2. Python使用PDFMiner解析PDF
  3. 公钥,私钥,SSL(讲的很生动)
  4. 玄惭 mysql_阿里云数据库专家玄惭的“武功”全记录之最佳实践、双十一特别篇...
  5. 斯坦福CS231n项目实战(三):Softmax线性分类
  6. (译)你应该知道的jQuery技巧
  7. python分支语句_Python中的分支语句和循环语句及案例
  8. IDC:中小企业IT产品及服务支出预计到2020年突破6680亿美元
  9. 2013年7月底至8月初51Aspx源码发布详情
  10. 自动控制——2、为什么用微分方程来表示线性定常系统
  11. 成都VS上海,先锋设计机构与未来建筑的“双城battle”
  12. 裸机服务器装系统步骤,组装裸机如何装系统?
  13. 【USACO 2019 February Bronze】Sleepy Cow Herding
  14. Android实现网络图片app
  15. DM单机包含集群搭建
  16. [note] 微电子学概论(二) PN结 MOS和MOSFET
  17. php发邮件 环境,PHP使用Pear发送邮件(Windows环境)
  18. android h 系统找不到指定路径,Hbuilder真机运行安卓机找不到设备及找到设备后提示手机未安装android_base.apk问题解决办法-Go语言中文社区...
  19. 广东省城市环境空气质量状况数据集(2014年1月-2022年5月)
  20. ug里怎么导出x_t文件

热门文章

  1. 毕业论文图像快速画出
  2. python中re怎么念_Python中re(正则表达式)模块学习
  3. 计算机视觉基础:图像处理 Task 04:图像滤波
  4. mysql数据库的笔试题_MySQL数据库常见面试题
  5. java获取专辑封面_从MP3中读取专辑封面图片
  6. nginx服务器配置安全维护,nginx 安全:如何强化服务器配置
  7. ubuntu 禁用透明大页_禁用大内存页面
  8. java怎么创建多个对象_java语言之创建多个对象
  9. python 需要输入多个变量_使用多个变量的Python输入验证…是否简化?
  10. extjs 实现 NumberField 即时计算