Zookeeper数据模型与Watch机制

news2024/10/6 10:26:10

数据模型

        ZooKeeper 中的数据模型是一种树形结构,非常像电脑中的文件系统,有一个根文件夹,下面还有很多子文件夹。ZooKeeper 的数据模型也具有一个固定的根节点(/),我们可以在根节点下创建子节点,并在子节点下继续创建下一级节点。ZooKeeper 树中的每一层级用斜杠(/)分隔开,且只能用绝对路径(如“get /work/task1”)的方式查询 ZooKeeper 节点,而不能使用相对路径。具体的结构你可以看看下面这张图:

znode 节点类型与特性 

ZooKeeper中的数据节点支持 7 种节点类型。

  • 持久
  • 持久顺序
  • 临时
  • 临时顺序
  • 容器
  • 持久 TTL
  • 持久顺序 TTL

持久节点

        这种节点也是在 ZooKeeper 最为常用的,几乎所有业务场景中都会包含持久节点的创建。之所以叫作持久节点是因为一旦将节点创建为持久节点,该数据节点会一直存储在 ZooKeeper 服务器上,即使创建该节点的客户端与服务端的会话关闭了,该节点依然不会被删除。如果我们想删除持久节点,就要显式调用 delete 函数进行删除操作。

临时节点

       从名称上我们可以看出该节点的一个最重要的特性就是临时性。所谓临时性是指,如果将节点创建为临时节点,那么该节点数据不会一直存储在 ZooKeeper 服务器上。当创建该临时节点的客户端会话因超时或发生异常而关闭时,该节点也相应在 ZooKeeper 服务器上被删除。同样,我们可以像删除持久节点一样主动删除临时节点。

        在平时的开发中,我们可以利用临时节点的这一特性来做服务器集群内机器运行情况的统计,将集群设置为“/servers”节点,并为集群下的每台服务器创建一个临时节点“/servers/host”,当服务器下线时该节点自动被删除,最后统计临时节点个数就可以知道集群中的运行情况。

持久顺序、临时顺序节点

        这两种节点相对于上面两种节点唯一不同的特性就是 ZK 会自动在这两种节点之后增加一个数字的后缀,而路径 + 数字后缀是能保证唯一的,这数字后缀的应用场景可以实现诸如分布式队列,分布式公平锁等。

容器

        容器节点是 3.5 以后新增的节点类型,只要在调用 create 方法时,指定 CreateMode 为 CONTAINER 即可创建容器的节点类型,容器节点的表现形式和持久节点是一样的,但是区别是 ZK 服务端启动后,会有一个单独的线程去扫描,所有的容器节点,当发现容器节点的子节点数量为 0 时,会自动删除该节点,除此之外和持久节点没有区别,官方注释给出的使用场景是 Container nodes are special purpose nodes useful for recipes such as leader, lock, etc. 说可以用在 leader 或者锁的场景中。

持久 TTL、持久顺序 TTL

        持久顺序这两个关键字前面已经解释过了,重点是后面的 TTLTTL 是 time to live 的缩写,指带有存活时间,简单来说就是当该节点下面没有子节点的话,超过了 TTL 指定时间后就会被自动删除,特性跟上面的容器节点很像,只是容器节点没有超时时间而已,但是 TTL 启用是需要额外的配置(这个之前也有提过)配置是 zookeeper.extendedTypesEnabled 需要配置成 true,否则的话创建 TTL 时会收到 Unimplemented 的报错。

Watch 监控        

Watch机制是什么

        ZooKeeper 的客户端可以通过 Watch 机制来订阅当服务器上某一节点的数据或状态发生变化时收到相应的通知。Watcher注册到客户端有两种方式:构造方法注册和getData方法注册。

通过构造方法注册,需要在ZooKeeper客户端的构造方法中传递Watcher参数:

new ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)

上面代码的意思是定义了一个了 ZooKeeper 客户端对象实例,并传入三个参数:

connectString 服务端地址

sessionTimeout:超时时间

Watcher:监控事件

这个 Watcher 将作为整个 ZooKeeper 会话期间的上下文 ,一直被保存在客户端 ZKWatchManager 的 defaultWatcher 中。

ZooKeeper 客户端也可以通过 getData、exists 和 getChildren 三个接口来向 ZooKeeper 服务器注册 Watcher,从而方便地在不同的情况下添加 Watch 事件:

getData(String path, Watcher watcher, Stat stat)

