zookeeper底层细节

news2024/9/20 1:15:47

 zk

临时节点和watch机制实现注册中心自动注册和发现,数据都在内存,nio  多线程模型;

    cp注重一致性,数据不一致时集群不可用

事务请求处理方式

1.all事务由唯一服务器处理

2.将客户端事务请求转成proposal分发follower

3.等待半数ack,再commit

对事务性支持依赖

    zoo_create_op_int  /   zoo_delete_op_init  / zoo_set_op_init /zoo_check_op_init

每个函数在客户端初始化operation,准备好事务all操作后,zoo_multi提交所有操作,一个失败返回第一个失败操作的状态信号,版本号同一原子性操作

zab

支持崩溃恢复的原子广播协议,

 领导选举:leader(写)维护follower列表

 数据同步:所有节点数据要和leader保持一致,高可用分区容错,follower本地事务日志

 请求广播:leader收到写请求,两阶段提交(事务proposal形式)广播写请求,一半ack=成功

模式:崩溃恢复 消息广播
消息广播

所有请求由leader转成proposal分发给其他服务follower

过半follower反馈信息,leader广播commit,将之前的proposal提交

崩溃恢复

被leader提交的proposal最终被follower服务提交

  •    新选举的leader节点含最大的zxid

丢弃被leader提出但未被提交的proposal

  •    被选举出来的leader不能有未提交的proposal

leader网络中断 崩溃退出 重启 ,选新leader后过半机器该leader完成同步 进入广播模式

   新加入的机器 先恢复模式然后同步完广播

保证消息有序

1.先分配全局递增id(zxid)  每个follower分配单独FIFO队列(异步解耦) 发送proposal广播 

2.follower接到写本地事务,返回ack

  leader收半数以上follower的ack响应消息,广播commit消息 自身完成事务提交

3.follower接收到commit消息 将上一条事务提交

数据同步

    完成leader选举,leader先确认事务日志所有proposal已被集群过半服务器commit

    确保follower能接收每条事务的proposal,能将提交的事务应用到内存,完成后才加入到真正的follower列表

丢失的proposal

zxid 64位

   低32位单增计数器针对每一个请求

    高32位leader周期的epoch编号:当前集群所处年代/周期 leader变更+1

  新的leader中取本地事务日志最大编号的proposal的zxid解析epoch编号+1,低32归零

节点状态

following   /   leading   /   election looking选举状态正在找leader   /   observing只读节点

投票再同一轮,logicalClock标识标记轮数 开始前先清空上一轮投票情况

watch

znode设置,一次性触发器;3.6可递归触发多次

角色:客户端线程/客户端的watchManager/zk服务器

   客户端向zk服务器注册watcher监听,监听信息存储到客户端watchManager中

   zk节点变化通知客户端,客户端调用相应watcher到回调

   串行同步顺序性(w放队列中)

选举

zxid  myid 投票pick,大的优先

观察者机制observer节点

动态扩展zk集群,不降低写性能

不参与投票,只获取投票结果,可处理读写请求,写转leader

负责接收leader同步过来的提交数据 

数据一致性模型

cap 强一致,更新操作完 多个后续进程访问返回最新的更新过的值

弱一致:系统数据写入后 不一定立即读取最新写入数据 

最终一致性:所有数据副本 经过一段时间的同步后 最终能够达到一致的状态

   因果一致性:因果关系的操作顺序得到保证

   会话一致性:对系统数据的访问过程框定在一个会话中

paxos强一致

 角色:

proposer提议者:发出的提案被多数acceptor接受,该提案value被选定

acceptor接受者:只要acceptor接受了某个提案,acceptor该提案的value被选定

learners记录员:acceptor告诉learner哪个value被选定,learner认为哪个value被选定

阶段:

 proposer收到client请求或发现本地有未提交的值,选择提案编号n,发送prepare请求

 acceptor收到编号n的prepare请求,如已有提交的value对比编号,大于n则拒绝回应 否返v和号

  无提交记录,判断是否有编号n1,n1>n 拒绝响应,否则n1改为n,响应prepare

proposer收到多数acceptor发出n的响应,[n,v]提案的accept请求给半数以上的acceptor

acceptor收到accept请求,对比本地的编号 =< n 接受该值 提交记录value 否则拒绝请求

proposer收到大多数acceptor,选定value 同步给leader

活锁:accept一直被拒绝,加n,另一个proposer也这么操作,accept一致失败

multi-paxos:确定多个值,接收accept请求后,一定时间内不再accept其他节点的请求,保证后续编号不需要prepre

raft算法:分布式一致性

leader负责replicated log管理,负责客户端更新请求,复制到follower

状态: leader/follower/candidate选举产生新的leader

选举:

