zookeeper源码分享四 ---- RequestProcessor 处理链路

news2024/10/5 21:18:52

单机zookeeper RequestProcessor 处理链路

将请求放入LinkedBlockingQueue队列中,通过一个队列中。启动一个线程去消费这个队列,避免了阻塞。在这里插入图片描述
zookeeper的处理是实现RequestProcessor接口的processRequest(Request request) 方法。


PrepRequestProcessor

在这里插入图片描述

在这里插入图片描述
PrepRequestProcessor 没有对读写操作做特殊处理


SyncRequestProcessor

  • 写入事物日志

  • 判断是否进行数据快照,是则进行。数据快照落盘之前都是在内存之中

    公式:
    (logCount > (snapCount / 2 + randRoll)) || (snapSizeInBytes > 0 && logSize > (snapSizeInBytes / 2 + randSize));
    logCount : 当前日志数量
    logSize: 当前日志大小
    snapCount :快照数量,默认10w
    randRoll: 快照生成的随机时间
    snapSizeInBytes:内存快照大小,默认4G
    randSize:快照生成的随机大小

  • 刷新事物日志的输出流(bufferOutputStream),默认的maxBatchSize是1000

每个请求(读/写)都会经过,SyncRequestProcessor 。当是读请求 (hdr = null)时,这时是不会写入事物日志的
在这里插入图片描述
在这里插入图片描述

SyncRequestProcessor - FileTxnLog.append 添加事物日志

在这里插入图片描述
就是将数据按照设计好的二进制格式进行序列化,然后写入事物日志文件中

Util.marshallTxnEntry(hdr, txn, digest); 进行序列化

SyncRequestProcessor - Flush 刷新事物日志的输出流

刷新事物日志的bufferOutputStream流,将数据真正的落盘。

zkDataBase.commit就是刷新bufferOutputStream数据流
在这里插入图片描述
在这里插入图片描述
ZkDataBase.commit
在这里插入图片描述


FinalRequestProcessor 处理真正业务请求的processor,通常作为请求链路最后一层。

  • 写请求进行数据存储
  • 关闭会话操作,进行会话关闭
  • 读请求处理
    在这里插入图片描述

zookeeperServer.processTxn() 处理事物请求的核心
在这里插入图片描述

FinalRequestProcessor.processRequest() - 获取子节点查询示例

  • 请求数据序列化
  • 从内存数据库DataBase中取出当前节点
  • 校验节点的ACL权限
  • 获取该节点下的子节点的path列表
  • 将数据返回给客户端
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

exsi删除虚拟机提示在当前状况下不允许执行此操作解决方法、vmware删除虚拟机提示在当前状况下不允许执行此操作解决方法

说明 我这exsi版本为5.5 今天在回收虚拟机的时候有些虚拟机无法删除,提示下面内容。 解决方法 方法1 直接给删除失败的虚拟机开机,开机完毕以后再关机就能直接删除了。 方法2 删除失败的虚拟机,也无法开机的情况下,实用该方…

春节档的观影“热”,拯救不了影视圈的“冷”?

配图来自Canva可画 疫情三年,影视业也随着“冬眠”了三年。 先是疫情爆发影响影视业上下游的正常生产,而后国家加速规范影视行业税收秩序,资本相继撤离,再后来影视企业入不敷出业绩巨亏,影视寒冬来临成为行业共识。在…

MMCV - dataset_analysis.py 可视化检测和跟踪任务自定义数据集神器

做视觉检测跟踪任务时,我们需要在论文插图中体现出我们数据集的信息,这个时候就有一个非常好用的神器:dataset_analysis.py的文件。该文件能够帮助用户直接可视化custom数据集的bbox实例信息,如上图所示,包括:显示类别和 bbox 实例个数的分布图;显示类别和 bbox 实例宽/…

中科院和人社部职称评审所需材料内容对比

目录1.前言2.中科院所需材料2.1 基本情况2.2 工作经历2.3 主要专业技术工作业绩2.4 重要著(译)作、论文及技术工作报告2.5 继 续 教 育 情 况2.6 考试、考核情况2.7 单位推荐意见2.8 材料审核意见2.9 个人技术报告2.10 未来工作展望3.人社部所需材料3.1 …

