《Zookeeper》源码分析(二十)之 Follower

目录

  • Follower
    • 创建Follower实例
    • followLeader()
    • findLeader()
    • connectToLeader()
    • registerWithLeader()
    • syncWithLeader()
  • FollowerZooKeeperServer

Follower

Leader选举结束后,成为Follower的服务器开始进行Follower的工作,过程如下:
在这里插入图片描述

Leader的过程类似,第一步创建Follower实例,第二步开始执行工作followerLeader()

创建Follower实例

在这里插入图片描述

followLeader()

LeaderLearnerHandler中,当LeaderFollower建立连接后发生的工作流程如下:
在这里插入图片描述

在LearnerHandler的run()方法中我们已经分析了左边Leader的工作,Follower的followLeader()方法则是右边的工作,源码过程如下:
在这里插入图片描述

接下来具体分析第1步~第4步,第5步则会在后文具体请求时再分析。

findLeader()

在这里插入图片描述

connectToLeader()

在这里插入图片描述

在这一步中最关键的是设置了leaderIs与leaderOs,后续Follower与Leader收发信息时都直接使用这两个变量。

registerWithLeader()

当Follower与Leader成功建立连接后,Follower就开始向Leader注册自己的信息,在这个过程中包括发送身份信息、确认epoch
在这里插入图片描述

syncWithLeader()

当Follower与Leader确认完选举轮次epoch之后就要开始进行数据同步:

  1. 首先收到来自Leader的一个确认同步类型的包,即差异化同步DIFF、全量同步SNAP、回滚同步TRUNC
  2. 接收来自Leader的数据,即PROPOSAL,每一个PROPOSAL之后跟随一个COMMIT
  3. 数据同步结束后会收到NEWLEADER包,确认Leader
  4. Leader确认结束之后会收到UPTODATE,表明Follower已经与Leader同步,可以开始处理来自客户端的请求

源码过程如下:
在这里插入图片描述

Follower的初始化工作介绍到此结束。

FollowerZooKeeperServer

它的作用与LeaderLeaderZooKeeperServer类似,所以我们只介绍它定义的Processor
在这里插入图片描述

FollowerRequestProcessor:它的工作主要是识别出当前请求是否为事务请求,如果是事务请求,在提交给CommitProcessor后会继续将其发送给Leader进行处理。

SendAckRequestProcessor:在SyncRequestProcessor完成事务日志记录后会通过SendAckRequestProcessor向Leader发送对Proposal的反馈信息,与Leader的AckRequestProcessor本地操作不同,它是一个远程反馈。

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

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

相关文章

计算机终端核心安全配置规范

声明 本文是学习 政务计算机终端核心配置规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 范围 本标准提出了政务计算机终端核心配置的基本概念和要求,规定了核心配置的自动化实现方法,规范了核心配置实施流程。 本标准适…

【Terraform学习】使用 Terraform 创建Amazon VPC(Terraform-AWS最佳实战学习)

使用 Terraform 创建Amazon VPC 实验步骤 前提条件 安装 Terraform: 地址 下载仓库代码模版 本实验代码位于 task_vpc 文件夹中。 变量文件 variables.tf 在上面的代码中,您将声明,aws_access_key,aws_secret_key和 区域变量…

pxe linux7,PXE+Kickstart 实现自动安装系统

部署准备 服务器 操作系统:rhel7.7 软件准备: rhel-server-7.5-x86_64-dvd.iso、rhel-server-7.7-x86_64-dvd.iso 客户机 硬件配置:至少2G以上内存 基础环境准备 关闭selinux sed -i “s/SELINUXenforcing/SELINUXdisabled/g” /etc/…

Linux搭建SSLVpn

