《Zookeeper》源码分析(十五)之 选举算法

FastLeaderElection

FastLeaderElection实现了接口Election,选举方法为lookForLeader(),选举算法的核心逻辑也在该方法中。

数据结构

在这里插入图片描述

构造函数

在这里插入图片描述

start()

启动选举通信网络
在这里插入图片描述

lookForLeader()

选举核心算法

FastLeaderElection.logicalclock属性用于标识当前leader的选举轮次,zookeeper中规定所有有效的投票必须都在同一轮次中,所以,每发起新一轮的投票都会进行自增操作,如代码中的第2步;初始阶段,每个服务器都会推举自己成为leader,如第3步;初始完成后向集群中的所有服务器发送自己的选票,如第4步;服务器不断接收来自其他服务器的投票,此时如果没有收到任何投票,那么会检查是否连接正常,如果不正常则先建立连接,再重新发送自己的投票,如第6步;在处理选票的时候会根据选票发送服务器的状态进行不同的处理,如第7/8/9步。
在这里插入图片描述

接下来具体分析每一步的过程

1. 向集群服务器发送投票sendNotifications()

在这里插入图片描述

2. 如果未收到任何选票则重新发送投票

在这里插入图片描述

3. 对方服务器在选举中LOOKING

前面我们介绍Vote类的时候提到过投票PK,从选举轮次epoch、ZXID和SID三个因素来考虑

  1. 首先比较选举轮次epoch,如果外部投票的选举轮次低于内部投票则丢弃外部投票,如第2步
  2. 如果外部投票的选举轮次高于内部投票,则更新内部选举轮次,然后再继续PK投票决定是否更新内部推举的leader信息,如第1步
  3. 一致的话直接PK投票,如第3步

投票PK结束后进行汇总,如第4步

统计投票,如第5/6步

投票统计结束后,如果此时已经产生leader,则更新当前服务器装填,如第10步。

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

4. 对方服务器是learner

在这里插入图片描述

5. 对方服务器是Leader

在这里插入图片描述

至此,选举的模块介绍到此结束,当Leader选举结束后各个服务器的角色也确定,接下来就是各种服务器角色的初始化工作,未完待续。

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

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

相关文章

从零开发短视频电商 自动化测试WebUI端到端测试-Playwright

文章目录 Playwright是什么Playwright入门示例添加Maven依赖示例代码启动验证 功能自动等待内置Web断言可视化UI模式减慢操作截图录屏脚本录制 高级识别验证码 Playwright是什么 https://playwright.dev/ https://playwright.dev/java/ Playwright为现代 Web 应用程序提供可…

linux 系统中vi 编辑器和库的制作和使用

目录 1 vim 1.1 vim简单介绍 1.2 vim的三种模式 1.3 vim基本操作 1.3.1命令模式下的操作 1.3.2 切换到文本输入模式 1.3.3 末行模式下的操作 2 gcc编译器 2.1 gcc的工作流程 2.2 gcc常用参数 3 静态库和共享(动态)库 3.1库的介绍 3.2静态…

实现Java异步调用的高效方法

文章目录 为什么需要异步调用?Java中的异步编程方式1. 使用多线程2. 使用Java异步框架 异步调用的关键细节结论 🎉欢迎来到Java学习路线专栏~实现Java异步调用的高效方法 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博…

Python 3 使用HBase 总结

HBase 简介和安装 请参考文章:HBase 一文读懂 Python3 HBase API HBase 前期准备 1 安装happybase库操作hbase 安装该库 pip install happybase2 确保 Hadoop 和 Zookeeper 可用并开启 确保Hadoop 正常运行 确保Zookeeper 正常运行3 开启HBase thrift服务 使用命…

【EI复现】一种建筑集成光储系统规划运行综合优化方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

目标检测(Object Detection)

文章目录 1. 目标检测1.1 目标检测简要概述及名词解释1.2 IOU1.3 TP TN FP FN1.4 precision(精确度)和recall(召回率) 2. 边框回归Bounding-Box regression3. Faster R-CNN3.1 Faster-RCNN:conv layer3.2 Faster-RCNN&…

跨境电商平台(例如阿里巴巴、虾皮)的商品数据如何收集?

跨境电商是指通过互联网,以跨越国家或地区边界的方式进行电子商务交易的商业行为。传统的电子商务通常是在同一国家或地区内进行,而跨境电商则侧重于跨国贸易。跨境电商通过在线平台(如阿里巴巴、亚马逊等)或第三方服务商&#xf…

【数据结构】堆的实现,堆排序以及TOP-K问题

