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

news2024/11/24 2:09:38

目录

  • 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.coloradmin.cn/o/923400.html

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

相关文章

Docker 轻量级可视化工具Portainer

1. 是什么 Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 2. 安装 2.1 官网 https://www.protainer.io/ https://docs.portainer.io/ce-2.9/start/install/server/docker/linux 2.2 …

【C# Programming】编程入门:数组、操作符、控制流

目录 一、数组 1、数组的声明 1.1 一维数组声明: 1.2 多维数组声明: 2、数组的实例化和赋值 2.1 数组在声明时通过在花括号中使用以逗号分隔的数据项对数组赋值, 例如: 2.2 如果在声明后赋值,则需…

RT-Thread 线程管理(学习一)

RT-Thread是支持多任务的操作系统,多任务通过多线程的方式实现。线程是任务的载体,也是RTT中最基本的调度单位。 线程执行时的运行环境称为上下文,具体来说就是各个变量和数据,包括所有的寄存器变量、堆栈、内存信息等。 特点 …

前端需要理解的 TypeScript 知识

Typescript是添加了类型系统的JavaScript,属于弱类型(即允许隐式类型转换)、静态类型语言,适应于任何规模的项目,支持 ES6,由微软开发并开源。Typescript增加的功能包括:类型批注和编译时类型检…

支持向量机SVM原理

目录 支持向量机SVM原理 SVM原理 从线性分类器说起 SVM的目标是最大化分类间隔 转化为对偶问题求解 支持向量机SVM原理 【数之道】支持向量机SVM是什么,八分钟直觉理解其本质_哔哩哔哩_bilibili SVM是由Vapnik等人于1995年提出的,在之后的20多年里…

win11录屏,自带录屏,无需下载第三方软件

1.按win键,输入“截图”,打开截图工具 2.选择录屏功能 3.新建录制 4.选择录制区域录制就可以了

nginx会话保持

ip_hash:通过IP保持会话 作用: nginx通过后端服务器地址将请求定向的转发到服务器上。 将客户端的IP地址通过哈希算法加密成一个数值 如果后端有多个服务器,第一次请求到服务器A, 并在务器登录成功,那么再登录B服务器就要重新…

java-红黑树

节点内部存储 红黑树规则 或者: 红黑树添加节点规则: 添加节点默认是红色的(效率高) 红黑树示例 注:红黑树增删改查性能都很好

【Vue框架】 router和route是什么关系

前言 之前没太注意,写着写着突然发现它们貌似不太一样,记录以下,回顾的看总结就好。 1、总结✨ route:当前激活路由的对象,用于访问和操作当前路由的信息 router:管理多个route的对象,整个应…

[HarekazeCTF2019]Easy Notes-代码审计

文章目录 [HarekazeCTF2019]Easy Notes-代码审计 [HarekazeCTF2019]Easy Notes-代码审计 登录之后有几个功能点,可以添加节点,然后使用Export导出 我们查看源码, 我们发现想要拿到flag的条件时$_SESSION[admin]true 如果我们能够控制sessio…

具备这7 个功能将让你的网站聊天机器人更加出色

对于您和您的客户来说,客户支持体验是最重要的。这里有 7个强大的功能可以完善和增强您的网站聊天机器人。 在网站上使用聊天机器人可能是您可以为客户支持团队做出的最佳决策之一。然而,在2023 年互联网发达的今天,您的网站聊天机器人可以实…

如何为开源项目做出贡献?

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Pytorch学习:常见数据集torchvision.datasets及数据集的使用DataLoader

文章目录 1. Datasets常见数据集1.1 CIFAR101.2 Fashion-MNIST1.3 ImageNet 2. DataLoader2.1 shuffle2.2 drop_last 1. Datasets常见数据集 Torchvision在 torchvision.datasets 模块中提供了许多内置的数据集,以及用于构建自己的数据集的实用程序类。 官方文档&a…

基于象群算法优化的BP神经网络(预测应用) - 附代码

基于象群算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于象群算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.象群优化BP神经网络2.1 BP神经网络参数设置2.2 象群算法应用 4.测试结果:5.Matlab代码 摘要…

白酒行业半年报:舍得酒业营收净利碾压水井坊

次高端川酒下半场,谁是A股“川酒老三”? “川酒六朵金花”中的次高端白酒代表:水井坊(600779.SH)、舍得酒业(600702.SH)于近日公布了2023年半年报,其业绩呈现不同趋势。 「不二研究」据其半年报发现:今年上半年&…

基于函数计算一键部署 Stable Diffusion

一、资源方式介绍 本实验支持开通免费试用、个人账户资源两种实验资源方式。 建议首次开通函数计算用户选择开通免费试用。 函数计算老用户选择个人账户资源。 在实验开始前,请您选择其中一种实验资源,单击确认开启实验。 二、选择开通免费试用&…

迅为RK3568开发板GPIO之外接模块

在迅为RK3568开发板上有一组GPIO,可以用来外接各种外设模块,从面实现一系列好玩的功能,一起来看看各个模块合集吧 RFID模块: 工作电流:13—20mA/直流3.3V 空闲电流:10-13mA/直流3.3V 休眠电流:…

badgerdb中的logfile

logfile的作用 logfile是一种日志结构,用来记录日志,lsm tree是日志追加写的模式,在bagerdb中,vlog和sst在磁盘中的存放方式都是使用的logfile结构 // memTable structure stores a skiplist and a corresponding WAL. Writes t…

【MySQL】MySQL中MyIsAM和InnoDB存储引擎的区别(面试必考!!)

目录 MyIsAM和InnoDB的区别 区别主要在于: 事务支持: 并发控制: 外键支持: 数据缓存和索引: 这么说可能不太好理解,让我们展开聊聊 数据一致性和恢复: InnoDB肯定是比myIsam的功能强大的&#xff0…

GNU make系列之介绍Makefile

一.欢迎来到我的酒馆 在本章节介绍Makefile。 目录 一.欢迎来到我的酒馆二.GNU make 预览三.一个简单的Makefile四.make程序如何处理Makefile文件 二.GNU make 预览 2.1 GNU make工具会自动决定哪些程序需要被重新编译,并且执行相应的命令来重新编译程序。在本系列博…