订阅发布场景实现

        发布订阅功能可以看作是一个一对多的关系,即一个服务或数据的发布者可以被多个不同的消费者调用。一般一个发布订阅模式的数据交互可以分为消费者主动请求生产者信息的拉取模式,和生产者数据变更时主动推送给消费者的推送模式。ZooKeeper 采用了两种模式结合的方式实现订阅发布功能

        在系统开发的过程中会用到各种各样的配置信息,如数据库配置项、第三方接口、服务地址等,这些配置操作在我们开发过程中很容易完成,但是放到一个大规模的集群中配置起来就比较麻烦了,利用ZooKeeper 的发布订阅功能就能解决这个问题。

        我们可以把诸如数据库配置项这样的信息存储在 ZooKeeper 数据节点中。如图中的 /confs/data_item1。服务器集群客户端对该节点添加 Watch 事件监控,当集群中的服务启动时,会读取该节点数据获取数据配置信息。而当该节点数据发生变化时,ZooKeeper 服务器会发送 Watch 事件给各个客户端,集群中的客户端在接收到该通知后,重新读取节点的数据库配置信息。

        我们可以使用 Watch 机制实现分布式环境下的配置管理功能,通过对 ZooKeeper 服务器节点添加数据变更事件,实现当数据库配置项信息变更后,集群中的各个客户端能接收到该变更事件的通知,并获取最新的配置信息。要注意一点是,Watch 具有一次性,所以当我们获得服务器通知后要再次添加 Watch 事件。

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

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

相关文章

华为 WLAN基本配置

华为 无线基本配置 一、前言二、项目拓扑三、项目需求四、配置思路五、配置步骤1. 创建vlan,配置vlan接口ip2. trunk放行对应流量,保证链路可达3.开启DHCP服务,配置DHCP地址池,为AP和终端设备分配IP地址4.WLAN基本配置 六、结语 一…

一文解读类的加载过程(类的生命周期)

目录 概述总览 过程一:Loading(加载)阶段 加载完成的操作 二进制流的获取方式 类模型与Class实例的位置 数组类的加载 过程二:Linking(链接)阶段 环节1:链接阶段之Verification&#xff…

第一次的医美体验,决定了客户的回头率

爱美之心,人皆有之。随着人们求美需求的增加,医美消费成为了越来越多人的选择,而这种需求往往不是一次性的。 根据艾媒咨询于2021年发布的一份医美报告显示,30.6%的医美消费受访者只体验了1家医美机构,有78.1%的受访者…

代码随想录算法训练营第六十天 | 84. 柱状图中最大的矩形

84. 柱状图中最大的矩形 本题与接雨水问题的区别是记录每个柱子左边第一个小于该柱子的下标,而不是左边第一个小于该柱子的高度。 因为本题是要找每个柱子左右两边第一个小于该柱子的柱子,所以从栈头(元素从栈头弹出)到栈底的顺…

恢复误删文件

误删恢复 用losf恢复进程存在的文件 注意此处要后台进程存在 创建一个文件,用tail命令,模拟文件一直被监听 打开另外一个终端,删除这个文件 用lsof命令查看被删除的文件,可以发现文件虽然被删除,但是进程依然在 然后…

Make-A-Video(造啊视频)——无需文字-视频数据的文字转视频(文生视频)生成方法

© 2022 Uriel Singer et al (Meta AI) © 2023 Conmajia 本文基于论文 Make-A-Video: Text-to-Video Generation without Text-Video Data(2209.14792)。 本文已获论文第一作者 Uriel Singer 授权。 本视频由这句话生成:穿着超人装…

javaweb学生在线考试系统dzkf10程序

打分)、系统管理(数据备份)等功能操作。 以学生的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用个人资料管理、试卷查看、在线考试、在线答疑、个人考试成绩查询等功能…

微任务宏任务详解题目

注意点:我们的异步任务1和异步任务2并不是直接放在任务队列里面,而是先挂载到我们相应的线程下面!!! 假如说我们的宏任务执行得很快,100ms就执行完了,那么我们就会去轮询我们的任务队列&#x…

C++linux高并发服务器项目实践 day3

Clinux高并发服务器项目实践 day3 文件IO标准C库IO函数与LinuxIO函数虚拟地址空间文件描述符Linux系统IO函数open与close mode:八进制的数,表示用户对创建出的新的文件的操作权限 最终的权限是:mode & ~umask 0777 r(读) w(写) x(可执行)都有这样的权…