目录 1.堆的概念及结构 2.堆的实现 2.1初始化堆 2.2销毁堆 2.3取堆顶元素 2.4返回堆的大小 2.5判断是否为空 2.6打印堆 2.7插入元素 2.8堆的向上调整 2.9弹出元素 2.10堆的向下调整 3. 建堆时间复杂度 4. 堆的应用 4.1 堆排序 4.2 TOP-K问题 1.堆的概念及结构 …

FFmpeg5.0源码阅读——VideoToobox硬件解码

摘要:本文描述了FFmpeg中videotoobox解码器如何进行解码工作,如何将一个编码的码流解码为最终的裸流。   关键字:videotoobox,decoder,ffmpeg   VideoToolbox 是一个低级框架,提供对硬件编码器和解码器的直接访问。 它提供视频…

WebRTC音视频通话-RTC直播本地视频及相册视频文件

WebRTC音视频通话-RTC直播本地视频及相册视频文件 WebRTC音视频通话-RTC直播本地视频文件效果图如下 WebRTC音视频通话-RTC直播本地视频文件时候,用到了AVPlayer、CADisplayLink。 一、通过AVPlayer播放本地视频 AVPlayer是什么? AVPlayer是基于AV…

35_windows环境debug Nginx 源码-CLion配置CMake和启动

文章目录 生成 CMakeLists.txt 组态档35_windows环境debug Nginx 源码-CLion配置CMake和启动生成 CMakeLists.txt 组态档 修改auto目录configure文件,在 . auto/make 上边增加 . auto/cmake, 大概在 106 行。在 auto 目录下创建cmake 文件其内容如下: #!/usr/bin/env bash NG…

从外部访问K8s中Pod的五种方式

hostNetwork、 hostPort、 NodePort、 LoadBalancer、 Ingress 暴露Pod与Service一样,因为Pod就是Service的backend 1、hostNetwork:true 这是一种直接定义 Pod 网络的方式。 如果在 Pod 中使用 hostNetwork:true 配置, pod 中运行的应用程序…

C++头文件

C头文件 一般头文件特殊头文件windows.hbits/stdc.h 一般头文件 C头文件是一种包含预定义函数、类和变量声明的文件。它们通常用于在源代码文件中引入外部库或模块的功能。 头文件的作用是提供程序所需的声明信息,以便在源代码文件中使用这些声明。当你在源代码文…

将vue项目通过electron打包成windows可执行程序

将vue项目打包成windows可执行程序 1、准备好dist将整个项目打包 npm run build2、安装electron依赖 npm install electron --save-dev npm install electron-packager --save-dev"electron": "^13.1.4", "electron-packager": "^15.2.0…

九耶丨阁瑞钛伦特-在项目中找到的经典BUG是什么?

在项目中找到的经典BUG有很多种,以下是其中一些常见的例子: 空指针异常(NullPointerException):当程序试图访问一个空对象或未初始化的变量时,会抛出空指针异常。这通常是由于缺少对变量的正确初始化或检查…

【Datawhale 科大讯飞-基于论文摘要的文本分类与关键词抽取挑战赛】机器学习方法baseline

内容 科大讯飞AI开发者大赛NLP赛道题目: 基于论文摘要的文本分类与关键词抽取挑战赛 任务: 1.机器通过对论文摘要等信息的理解,判断该论文是否属于医学领域的文献。 2.提取出该论文关键词。 数据集的获取 训练集: 这里读取tit…

vue+flask基于知识图谱的抑郁症问答系统

vueflask基于知识图谱的抑郁症问答系统 抑郁症已经成为当今社会刻不容缓需要解决的问题,抑郁症的危害主要有以下几种:1.可导致病人情绪低落:抑郁症的病人长期处于悲观的状态中,感觉不到快乐,总是高兴不起来。2.可导致工…

智慧工地平台工地人员管理系统 可视化大数据智能云平台源码

智慧工地概述: 智慧工地管理平台是以物联网、移动互联网技术为基础,充分应用大数据、人工智能、移动通讯、云计算等信息技术,利用前端信息采通过人机交互、感知、决策、执行和反馈等,实现对工程项目內人员、车辆、安全、设备、材…

浏览器渲染原理 - 输入url 回车后发生了什么

目录 渲染时间点渲染流水线1,解析(parse)HTML1.1,DOM树1.2,CSSOM树1.3,解析时遇到 css 是怎么做的1.4,解析时遇到 js 是怎么做的 2,样式计算 Recalculate style3,布局 la…

Spring Cloud 系列之OpenFeign:(7)链路追踪zipkin

传送门 Spring Cloud Alibaba系列之nacos:(1)安装 Spring Cloud Alibaba系列之nacos:(2)单机模式支持mysql Spring Cloud Alibaba系列之nacos:(3)服务注册发现 Spring Cloud 系列之OpenFeign:(4)集成OpenFeign Spring Cloud …