【分布式】Zookeeper的服务器角色
一、前言
前一篇已经详细的讲解了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的服务器角色相关推荐
- 学习Docker容器网络模型 - 搭建分布式Zookeeper集群
ZooKeeper是一个流行的分布式协调服务.它提供了两种不同的部署方式:单机模式和分布式模式.其中单机模式的部署非常简单,网上也有很多资料,我们今天会利用Docker搭建分布式Zookeeper集群 ...
- 介绍Windows Server服务器角色、角色服务和功能
1.1 服务器角色.角色服务和功能 什么是服务器角色.角色服务和功能? 本部分定义适用于 Windows Server 2008 的术语:角色.角色服务和功能. 角色 Roles是出现Windows ...
- 【二】分布式训练---参数服务器训练(飞桨paddle1.8)
1.参数服务器训练简介 参数服务器训练是分布式训练领域普遍采用的编程架构,主要解决以下两类问题: 模型参数过大:单机内存空间不足,需要采用分布式存储. 训练数据过多:单机训练太慢,需要加大训练节点,来 ...
- Java物联网开发(二) —— 开源百万级分布式 MQTT 消息服务器EMQX
开源百万级分布式 MQTT 消息服务器EMQX 一. 是什么 1. 简介 2. 分类 3. EMQ X 消息服务器功能列表 二. 安装 1. 安装方式 rpm安装 docker安装 免安装 2. 目录 ...
- ue4 服务器模式性能,UE4连接分布式商业级MMORPG服务器高级教学
第一章:MMORPG分布式负载均衡服务器 0101_MMORPG分布式服务器 0102_分布式负载均衡服务器框架 0103_DB服务器架构 0104_linux下DB服务器架构 0105_Center ...
- springboot分布式(zookeeper+Dubbo)
文章目录 springBoot 分布式zookeeper+Dubbo 一.基础知识 单一应用架构 垂直应用架构 分布式架构 流动计算架构 什么是RPC? 二.Dubbo 什么是Dubbo 为什么使用D ...
- sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系
原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...
- 使用克隆配置任务配置边缘传输服务器角色
环境拓扑: 策略: 实验内容: 1. 订阅第1台边缘服务器到组织中 2. 使用克隆配置任务配置第2台边缘服务器 3. 订阅第2台边缘服务器到组织中 4. 配置DNS服务器进行MX记录轮询 5. 结果 ...
- SQL Server 2005的服务器角色(public)的问题
SQL Server 默认会有9个服务器角色,而且这些角色是不能删除和新增.修改的.关于这些角色相关介绍和权限,请参考 其中有一个特殊的角色public,任何登录都会属于该角色,它只拥有的权限是VIE ...
最新文章
- 乔春洋:话说文化模式
- Python使用PDFMiner解析PDF
- 公钥,私钥,SSL(讲的很生动)
- 玄惭 mysql_阿里云数据库专家玄惭的“武功”全记录之最佳实践、双十一特别篇...
- 斯坦福CS231n项目实战(三):Softmax线性分类
- (译)你应该知道的jQuery技巧
- python分支语句_Python中的分支语句和循环语句及案例
- IDC:中小企业IT产品及服务支出预计到2020年突破6680亿美元
- 2013年7月底至8月初51Aspx源码发布详情
- 自动控制——2、为什么用微分方程来表示线性定常系统
- 成都VS上海,先锋设计机构与未来建筑的“双城battle”
- 裸机服务器装系统步骤,组装裸机如何装系统?
- 【USACO 2019 February Bronze】Sleepy Cow Herding
- Android实现网络图片app
- DM单机包含集群搭建
- [note] 微电子学概论(二) PN结 MOS和MOSFET
- php发邮件 环境,PHP使用Pear发送邮件(Windows环境)
- android h 系统找不到指定路径,Hbuilder真机运行安卓机找不到设备及找到设备后提示手机未安装android_base.apk问题解决办法-Go语言中文社区...
- 广东省城市环境空气质量状况数据集(2014年1月-2022年5月)
- ug里怎么导出x_t文件
热门文章
- 毕业论文图像快速画出
- python中re怎么念_Python中re(正则表达式)模块学习
- 计算机视觉基础:图像处理 Task 04:图像滤波
- mysql数据库的笔试题_MySQL数据库常见面试题
- java获取专辑封面_从MP3中读取专辑封面图片
- nginx服务器配置安全维护,nginx 安全:如何强化服务器配置
- ubuntu 禁用透明大页_禁用大内存页面
- java怎么创建多个对象_java语言之创建多个对象
- python 需要输入多个变量_使用多个变量的Python输入验证…是否简化?
- extjs 实现 NumberField 即时计算