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

《Zookeeper》源码分析(九)之选举通信网络

在上一篇文章中讲到QuorumCnxManager,它负责zookeeper服务器在选举期间最底层的网络通信,整个网络涉及到的类如下:

在这里插入图片描述

整个网络建立的过程如下:

  1. 选举前创建好QuorumCnxManager实例,并在QuorumCnxManager构造函数中创建好Listener实例
  2. 调用Listener.start()方法启动监听线程
  3. Listener获得CPU资源后执行run()方法,建立ListenerHandler,开始监听来自其他服务器的连接请求
  4. ListenerHandler监听到来自其他服务器的连接请求,创建当前服务器与目标服务器一对一的SendWorkerRecvWorker,并将SendWorker保存到QuorumCnxManager.senderWorkerMap
  5. 进行选举的时候会向集群中的所有服务器发送自己的选票,通过QuorumCnxManager.toSend()方法向QuorumCnxManager.queueSendMap中存放待发送的信息,等待SendWorker异步发送
  6. QuorumCnxManager.toSend()中会检测senderWorkerMap中是否存在目标服务器的发送线程SendWorker,如果不存在则调用connectOne()方法创建连接,connectOne()中会创建QuorumConnectionReqThread线程并将其放入connectionExecutor线程池中异步建立连接
  7. QuorumConnectionReqThread获得CPU资源后执行run()方法,接着调用QuorumCnxManager.initiateConnection()方法进行连接,连接建立成功后创建一对一的SendWorkerRecvWorker,并将SendWorker保存到QuorumCnxManager.senderWorkerMap
  8. RecvWorker接收到来自客户端的投票消息,将消息以Message的格式保存在QuorumCnxManager.recvQueue
  9. 选举期间会循环调用QuorumCnxManager.pollRecvQueue()方法从QuorumCnxManager.recvQueue中获取来自其他服务器的投票并进行处理。

QuorumCnxManager的工作原理大致如此,下文开始逐一具体分析这些类。

相关文章:

《Zookeeper》源码分析(九)之选举通信网络

在上一篇文章中讲到QuorumCnxManager,它负责zookeeper服务器在选举期间最底层的网络通信,整个网络涉及到的类如下: 整个网络建立的过程如下: 选举前创建好QuorumCnxManager实例,并在QuorumCnxManager构造函数中创建好…...

JVM——栈和堆概述,以及有什么区别?

方法栈 方法栈并不是某一个 JVM 的内存空间,而是我们描述方法被调用过程的一个逻辑概念。 在同一个线程内,T1()调用T2(): T1()先开始,T2()后开始;T2()先结束,T1()后结束。 堆和栈概述 从英文单词角度来…...

恒盛策略:沪指冲高回落跌0.26%,酿酒、汽车等板块走弱,燃气股拉升

10日早盘,两市股指盘中冲高回落,半日成交约4200亿元,北向资金净卖出超20亿元。 到午间收盘,沪指跌0.26%报3235.9点,深成指跌0.54%,创业板指跌0.28%;两市算计成交4202亿元,北向资金净…...

Mongodb 常用操作

// 查询 user_id 是否存在 db.getCollection("t_mongo_user").find({"user_id" : { $exists: true }}) // 查询 user_id 10 的记录 db.getCollection("t_mongo_user").find({"user_id" : 10}) // 排序 -1,按照 _id 倒…...

【python】-【】

文章目录 转义字符和原字符二进制与字符编码标识符和保留字变量的定义和使用变量字符串列表for 一、print会输出①数字②字符串(必须加引号)③含有运算符的表达式(例如 31 其中3,1是操作数,是运算符)&#…...

基于Elman神经网络的电力负荷预测

1 案例背景 1.1 Elman神经网络概述 根据神经网络运行过程中的信息流向,可将神经网络可分为前馈式和反馈式两种基本类型。前馈式网络通过引入隐藏层以及非线性转移函数可以实现复杂的非线性映射功能。但前馈式网络的输出仅由当前输人和权矩阵决定,而与网络先前的输出结果无关。…...

LeetCode 0088. 合并两个有序数组

【LetMeFly】88.合并两个有序数组:O(m 1) O(1)的做法 力扣题目链接:https://leetcode.cn/problems/merge-sorted-array/ 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2…...

定义行业新标准?谷歌:折叠屏手机可承受20万次折叠

根据Patreon账户上的消息,Android专家Mishaal Rahman透露,谷歌计划推出新的硬件质量标准,以满足可折叠手机市场的需求。Android原始设备制造商(OEM)将需要完成谷歌提供的问卷调查,并提交样品设备进行严格审…...

