文档章节

zk服务器的构成,一个请求是如何处理的

writeademo
 writeademo
发布于 02/26 17:31
字数 680
阅读 37
收藏 0

请求处理器是对处理流水线上不同阶段的抽象,

     每一个服务器实现了一个请求处理器的序列,一个请求经过服务器上所有处理器的处理后得到了完全处理

RequestProcessor的接口,这个接口的主要方法是processRequest,接收一个Request请求,对相邻处理器请求通过队列实现解耦合

 

独立服务器

ZooKeeperServer类

PrepRequestProcessor

SyncRequestProcessor

FinalRequestProcessor

 

一个独立服务器的流水线

 

PrepRequestProcessor接受客户端的请求并执行这个请求,处理结果这生成一个事务,事务是执行一个操作的结果,该操作后反映到zookeeper的数据树上

事务信息将会以头部记录和事务记录的方式添加到Request对象中,只有改变zookeeper状态的操作才会产生事务,读操作并不会产生任何事务,因此,对于读请求的Request对象,事务的成员属性的引用值为null

 

下一个处理器为SyncRequestProcessor,负责将事务持久化到磁盘上,实际上就是将事务数据按顺序追加到事务日志中,并生成快照数据

 

最后一个处理器FinalRequestProcessor,如果Request对象包含事务数据如果request中包含事务数据,则处理器会接收修改zookeeper的修改

负责该处理器会从数据树读取数据并返回

 

群首服务器 LeaderZooKeeper 处理流水线

第一个仍然是PreRequestProcessor处理器,之后ProposalRequestProcessor,这个处理器会准备一个提议,并将提议发送到跟随者。ProposalRequestProcessor会将所有的提议发送给追随者CommitRequestProcessor,如果是写请求会发送给SyncRequestProcessor处理器

 

SyncRequestProcessor处理器要做的也是将事务持久化到硬盘,持久化之后会触发AckRequestProcessor

处理器,在zk集群模式中,要收到所有跟随者和自己对这个提议的确认,这个AckRequestProcessor处理器就是做确认处理的工作

 

ProposalRequestProcessor之后的处理器为CommitRequestProcessor,它会将收到确认消息的提议进行提交确认消息是由Leader.processAck()方法,这个方法会将提交的请求加入CommitRequestProcesspr类的一个队列中,这个队列会由请求处理器线程进行处理

© 著作权归作者所有

writeademo
粉丝 27
博文 681
码字总数 256388
作品 0
东城
私信 提问
zookeeper、dubbo、kafka随笔

1 zookeeper如何实现高可用 1 zookeeper 多台构成集群实现高可用,有三种角色群首(leader),追随者(follower),观察者(observer)。 Leader作为整个ZooKeeper集群的主节点,负责响应所有...

独一无二zz
2018/06/28
0
0
ZooKeeper学习第八期——ZooKeeper伸缩性

一、ZooKeeper中Observer 1.1 ZooKeeper角色 经过前面的介绍,我想大家都已经知道了在ZooKeeper集群当中有两种角色Leader和Follower。Leader可以接受client 请求,也接收其他Server转发的写请...

卯金刀GG
2017/10/25
25
0
simpleRpc解析-服务端

本文主要是对勇哥的simpleRpc进行了简单的剖析,用来学习rpc,加深对rpc的理解! 源码地址:http://git.oschina.net/huangyong/rpc 勇哥博客:https://my.oschina.net/huangyong/blog/36175...

涩谷直子
2018/06/22
33
1
分析Zookeeper的一致性原理

zookeeper(简称zk),顾名思义,为动物园管理员的意思,动物对应服务节点,zk是这些节点的管理者。在分布式场景中,zk的应用非常广泛,如:数据发布/订阅、命名服务、配置中心、分布式锁、集...

憬薇
2018/04/13
0
0
zookeeper权限acl与四字命令

权限acl介绍,acl的构成与id acl是Access control lists 的缩写,也就是权限控制列表: 针对节点可以设置相关读写等权限,目的是为了保障数据安全性 权限permissions可以指定不同的权限范围以...

ZeroOne01
2018/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

程序设计基础(C)第06讲例程

1summing.c /* summing.c -- 根据用户键入的整数求和 */#include <stdio.h>int main(void){ long num; long sum = 0L; /* 把sum 初始化为0 */ int status; p......

树人大学数字媒体吴凡
17分钟前
4
0
聊聊nacos config的publishConfig

序 本文主要研究一下nacos config的publishConfig ConfigController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @Controller@R......

go4it
44分钟前
3
0
Eureka应用注册与集群数据同步源码解析

在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean register() t...

Java学习录
53分钟前
11
0
Java描述设计模式(15):责任链模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景描述 1、请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批当 3<day<=5 天,部门经理审批当 day>5 天...

知了一笑
今天
10
0
总结:数组与链表

1、内存申请:数组在内存上是连续的空间;链表,内存地址上可以是不连续的。 2、查询速度:数组可以随机访问,链表必须顺序访问,即从首个元素开始遍历,逐个查找,所以数组查询很快。 3、写入...

浮躁的码农
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部