【Zookeeper】四,Zookeeper节点类型、通知、仲裁、会话

news2024/11/29 0:15:19

文章目录

        • Zookeeper的架构
        • znode的版本
        • Zookeeper的节点类型
          • 层级树状结构
          • znode的不同类型
        • Zookeeper监视与通知
          • 通知的类型
        • Zookeeper的仲裁
        • Zk的会话
          • 会话的生命周期

Zookeeper的架构

Zookeeper的服务器端运行两种模式:独立模式(standalone)和仲裁模式(quorum)。
独立模式只是一个单独的服务器,Zk的状态无法进行复制。
仲裁模式下,Zk拥有一组服务器,称之为Zk集合,它们之间可以进行状态复制。
在这里插入图片描述

znode的版本

每个znode都有一个版本号,随着数据的变化而进行自增。比如执行set和delete两次操作,这两次调用以版本号作为转入参数,只有当传入的版本号与服务器上的版本号一致时才会调用成功。比如客户端c1对znode/config写入了一些配置信息,如果另外一个c2同时更新了这个znode,此时c1的版本号已经过期,c1调用set就会失败。

Zookeeper的节点类型
层级树状结构

在Zookeeper中,维护了一个小型的数据节点,这些节点称为znode,采用类似于文件系统的层级树状结构进行管理。
在这里插入图片描述根节点包含4个子节点,其中三个子节点拥有下一级节点,叶子节点存储了数据信息。

  • /workers下面的每个子节点保存了一个可用的从节点信息。
  • /tasks下面的每个znode子节点表示了已经创建,并等待从节点执行的任务信息。
  • /assign下面的每个znode子节点保存了分配到某个从节点的一个任务信息,当主节点为从节点分配了一个任务信息,就会在/assign下增加一个子节点。
znode的不同类型

持久节点
持久的znode只能通过delete来删除。
持久类型的znode可以为应用保存一些数据,保证数据不丢失。

临时节点
当创建该节点的客户端与Zookeeper的连接断开时,这个节点就会被删除。
临时节点主要传递了应用层面的一些信息。在主从模式中,当主节点创建了一个临时节点时,这个临时节点的存在表示主节点状态正常。从节点中使用临时znode也可以检测从节点是否有效。
临时节点存在以下两种情况会被删除:

  • 创建该znode的客户端会话超时或主动关闭。
  • 某个客户端主动删除该节点。

有序节点
一个znode可以被设置为有序节点。有序节点会被分配一个唯一的单调递增的整数。
例如创建/tasks/task-的时候,Zookeeper将会分配一个唯一的序列号追加到路径之后,最终名称为/tasks/task-1

总结
znode总共有四种类型

  • 持久的(persistent)
  • 临时的(ephemeral)
  • 持久有序(persistent sequential)
  • 临时有序(ephemeral sequential)
Zookeeper监视与通知

如果客户端每次访问znode节点的时候,客户端都要获取节点的所有内容,这会导致很高的延迟,代价很大。所以Zookeeper选择了基于通知的机制。首先,客户端告知Zookeeper自己要通过哪一个znode来接收通知,也就是在znode上设置一个监视点;当节点发生变化时,客户端会受到这个通知,并从Zookeeper上获取到最新的数据。其次,通知是一种单次触发的操作,客户端每次接收到通知后,必须再次设置一个新的监视点。
如果客户端在接收到通知,并设置下一个新的监视点之前,节点数据发生了变化呢?
客户端在每次设置新的通知的时候,都需要先从节点读取数据,这样就不会错过所有的变更。

通知的类型

通知的类型取决于设置监视点的类型,如监控znode的数据变化、监控znode子节点的变化、监控znode的创建和删除。

Zookeeper的仲裁

当Zk存在多个副本的时候,Zk会复制集群中所有服务器的数据树,如果让客户端等待服务器复制完所有数据后再继续,显然会存在较高的延迟。所以在Zk中可以设定法人数量。例如,我们一共有5个Zk服务器,将法定人数设置为3。这样,只要任何3个服务器保存了数据,客户端就可以继续,而其他两个服务器最终也将会捕获到数据,并进行保存。

法定人数的设置不能太大或太小,一般设置为服务器数量的多数,并且服务器数量一般为奇数个(不是必须的,但偶数个会使系统更加脆弱)。例如总共5台Zk服务器,则可以将法定人数数量设置为3。

Zk的会话

在进行操作Zookeeper前,客户端需要与服务端建立会话。当一个会话终止时,这个会话期间创建的所有临时节点都将会消失。
会话提供了顺序保障,同一个会话中的请求会以FIFO的顺序执行。如果客户端拥有多个并发的会话,那么FIFO的顺序在多个会话之间未必能够保持。

会话的生命周期

会话的生命周期是指会话从创建到结束的时期。
会话的相关状态主要有:CONNECTING、CONNECTED、CLOSED、NOT_CONNECTED
在这里插入图片描述

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

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

相关文章

【mac】终端左边太长处理,自定义显示名称(terminal路径显示特别长)

