当前位置: 首页 > news >正文

【ZooKeeper】zookeeper源码9-ZooKeeper读写流程源码分析

源码项目zookeeper-3.6.3:核心工作流程

    • ZooKeeper选举和状态同步结束之后的服务启动
    • ZooKeeper SessionTracker启动和工作机制

ZooKeeper选举和状态同步结束之后的服务启动

在Leader的lead()方法的最后,即Leader完成了和集群过半Follower的同步之后,就会调用startZkServer()来启动必要的服务,主要包括:
SessionTracker
RequestProcessor
更新Leader ZooKeeperServer的状态

Leader.lead(){startZkServer(){zk.startup(){//ZooKeeperServer启动super.startup(){startupWithServerState(State.RUNNING);}//ZK Container ZNode定时清除任务if(containerManager != null){containerManager.start();}}}
}

同理,Follower也是一样的,在完成了和Leader的状态同步之后,也就是接收到Leader发送过来的NEWLEADER消息的时候,先拍摄快照,然后调用zk.startupWithoutServing()来启动Follower必要的一些基础服务,包括:
SessionTracker
RequestProcessor
更新Leader ZooKeeperServer的状态

Leader.syncWithLeader(long newLeaderZxid){//创建SessionTackerzk.createSessionTracker();//启动一些服务zk.startupWithoutServing(){startupWithoutServerState(State.INITIAL);}
}

不管Leader还是Follower,最后都执行startupWithServerState(State state),具体实现:

ZooKeeperServer.startupWithServerState(State state){//创建和启动SessionTracker 重要if(sessionTracker == null){createSessionTracker();}startSessionTracker();//初始化RequestProcessors 重要setupRequestProcessors();//其他各项基础服务startRequestThrottler();registerJMX();startJvmPauseMonitor();registerMetrics();//更新状态为RUNNINGsetState(state);//解除其他线程的阻塞notifyAll();
}

ZooKeeper SessionTracker启动和工作机制

需求背景:现在每个客户端链接到ZK服务器的时候,在服务器内部,都会创建一个Session来管理这个链接
如果链接断开,删除这个session
如果链接超时,删除这个session(在规定的超时时间前,没有任何动作)
会遇到什么问题?大量的session管理,ZK提供的方案:桶管理机制(Session管理,Connection管理)

在Leader启动的时候,Leader会创建LeaderSessionTracker,在Follower启动的时候,内部会创建一个LearnerSessionTracker。SessionTracker的内部都有

相关文章:

【ZooKeeper】zookeeper源码9-ZooKeeper读写流程源码分析

源码项目zookeeper-3.6.3:核心工作流程ZooKeeper选举和状态同步结束之后的服务启动ZooKeeper SessionTracker启动和工作机制ZooKeeper选举和状态同步结束之后的服务启动 在Leader的lead()方法的最后,即Leader完成了和集群过半Follower的同步之后&#x…...

Python实现批量导入xlsx数据1000条

遇到的问题:用户批量导入数据1000条,导入不成功的问题,提示查询不到商品资料。这个场景需要依靠批量的数据,每次测试的时候需要手动生成批量的数据,然后再导入操作,费时费劲。所以写了个脚本来实现。在前面…...

Ubuntu20.04安装redis与远程连接

一、安装Redis5.7 1、安装Redis apt-get install redis-server2、安装完成后,Redis服务器会自动启动。查看redis是否启动成功 service redis-server status #查看状态如下显示Active:active(running)状态:表示redis已在运行,启动成功。 …...

SAS应用入门学习笔记5

input 操作符: 代码说明: 1)1 表示第1列字符;7表示第7列字符; 2)col1 表示第一列数据;col2 表示第二列数据; 3)4.2 表示的是4个字符,2表示小数点后两位&a…...

PHP新特性集合