三十八、Kubernetes1.25中数据存储第二篇

1、概述在前面已经提到,容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,kubernetes引入了…

行为型模式 - 状态模式State

状态模式的定义与特点 状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 状态模式是一种对象行为型模式,其主要优点…

Oracle用户权限管理

一、运行企业管理器 管理员身份运行客户端的企业管理器 首次打开需要添加数据库信息,这里使用已经存在的数据库orcl 使用系统用户登录 用户名:system,口令orcl 或者不输入使用SYSDBA登录 可以查看所有用户的详细信息: 用户名, 账户状态,…

union和union all 的区别

1:union用于合并两个或多个select 语句的结果集。 注意: 1:union内部的select 语句必需拥有相同数量的列,列也夜必须拥有相似的数据类型,同时每条select 语句中的列的顺序必须相同。 2:union结果集中的列…

JVM垃圾回收与性能调优策略

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参…

项目代码版本控制与保护

一、版本命名规则 1.1 需求开发分支命名规则 格式:dev_v版本号_需求名称 案例:dev_v01.31_TX202301141 dev_v01.31_数字产品平台订单查询优化 1.2 测试环境发布分支命名规则 格式:uat_deploy 1.3 预上环境分支命名规则 格式&#xff1a…

Apsara Clouder云计算专项技能认证:云服务器ECS入门

文章目录 一、什么是云服务器ECS二、如何获取一台云服务器ECS三、5分钟学会管理云服务器ECS四、【实验】ECS云服务器新手上路五、【实验】基于ECS搭建云上博客入口: https://edu.aliyun.com/certification/cldc15 一、什么是云服务器ECS

8K超高清企业获广东省专精特新称号,背后意味着什么?

2023年开年之际,广州博冠光电科技股份有限公司及其子公司广州博冠智能科技有限公司通过“2022年广东省专精特新中小企业”和“2022年广东省名优高新技术产品”2项权威认定荣誉。广东省“专精特新”认定是什么?“专精特新”是指中小企业具备专业化、精细化…

github入门指南

文章目录什么是开源开源项目托管平台github使用介绍什么是github使用github(1)注册(2)创建远程仓库(3)github功能介绍本地创建仓库与远程仓库进行关联什么是开源 开源,即开放源代码&#xff0c…

呆头鹅批量剪辑视频软件:玩的就是裂变,剪辑需求者的终身助理

文案来自于公众号:生财风暴 图片来自于公众号:生财风暴 随着5G时代到来,短视频,电商,自媒体等平台全面崛起,目前影视制作行业前景的9字真言: 需求大!门槛低!薪资高! 呆头…

迟来的年度总结 —— 我与 csdn 的故事

👑作者主页:安 度 因 🏠学习社区:StackFrame 📖专栏链接:我的故事 文章目录引子我的大一我与 csdn 的相识第一次创作喜悦 —— 干劲满满挫败 —— 厚积薄发意外 —— 收获果实博客新星陪伴社区与StackFrame…

修改 bootargs 方式增加分区(mtd分区和blkdevparts分区)

1、Linux内核设置分区的两种方式 1.1、内核代码中写死 在内核的平台代码中写死,然后在初始化NandFlash的时候设置。 1.2、uboot通过bootargs传递分区表 (1)u-boot将分区信息(形如:mtdpartsxxx,blkdevpartsxxx)添加到b…

​力扣解法汇总2325. 解密消息

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。…

FastDeploy全场景高性能AI部署工具:加速打通AI模型产业落地的最后一公里

飞桨目前为开发者提供了涵盖多种领域的模型套件,开发者可以使用这些套件基于自身数据集快速完成深度学习模型的训练。但在实际产业部署环境下,开发者在部署模型到不同硬件和不同场景时面临以下三个痛点问题。 碎片化。在部署过程中,由于深度学…

投资中的不可能三角

投资中避不开这个不可能三角! 而这“三个角”指的是高收益、低风险、高流动性,“不可能三角”则指的是“三角”难以同时满足。 因为这三角的关系是相互制衡的! ①若要追求较低风险条件下的较高收益,需要以时间换取空间&#xff0…