在vscode中配置C/C++环境GCC on Linux

https://code.visualstudio.com/docs/cpp/config-linux 官方文档 准备工作 为了能够在vs code中编译运行C/C程序,需要下载: Visual Studio Code C扩展插件,cuda,,, 对于该扩展插件,打开vs c…...

windows执行完LoadLibrary()后,可以删除源动态库文件,函数不会锁库文件

windows执行完LoadLibrary()后&#xff0c;可以删除源动态库文件&#xff0c;函数不会锁库文件。 #include <iostream> #include <Windows.h>int main() {char path[MAX_PATH]{};GetCurrentDirectoryA(sizeof(path), path);HMODULE lib LoadLibraryA("testd…...

ios 知识

IOS 类文件.h和.m中interface的区别 大家都知道我们在创建类文件时会发现&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend和 #import "ViewController.h"interface ViewController ()end那么他们之间有何区别呢&#x…...

8 | 美国航班数据分析

"在现代快节奏的生活中,航空旅行已经成为人们出行的重要方式之一。然而,航班的准时性一直以来都是旅客和航空公司关注的焦点。无论是商务出差还是休闲度假,乘客们都希望能够在既定的时间内安全、准时地到达目的地。而对于航空公司而言,准点运营不仅关乎乘客体验,还涉…...

app.use(express.json()) 使用

Express内置的中间件 自 Express 4.16.0 版本开始&#xff0c;Express 内置了 3 个常用的中间件&#xff0c;极大的提高了 Express 项目的开发效率和体验 express.static 快速托管静态资源的内置中间件&#xff0c;例如&#xff1a; HTML 文件、图片、CSS 样式等&#xff08;无…...

基于PyTorch的图像识别

前言 图像识别是计算机视觉领域的一个重要方向&#xff0c;具有广泛的应用场景&#xff0c;如医学影像诊断、智能驾驶、安防监控等。在本项目中&#xff0c;我们将使用PyTorch来开发一个基于卷积神经网络的图像识别模型&#xff0c;用来识别图像中的物体。下面是要识别的四种物…...

js合并数组对象(将数组中具有相同属性对象合并到一起,组成一个新的数组)

一、根据数组对象中某一key值&#xff0c;合并相同key值的字段&#xff0c;到同一个数组对象中&#xff0c;组成新的数组 1.原数组&#xff1a; var array [{ id: 1, name: Alice },{ id: 2, name: Bob },{ id: 1, age: 25 },{ id: 3, name: Charlie, age: 30 } ];2.合并后数…...

Spring BeanPostProcessor 接口的作用和使用

BeanPostProcessor 接口是 Spring 框架中的一个扩展接口&#xff0c;用于在 Spring 容器实例化、配置和初始化 bean 的过程中提供自定义的扩展点。通过实现这个接口&#xff0c;您可以在 bean 实例创建的不同生命周期阶段插入自己的逻辑&#xff0c;从而实现对 bean 行为的定制…...

Android 13 Hotseat定制化修改——006 hotseat图标禁止移动到Launcher中

目录 一.背景 二.方案 三.具体实践 一.背景 客户定制需要修改让hotseat中的icon不要移动到Launcher中,所以需要进行定制 二.方案 原生的Hotseat与Launcher是可以相互移动的,然后现在的需求是Hotseat中的图标只能在Hotseat中移动,所以需要做下限制 思路:在事件拦截的地…...

RabbitMQ 发布确认机制

发布确认模式是避免消息由生产者到RabbitMQ消息丢失的一种手段 发布确认模式 原理说明实现方式开启confirm&#xff08;确认&#xff09;模式阻塞确认异步确认 总结 原理说明 生产者通过调用channel.confirmSelect方法将信道设置为confirm模式&#xff0c;之后RabbitMQ会返回Co…...

微信小程序使用rich-text解析富文本字符串的时候,遇到image标签图片很大超过屏幕

场景&#xff1a; 使用uniapp开发微信小程序&#xff0c;解析富文本文章需求 用到的组件&#xff1a; u-view2.0的u-parse uniapp提供的rich-text 以上两种组件都是解析富文本的作用&#xff0c;一般用于富文本解析场景&#xff0c;比如解析文章内容&#xff0c;商品详情&am…...

使用IIS服务器部署Flask python Web项目

参考文章 ""D:\Program Files (x86)\Python310\python310.exe"|"D:\Program Files (x86)\Python310\lib\site-packages\wfastcgi.py"" can now be used as a FastCGI script processor参考文章 请求路径填写*&#xff0c;模块选择FastCgiModule&…...