2021遥感应用组二等奖:近20年黄河流域植被动态与生态环境效应

作品介绍 1 研究目的 基于MODIS NDVI植被指数、土地利用数据和气象数据集,辅以趋势分析、偏相关分析、马尔科夫转移矩阵变化分析、多元回归分析等方法,全面分析黄河流域2001-2020年植被时空变化特征,并通过构建统计模型方式,定量…

【Seata】Seata配置上传Nacos

前言 在seata1.4.2版本之后,Seata可以通过dataId配置seata的所有配置项,也就是说,我们可以将之前上传的所有配置项整合到一个配置文件中,接下来直接演示该怎样操作。 如果你不清楚seata的config.txt文件在哪里下载或者其它的一些…

c++11 标准模板(STL)(std::queue)(五)

定义于头文件 <queue> template< class T, class Container std::deque<T> > class queue; std::queue 类是容器适配器&#xff0c;它给予程序员队列的功能——尤其是 FIFO &#xff08;先进先出&#xff09;数据结构。 类模板表现为底层容器的包…

kali相关操作

目录 kali换源&#xff1a; 由于没有公钥&#xff0c;无法验证下列签名&#xff1a; NO_PUBKEY 871920D1991BC93C 安装中文 设置中文输入法 kali换源&#xff1a; sudo su 备份相关配置 cp /etc/apt/sources.list /etc/apt/sources.list.bak vim /etc/apt/sources.list替…

搭建SFTP服务安全共享文件,实现在外远程访问「内网穿透」

文章目录 1.前言2.本地SFTP服务器搭建2.1.SFTP软件的下载和安装2.2.配置SFTP站点2.3.Cpolar下载和安装 3.SFTP服务器的发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的网络发达&#xff0c;个人电脑容量快速上升&#xff0c;想要保存的数据资料…

最近,我们做了一次“实景”容灾演练

保障头部新闻客户端的业务连续性&#xff0c;阿里云帮助客户在真实场景下完成容灾演练。 云计算和新闻 APP&#xff0c;能有什么关系&#xff1f; 2021 年&#xff0c;传媒行业某头部媒体的新闻客户端进行了全新改版并升级上线&#xff0c;以 “内容技术”的融合驱动效率提升&a…

Vue2-黑马(十)

目录&#xff1a; &#xff08;1&#xff09;vuex-actions &#xff08;2&#xff09;vuex-调用actions &#xff08;3&#xff09;vue2实战-项目搭建 &#xff08;1&#xff09;vuex-actions 有这么一个需求&#xff0c;绿色的组件从服务器获取数据放入store&#xff0c;主…

CHAPTER 2: 《BACK-OF-THE-ENVELOPE ESTIMATION》 第2章 《初略的估计》

CHAPTER 2: BACK-OF-THE-ENVELOPE ESTIMATION 在系统设计面试中&#xff0c;有时您会被要求估计系统容量或使用粗略估计的性能需求。根据杰夫迪恩的说法&#xff0c;谷歌高级研究员&#xff0c;“粗略的计算是你使用结合思想实验和常见的性能数字&#xff0c;以获得良好的感觉…

武器目标分配问题研究进展: 模型、算法与应用

源自&#xff1a;系统公正与电子技术 作者&#xff1a;李梦杰 常雪凝 石建迈 陈超 黄金才 刘忠 摘 要 武器目标分配问题是指挥控制与任务规划领域的关键难点之一, 也是军事运筹领域的基础研究课题。经过多年研究, 武器目标分配问题在陆海空天电等领域都得到了广泛研究,…

ESLint插件开发

ESLint 插件 ESLint 插件是一个可以包含一系列ESLint 规则、配置、处理器、环境的npm模块。 创建插件 开发ESLint插件可以使用Yeoman提供的生成器来生成ESLint插件的基本项目的目录结构。 安装yeoman 和ESLint 规则的生成器 npm i -g yo generator-eslint创建eslint-xxxx使用y…

春秋云境:CVE-2022-26201(二次注入漏洞)

目录 一、题目 二、上传权限马 三、蚁剑马连接 一、题目 进入题目&#xff1a; 这个是和春秋云境&#xff1a;CVE-2022-28060一个网站&#xff0c;看来应该是存在多个漏洞。 点击admin 不用登录 Users ---- add users 选择文件 这里要是jpg图片格式 如果是php格式是无法运行…