初始化,all都是follower 随机超时 变成candidate 发起选举

   f在election timeout内没有收到l心跳 发起选举

term:任期,每个节点维持着,递增 存储在log的entry中

   每次rpc通信传递该任期号,大于本地切换为follower,小于报错

通信:requestVote RPC 负责选举(lastindex lastTerm)

    appendEntries RPC负责数据交互

日志序列:每个节点维持着持久化log,一致性协议算法 每个节点log一致 顺序存放

选举:增加term切换到candidate  最多投一票 多数则leader发送心跳 

数据模型

持久节点: 一致存储zk上

临时节点:会话超时/异常 删除

有序节点:单调递增的数字作为后缀追加

节点内容

二进制数组byte data: 存储节点的数据  ACL访问控制  子节点数据  自身信息的stat

stat+节点路径:状态信息

czxid创建节点的事务id  ctime创建时间  mzxid最后一次被更新的事务id    mtime最后更新时间

version版本号  pzxid子节点最后一次被修改的事务id    cversion子节点版本  averson:acl版本号

ephemeralOwner创建节点的sessionId 持久节点 值为0

dataLenght数据内容长度    numChildren子节点个数

命名服务

   指定名字获取资源或服务地址,zk创建全局唯一的路径,路径可作为名字

   机器 服务地址 远程对象 据特定名字获取资源的实体 服务地址 提供者信息

配置管理

  配置信息保存到znode,改变时watcher通知

集群管理

   监控和控制,机器挂了 对应临时目录删除 被感知

应用场景

发布/订阅:配置中心  

负载均衡:提供服务者列表

命名服务:服务名到服务地址映射

分布式协调/通知:watch机制和临时节点,任务进度 

集群管理:临时节点 加入 退出

分布式锁

分布式队列:

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

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

相关文章

windows访问远程服务器上容器的几种直接方式

远程服务器 host上有一个docker container&#xff0c;如何通过 client 直接登陆 container 呢&#xff1f; container 使用 host 的网络&#xff0c;即使用了 --networkhost先配置 container的 ssdh&#xff08;/etc/ssh/sshd_config&#xff09;&#xff0c;相关参数设置 po…

使用导入车辆出险报告接口API接口实现车辆出险查询

引言&#xff1a; 现在&#xff0c;汽车事故频发&#xff0c;我们经常听到车辆出险的消息。对于购车用户而言&#xff0c;了解车辆的出险、理赔和事故记录是十分重要的。而如何快速查询到这些信息&#xff0c;成为了用户们在掌握车辆情况上的一个难点。幸运的是&#xff0c;挖数…

高效备考2024年AMC10:吃透2000-2023年1250道真题(限时免费送)

我们今天继续来随机看5道AMC10真题&#xff0c;以及详细解析&#xff0c;这些题目来自1250道完整的官方历年AMC10真题库。通过系统研究和吃透AMC10的历年真题&#xff0c;参加AMC10的竞赛就能拿到好名次。即使不参加AMC10竞赛&#xff0c;掌握了这些知识和解题思路后初中和高中…

【NBUOJ刷题笔记】递推_递归+分治策略1

0. 前言 PS&#xff1a;本人并不是集训队的成员&#xff0c;因此代码写的烂轻点喷。。。本专题一方面是巩固自己的算法知识&#xff0c;另一方面是给NBU学弟学妹们参考解题思路&#xff08;切勿直接搬运抄袭提交作业&#xff01;&#xff01;&#xff01;&#xff09;最后&…

QT5.14.2 Qt布局调和术:精妙UI设计背后的自适应魔法

欢迎来到Qt世界的一角&#xff0c;今天我们要探索的是Qt中的布局管理以及控件自适应大小调整的艺术。在这篇文章中&#xff0c;我们不仅会讨论理论&#xff0c;还会一起动手实践&#xff0c;弄清楚如何打造出既美观又实用的用户界面。 一、布局管理概览 布局管理是Qt中的核心概…

2024腾讯云优惠券领取_云服务器代金券_优惠券查询和使用方法

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

HTML5语法总结

文章目录 一.HTML基本框架二.标题标签三.段落标签四.换行与水平线标签五.文本格式化标签(加粗、倾斜、下划线、删除线)六.图像标签扩展&#xff1a;相对路径,绝对路径与在线网址 七.超链接标签八.音频标签九.视频标签十.列表标签十一.表格标签扩展&#xff1a;表格结构标签合并…

表情生成器微信小程序版

1.纯前端输出&#xff0c;无需后台&#xff0c;无需域名&#xff0c;速度杠杠快&#xff01; 2.完美支持微信端和抖音端&#xff1b; 3.双端均支持配置开启流量主广告&#xff0c;包括&#xff1a;激励视频广告、插屏广告、banner广告、原生广告、封面广告等&#xff1b; 4.…