1、打开终端 2、步骤 (1)修改~/.zshrc文件 nano ~/.zshrc(2)添加或修改PS1,我是自定义了名字为“macminiPro” export PS1"macminiPro$ "(3)使用 nano: Ctrl o (字母…

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色,与整体不协调。 修改方式如下:

树莓派3:64位系统串口(UART)使用问题的解决方法

前言 当我们要使用串口进行zigbee的短距离通信时,发现无法使用串口. 原因 树莓派3bCPU内部有两个串口,一个硬件串口(就是我们平时使用的UART),还有一个迷你串口(mini-uart),在老版本的树莓派中把硬件串口分配在GPIO上,可以单独使用.但是在新的树莓派中官方把硬件串口给了蓝牙…

前端Vue项目整合nginx部署到docker容器

一、通过Dockerfile整合nginx方法: 1,使用Vue CLI或npm脚本构建生产环境下的Vue项目。 npm run build or yarn build2,构建完成后,项目目录中会生成一个dist文件夹,里面包含了所有静态资源文件(HTML、CSS…

《Vue零基础入门教程》第十课:属性绑定指令

往期内容 《Vue零基础入门教程》第一课:Vue简介 《Vue零基础入门教程》第二课:搭建开发环境 《Vue零基础入门教程》第三课:起步案例 《Vue零基础入门教程》第四课:应用实例 《Vue零基础入门教程》第五课:挂载 《…

计算机网络socket编程(5)_TCP网络编程实现echo_server

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络socket编程(5)_TCP网络编程实现echo_server 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交…

【适配】屏幕拖拽-滑动手感在不同分辨率下的机型适配

接到一个需求是类似下图的3D多房间视角,需要拖拽屏幕 问题 在做这种屏幕拖拽的时候发现,需要拖拽起来有跟手的感觉,会存在不同分辨率机型的适配问题。 即:美术调整好了机型1的手感,能做到手指按下顶层地板上下挪动&…

C#调用C++ DLL方法之C++/CLI(托管C++)

托管C与C/CLI前世今生 C/CLI (C/Common Language Infrastructure) 是一种用于编写托管代码的语言扩展,它是为了与 .NET Framework 进行互操作而设计的。C/CLI 是 C 的一种方言,它引入了一些新的语法和关键字,以便更好地支持 .NET 类型和垃圾…

python excel接口自动化测试框架!

今天采用Excel继续写一个接口自动化测试框架。 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件,得到测试信息,然后通过封装的requests方法,用unittest进行测试。 其中,接口关联的参数通过正则进…

[RabbitMQ] 重试机制+TTL+死信队列

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

前端入门之VUE--基础与核心

前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。 Vue学习笔记 用于构建用户界面的渐进式框架 构建用户界面:基于数据动态渲染页面渐进式:循序渐近的学…

java基础知识(常用类)

目录 一、包装类(Wrapper) (1)包装类与基本数据的转换 (2)包装类与String类型的转换 (3)Integer类和Character类常用的方法 二、String类 (1)String类介绍 1)String 对象用于保存字符串,也就是一组字符序列 2)字符串常量对象是用双引号括起的字符序列。例如:&quo…

嵌入式驱动开发详解2(设备挂载问题)

文章目录 前言设备号设备号的组成设备号的分配静态分配动态分配 驱动挂载与卸载设备节点创建驱动挂载出现问题 前言 驱动的设备挂载和卸载是十分重要的内容,一旦操作不当可能会导致系统崩溃,接下来我将用字符设备的驱动挂载原理进行详细讲解&#xff0c…

谈谈微服务的常用组件

由于微服务给系统开发带来了一些问题和挑战,如服务调用的复杂性、分布式事务的处理、服务的动态管理等,为了更好地解决这些问题和挑战,各种微服务治理的组件应运而生,充当微服务架构的基石和支撑,常用组件如下表&#…

【数字图像处理+MATLAB】通过迭代全局阈值处理算法(Iterative Global Algorithm)实现图像分割

引言 图像分割是将数字图像划分为多个区域(或像素的集合)的过程,这些区域通常对应于真实世界的物体或图像中的特定部分。图像分割的目标是简化或改变图像的表示形式,使得图像更容易理解和分析。图像分割通常用于定位图像中的物体…

【三维生成】Edify 3D:可扩展的高质量的3D资产生成(英伟达)

标题:Edify 3D: Scalable High-Quality 3D Asset Generation 项目:https://research.nvidia.com/labs/dir/edify-3d demo:https://build.nvidia.com/Shutterstock/edify-3d 文章目录 摘要一、前言二、多视图扩散模型2.1.消融研究 三、重建模型…

在SQLyog中导入和导出数据库

导入 假如我要导入一个xxx.sql,我就先创建一个叫做xxx的数据库。 然后右键点击导入、执行SQL脚本 选择要导入的数据库文件的位置,点击执行即可 注意: 导入之后记得刷新一下导出 选择你要导出的数据库 右键选择:备份/导出、…

HDR视频技术之三:色度学与颜色空间

HDR 技术的第二个理论基础是色度学。从前面的内容中可以了解到,光学以及人类视觉感知模型为人类提供了解释与分析人类感知亮度的理论基础,但是 HDR 技术不仅仅关注于提升图像与视频的亮度范围,同时也关注于提供更加丰富的色彩。因此&#xff…

通信与网络安全之IPSEC

IPSec(IP Security)是IETF制定的为保证在Internet上传送数据的安全保密性能的三层隧道加密协议。IPSec在网络层对IP报文提供安全服务。IPSec协议本身定义了如何在IP数据包中增加字段来保证IP包的完整性、 私有性和真实性,以及如何加密数据包。…

Redis的管道操作

在现代应用程序中,Redis作为一种高性能的内存数据库,被广泛用于缓存、消息队列、实时分析等场景。为了进一步提高Redis的性能,Redis提供了管道(Pipeline)操作,允许客户端将多个命令一次性发送到服务器&…