php8新特性命名参数function foo(string $a, string $b, ?string $c null, ?string $d null) { /* … */ }你可以通过下面的方式传入参数进行调用foo(b: value b, a: value a, d: value d, );联合类型php7class Number {/** var int|float */private $number;/*** param f…...

【开发环境配置】--Python3的安装

1-开发环境配置 工欲善其事,必先利其器! 编写和运行程序之前,我们必须先把开发环境配置好。只有配置好了环境并且有了更方便的开发工具,我们才能更加高效地用程序实现相应的功能。然而很多情况下,我们可能在最开始就…...

postman实现接口测试详细教程

各位小伙伴大家好, 今天为大家带来postman实战接口测试详细教程 一、通过接口文档集合抓包分析接口 通过fiddler抓包获取到注册接口URL地址及相关参数数据,并通过接口文档分析接口参数内容及参数说明, 如有必要的依赖条件必须进行梳理, 如token等 Fiddler抓包注册接口请求与…...

使用crontab执行定时任务

本来这个东西是挺简单的,是我脑子一直没转过来弯,我就想看看有多少人跟我一样😏 crontab语法自己去菜鸟教程看看就知道了,没什么难度 需求:每分钟定时执行一个PHP文件或者一个PHP命令 这是需要执行的文件&#xff0…...

剑指 Offer 56 - II. 数组中数字出现的次数 II

题目 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 思路 这题是剑指 Offer 56 - I. 数组中数字出现的次数的变体,本题只有一个数num出现一次,其余的均出现三次 三次的话使用异或消无法…...

C语言学习笔记(八): 自定义数据类型

结构体变量 什么是结构体 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体 结构体的成员可以是任何类型的变量,如整数,字符串,浮点数,其他结构体,指针等 struct Student //s…...

Video Speed Controller谷歌视频加速插件——16倍速

文章目录前言最简单的版本一、如果是简单的话 可以Microsoft Edge使用二、简单的版本 火狐的话使用Global Speed插件三、由于视频受限以上的方法行不通 还是谷歌好用前言 主要是网课刷的时候 太慢所以找到了刷视频的方法 由于前几个的权限受限制 所以还是选用了谷歌浏览器的 V…...

VSCode 的下载安装及基本使用

目录 一、VSCode 是什么? 二、VSCode 的下载和安装 2.1 - 下载 2.2 - 安装 2.3 - 安装汉化插件 三、MinGW-w64 的下载安装及配置 3.1 - 介绍 3.2 - 下载 3.3 - 解压安装 3.4 - 环境变量配置 3.5 - 验证配置是否成功 3.6 - 安装 C/C 插件 四、在 VSCode …...

【操作系统】磁盘IO常见性能指标和分析工具实战

1.磁盘读写常见的指标 (1)IOPS(Input/Output Operations per Second) 指每秒能处理的I/O个数,表示块存储处理读写(输出/输入)的能力,单位为次,有顺序IOPS和随机IOPS比如…...

SpringMVC基础

简介 Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面;Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块;使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择…...

低代码开发平台|制造管理-质检管理搭建指南

1、简介1.1、案例简介本文将介绍,如何搭建制造管理-质检管理。1.2、应用场景质检分别包括来料质检、过程质检、成品质检,来料质检在采购物料入库后会自动发起来料质检的流程,质检合格才可提交结束流程;过程检是在生产过程中的质检…...

推荐一个.Ner Core开发的配置中心开源项目

更多开源项目请查看:一个专注推荐.Net开源项目的榜单 当你把单体应用改造为微服务架构,相应的配置文件,也会被分割,被分散到各个节点。这个时候就会产生一个问题,配置信息是分散的、冗余的,变成不好维护管理…...

Vue3+vite4使用mockjs进行模拟开发遇到的坑

Vue3vite4使用mockjs进行模拟开发遇到的坑 最近没那么忙了,就想着自己写一个后台管理系统的小demo。刚好最近把Vue3的文档撸了一遍,正好可以顺便练习一下Vue3ts。 插件 1、mockjs是必不可少的。 2、vite-plugin-mock。由于现在创建Vue3项目默认都使用vit…...

一起Talk Android吧(第四百九十三回:动画知识总结)

文章目录知识回顾经验总结各位看官们大家好,上一回中咱们说的例子是"精减版动画",这一回中咱们说的例子是" 动画知识总结"。闲话休提,言归正转,让我们一起Talk Android吧!知识回顾 看官们,我们在…...

腾讯云企业网盘正式入驻数字工具箱

腾讯技术公益继腾讯电子签等入驻后,上线近半年的腾讯技术公益数字工具箱再次迎来新成员——腾讯云企业网盘,现已正式接受公益机构申请公益权益。腾讯云企业网盘(https://pan.tencent.com)是由腾讯云推出的一款安全、高效、开放的企…...

2.13练习

1、设备树设备树描述硬件信息的一种树形结构,设备树文件在linux内核启动后被内核解析。描述一个硬件设备信息的节点我们叫做设备节点,一个设备节点内部包含当前硬件的多个不同属性,相同节点不同属性是以链式结构存储2、设备树的文件格式内核顶…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

蓝桥杯 冶炼金属

原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...