【蓝桥杯入门记录】继电器、蜂鸣器及原理图分析

一、继电器、继电器概述 &#xff08;1&#xff09;蜂鸣器原理 蜂鸣器的发声原理由振动装置和谐振装置组成&#xff0c;而蜂鸣器又分为无源他激型与有源自激型&#xff0c;蜂鸣器的发声原理为: 1、无源他激型蜂鸣器的工作发声原理是&#xff1a;方波信号输入谐振装置转换为声…

阿里云服务器2核4G服务器收费价格表,1个月和一年报价

阿里云2核4G服务器多少钱一年&#xff1f;2核4G服务器1个月费用多少&#xff1f;2核4G服务器30元3个月、85元一年&#xff0c;轻量应用服务器2核4G4M带宽165元一年&#xff0c;企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

【unity实战】时间控制 昼夜交替 四季变化 天气变化效果

最终效果 文章目录 最终效果日期季节控制时间昼夜交替素材如果没有天空盒&#xff0c;需要自己配置新增SkyboxBlendingShader.shader&#xff0c;控制天空盒平滑过渡交替变化 下雨下雨粒子效果控制雨一直跟随玩家&#xff0c;但是旋转不跟随控制不同天气 源码完结 日期季节控制…

C++ —— 内存管理

目录 1. C内存分布 2. C 内存管理方式 2.1 new 和 delete 操作内置类型 2.2 new 和 delete 操作自定义类型 3. operator new与operator delete函数 4. new和delete的实现原理 5. malloc/free 和 new/delete 的区别 1. C内存分布 首先看一段代码&#xff1a; int globalV…

短视频矩阵系统源头技术开发--每一次技术迭代

短视频矩阵系统源头开发3年的我们&#xff0c;肯定是需求不断的迭代更新的&#xff0c;目前我们已经迭代了3年之久&#xff0c;写技术文章已经写了短视频矩阵系统&#xff0c;写了3年了&#xff0c;开发了3年了 短视频矩阵获客系统是一种基于短视频平台的获客游戏。短视频矩阵系…

18个惊艳的可视化大屏(第29辑):机械自动化设备仪器

当涉及到机械自动化生产管理时&#xff0c;可视化大屏可以提供以下九个价值&#xff1a; 实时监控 可视化大屏可以实时显示生产线上的各个环节和设备的运行状态。运营人员可以通过大屏实时监控生产线的生产效率、设备运行状况等关键指标&#xff0c;及时发现并解决问题&#…

面试笔记——Redis(集群方案:主从复制、哨兵模式和分片集群)

主从复制 在 Redis 主从集群中&#xff0c;一个主节点&#xff08;Master&#xff09;负责处理客户端的读写请求&#xff0c;而多个从节点&#xff08;Slave&#xff09;则负责复制主节点的数据&#xff0c;并对外提供读取服务——解决高并发问题。 主节点&#xff08;Master&…

echart多折线图堆叠 y轴和实际数据不对应

当使用 ECharts 绘制堆叠折线图时&#xff0c;有时会遇到 y 轴与实际数据不对应的问题。 比如明明值是50&#xff0c;但折线点在y轴的对应点却飙升到了二百多 解决办法&#xff1a; 查看了前端代码发现在echart的图表中有一个‘stack’的属性&#xff0c;尝试把他删除之后y轴的…

带大家深入理解redis的主从复制

为何需要主从复制 Redis作为开发过程中经常用到的缓存数据库&#xff0c;我们在开发过程中可能会遇到各种各样的问题&#xff0c;比如&#xff1a; Redis的读并发量太大怎么办&#xff1f; 单机版的Redis挂掉怎么办&#xff1f; 我们不仅需要并发&#xff0c;更需要安全&…

力扣热门算法题 52. N 皇后 II,53. 最大子数组和,54. 螺旋矩阵

52. N 皇后 II&#xff0c;53. 最大子数组和&#xff0c;54. 螺旋矩阵&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.20 可通过leetcode所有测试用例。 目录 52. N 皇后 II 解题思路 完整代码 Python Java 53. 最大子数组…

【消息队列开发】 虚拟主机设计——操作绑定

文章目录 &#x1f343;前言&#x1f332;添加绑定&#x1f333;删除绑定⭕总结 &#x1f343;前言 本次开发任务&#xff1a; 实现对绑定的添加与绑定 &#x1f332;添加绑定 对于绑定的操作相较于前面对交换机和队列的操作就会麻烦一点了 我们分为以下七步来实现&#x…

UE4 Json事件设置Asset值

通过Json事件来设置&#xff0c;比如骨骼网格体&#xff08;换皮&#xff09;等等