安装http、ssl服务 编辑http配置文件 修改http的136行,276行以及990行 1、136行将监听端口注释 2、276行和990行修改为自己的域名和要访问的端口 修改http文档最后那部分 新添ssl配置信息,将端口修改为443(截图错了server.key应该放在/etc/…

jenkins Linux如何修改jenkins 默认的工作空间workspace

由于jenkins默认存放数据的目录是/var/lib/jenkins,一般这个var目录的磁盘空间很小的,就几十G,所以需要修改jenkins的默认工作空间workspace 环境 jenkins使用yum安装的 centos 7 正题 1 查看jenkins安装路径 [rootlocalhost jenkins_old_data]# rpm…

【80天学习完《深入理解计算机系统》】第九天 3.2 数据传送指令【mov】【栈和堆】【leaq】【一元操作】【二元操作】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

如何优雅的使用Git?

第一部分:Git的基本概念和初始设置 Git是一个分布式版本控制系统,它允许多人共同工作,同时跟踪和管理项目的版本历史。使用Git,您可以恢复旧版本、创建新分支进行实验,并与其他开发者进行协作,而不会影响主…

基于AWS的3D模型搜索服务实现

3D模型广泛应用于计算机游戏、电影、工程、零售业、广告等许多领域。市场上有很多制作3D模型的工具,但几乎没有工具可以直观地搜索3D模型数据库以找到类似的3D模型 因为开发好的 3D 模型搜索工具非常具有挑战性。 它需要复杂的计算和 AI/ML 框架来创建模型描述符并提…

【MySQL系列】Select语句单表查询详解(二)ORDERBY排序

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

C语言:选择+编程(每日一练Day8)

目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:字符个数统计 思路一: 题二:多数元素 思路一: 本人实力有限可能对一些…

em 和 rem 的区别

前言 em 和 rem 都是相对单位,在使用时由浏览器转换为像素值,具体取决于你的设计中的字体大小设置。 如果你使用值 1em 或 1rem,它可以被浏览器解析成 从16px 到 160px 或其他任意值。 em 和 rem 的区别 em 和 rem 单位之间的区别是浏览器…

k8s 安装 istio(二)

3.3 部署服务网格调用链检测工具 Jaeger 部署 Jaeger 服务 kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.16/samples/addons/jaeger.yaml 创建 jaeger-vs.yaml 文件 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata…

【面试】一文讲清组合逻辑中的竞争与冒险

竞争的定义:组合逻辑电路中,输入信号的变化传输到电路的各级逻辑门,到达的时间有先后,也就是存在时差,称为竞争。 冒险的定义:当输入信号变化时,由于存在时差,在输出端产生错误&…

Debug result = unpickler.load() ModuleNotFoundError: No module named ‘models‘

1.torch训练的yolov5转trt出现问题如下&#xff1a; Using CUDA device0 _CudaDeviceProperties(nameNVIDIA GeForce RTX 3080, total_memory10017MB)Find Pytorch weight Traceback (most recent call last):File "export.py", line 243, in <module>ckpt t…

Mac nvm 切换为淘宝镜像

编辑环境配置 # 或者 vim ~/.bash_profile $ vim ~/.zshrc贴入镜像 # 淘宝镜像 export NVM_NODEJS_ORG_MIRRORhttp://npm.taobao.org/mirrors/node export NVM_IOJS_ORG_MIRRORhttp://npm.taobao.org/mirrors/iojs# nvm环境配置 export NVM_DIR"$HOME/.nvm"[ -s &quo…

【实战】十一、看板页面及任务组页面开发(四) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十六)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

使用haproxy搭建web架构

haproxy HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。 HAProxy提供了可以在七层和四层两种负载均衡能力&#xff0c;它可以提供高可用性、负载均衡、及基于TCP和HTTP应用的代理。适用于负载大的Web站点&#xff0c;在运行在硬件上可…

libdrm全解析十九 —— 源码全解析(16)

接前一篇文章&#xff1a;libdrm全解析十八 —— 源码全解析&#xff08;15&#xff09; 本文参考以下博文&#xff1a; DRM 驱动程序开发&#xff08;VKMS&#xff09; 特此致谢&#xff01; 本文继续对include/drm/drm.h中实际功能宏定义进行讲解。 27. DRM_IOCTL_SET_SAR…

在React中,如何进行组件间的通信?请解释一下React的生命周期方法(Lifecycle Methods)是什么,以及它们的作用。

1、在React中&#xff0c;如何进行组件间的通信&#xff1f; 在React中&#xff0c;组件间的通信主要依赖于以下三种方式&#xff1a; Props&#xff1a;这是React中最重要的组件间通信方式。你可以将数据从一个组件传递到另一个组件&#xff0c;数据可以是简单的数据&#x…

To_Heart—题解——P6234 [eJOI2019] T形覆盖

link. 突然很想写这篇题解。虽然题目不算难。 考场只有30分是为什么呢&#xff1f;看来是我没有完全理解这道题目吧&#xff01; 首先很明显的转换是&#xff0c;把 T 型覆盖看成十字形&#xff0c;再考虑最后减去某一块的贡献。 然后然后直接往原图上面放十字形!对于每一个…