电子墨水屏启动器终极指南:让你的电纸书焕然一新的E-Ink Launcher

电子墨水屏启动器终极指南&#xff1a;让你的电纸书焕然一新的E-Ink Launcher 【免费下载链接】E-Ink-Launcher E-reader Launcher for Android, Electronic paper book... 项目地址: https://gitcode.com/gh_mirrors/ei/E-Ink-Launcher 还在为电纸书卡顿、续航短、界面…...

被TMM拒稿后,我是如何用7个月时间在ACM TOMM上成功发表的(附详细修改清单)

从TMM拒稿到TOMM录用&#xff1a;一位研究者的7个月逆袭全记录 当那封来自TMM编辑部的拒稿邮件出现在收件箱时&#xff0c;我盯着屏幕足足五分钟没动——这是我们团队第三次大修后的最终裁决。作为博士生涯的第四篇论文&#xff0c;这次打击远比想象中严重。但正是这次挫败&…...

GLM-4.1V-9B-Base企业级应用:基于SpringBoot的智能图像审核微服务构建

GLM-4.1V-9B-Base企业级应用&#xff1a;基于SpringBoot的智能图像审核微服务构建 1. 引言&#xff1a;智能图像审核的行业需求 在电商平台、社交媒体和内容社区快速发展的今天&#xff0c;每天都有海量的图片内容需要审核。传统的人工审核方式不仅效率低下&#xff0c;而且成…...

FPGA实战:从真值表到硬件实现的译码器与优先编码器

1. 数字电路设计的核心基石&#xff1a;真值表与布尔代数 第一次接触FPGA开发时&#xff0c;我被Verilog代码和硬件描述弄得晕头转向&#xff0c;直到导师指着实验板上的LED灯说&#xff1a;"所有复杂的数字电路&#xff0c;本质上都是开关的组合"。这句话让我突然明…...

WeKnora在教育培训场景的应用:构建智能学习助手

WeKnora在教育培训场景的应用&#xff1a;构建智能学习助手 1. 引言 想象一下这样的场景&#xff1a;一位编程老师每天需要回答学生提出的上百个问题&#xff0c;从基础语法到复杂算法&#xff0c;每个问题都需要查阅不同的教材和讲义。或者一位语言学习者&#xff0c;面对厚…...

我让 Claude 和 Codex 同时审计 个模块,它们只在 个上达成共识凹

整体排查思路 我们的目标是验证以下三个环节是否正常&#xff1a; 登录成功时&#xff1a;服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端&#xff1a;浏览器是否成功接收并存储了该Cookie。 后续请求&#xff1a;浏览器在执行查询等操作…...

DeepSeek-R1-Distill-Qwen-1.5B实战:从零开始搭建本地大模型服务

DeepSeek-R1-Distill-Qwen-1.5B实战&#xff1a;从零开始搭建本地大模型服务 1. 模型介绍与环境准备 1.1 DeepSeek-R1-Distill-Qwen-1.5B模型特点 DeepSeek-R1-Distill-Qwen-1.5B是经过知识蒸馏优化的轻量级大语言模型&#xff0c;具有以下核心优势&#xff1a; 高效参数设…...

影墨·今颜新手必看:零基础玩转‘泼墨创作’式AI人像生成

影墨今颜新手必看&#xff1a;零基础玩转‘泼墨创作’式AI人像生成 想用AI生成一张媲美专业摄影的人像大片&#xff0c;但总觉得画面假假的&#xff0c;有种说不出的“塑料感”&#xff1f;试试看&#xff0c;用“泼墨”的方式创作一张照片。 这不是比喻。今天要介绍的「影墨…...

区块链身份认证机制

区块链身份认证机制&#xff1a;数字时代的身份革命 在数字化浪潮中&#xff0c;身份认证是保障隐私与安全的核心环节。传统的中心化认证方式依赖第三方机构&#xff0c;存在数据泄露、篡改和单点故障等风险。区块链技术的出现为身份认证带来了革命性变革&#xff0c;其去中心…...

React Fiber 调度机制性能优化

React Fiber 调度机制性能优化 React Fiber 是 React 16 引入的核心架构重写&#xff0c;旨在优化渲染性能&#xff0c;提升用户体验。传统的 React 采用递归方式处理组件更新&#xff0c;一旦开始就无法中断&#xff0c;可能导致主线程阻塞&#xff0c;影响动画、输入响应等关…...