首页 > 其他分享 >ZooKeeper 必知必会的知识点(一)

ZooKeeper 必知必会的知识点(一)

时间:2022-09-28 16:32:36浏览次数:47  
标签:知识点 zookeeper 必知 创建 ZooKeeper 目录 Zookeeper 节点 客户端

ZooKeeper 是什么?

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,

它是集群的管理者监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易

用的接口和性能高效、功能稳定的系统提供给用户。

客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也是由所

连接的 zookeeper 机器来处理。对于写请求,这些请求会同时发给其他 zookeeper 机器并且达成一致后,请

求才会返回成功。因此,随着 zookeeper 的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降

有序性是 zookeeper 中非常重要的一个特性,所有的更新都是全局有序的,每个更新都有一个唯一的时间戳

这个时间戳称为 zxid(Zookeeper Transaction Id)。而读请求只会相对于更新有序,也就是读请求的返回

结果中会带有这个 zookeeper 最新的 zxid

ZooKeeper 提供了什么?

1、文件系统

2、通知机制

Zookeeper 文件系统

Zookeeper 提供一个多层级的节点命名空间(节点称为 znode)。与文件系统不同的是,这些节点都可以设置

关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行。Zookeeper 为了保证高吞吐和低延

迟,在内存中维护了这个树状的目录结构,这种特性使得 Zookeeper 不能用于存放大量的数据,每个节点的存

放数据上限为 1M

四种类型的 znode

1、PERSISTENT-持久化目录节点

客户端与 zookeeper 断开连接后,该节点依旧存在

2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

客户端与 zookeeper 断开连接后,该节点依旧存在,只是 Zookeeper 给该节点名称进行顺序编号

3、EPHEMERAL-临时目录节点

客户端与 zookeeper 断开连接后,该节点被删除

4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点客户端与 zookeeper 断开连接后,该节点被删除, 只是 Zookeeper 给该节点名称进行顺序编号

Zookeeper 通知机制

client 端会对某个 znode 建立一个 watcher 事件,当该 znode 发生变化时,这些 client 会收到 zk 的通知,

然后 client 可以根据 znode 变化来做出业务上的改变等。

Zookeeper 做了什么?

1、命名服务

2、配置管理

3、集群管理

4、分布式锁

5、队列管理7.zk 的命名服务(文件系统)

命名服务是指通过指定的名字来获取资源或者服务的地址,利用 zk 创建一个全局的路径,即是唯一的路径,这

个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。

zk 的配置管理(文件系统、通知机制)

程序分布式的部署在不同的机器上,将程序的配置信息放在 zk 的 znode 下,当有配置发生改变时,也就是

znode 发生变化时,可以通过改变 zk 中某个目录节点的内容,利用 watcher 通知给各个客户端,从而更改配

置。

Zookeeper 集群管理(文件系统、通知机制)

所谓集群管理无在乎两点:是否有机器退出和加入、选举 master

对于第一点,所有机器约定在父目录下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机

器挂掉,该机器与 zookeeper 的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个

兄弟目录被删除,于是,所有人都知道:它上船了。

新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount 又有了,对于第二点,我们稍微改变

一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为 master 就好

Zookeeper 分布式锁(文件系统、通知机制)

有了 zookeeper 的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是

制时序

对于第一类,我们将 zookeeper 上的一个 znode 看作是一把锁,通过 createznode 的方式来实现。所有客户

端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的

distribute_lock 节点就释放出锁。对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面 创建临时顺序编号目录节点,和选

master 一样,编号最小的获得锁,用完删除,依次方便。

获取分布式锁的流程

在获取分布式锁的时候在 locker 节点下创建临时顺序节点,释放锁的时候删除该临时节点。客户端调用

createNode 方法在 locker 下创建临时顺序节点,

然后调用 getChildren(“locker”)来获取 locker 下面的所有子节点,注意此时不用设置任何 Watcher。客户

端获取到所有的子节点 path 之后,如果发现自己创建的节点在所有创建的子节点序号最小,那么就认为该客户

端获取到了锁。如果发现自己创建的节点并非 locker 所有子节点中最小的,说明自己还没有获取到锁,此时客

户端需要找到比自己小的那个节点,然后对其调用 **exist()**方法,同时对其注册事件监听器。之后,让这个被关

注的节点删除,则客户端的 Watcher 会收到相应通知,此时再次判断自己创建的节点是否是 locker 子节点中

序号最小的,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。 当前这个过程中还需要许多的逻辑判断。

代码的实现主要是基于互斥锁,获取分布式锁的重点逻辑在于 BaseDistributedLock,实现了基于

Zookeeper 实现分布式锁的细节。

标签:知识点,zookeeper,必知,创建,ZooKeeper,目录,Zookeeper,节点,客户端
From: https://blog.51cto.com/codeshallow/5717896

相关文章

  • Vue3知识点之数据侦测
    Vue的核心之一就是响应式系统,通过侦测数据的变化,来驱动更新视图。实现可响应对象的方式通过可响应对象,实现对数据的侦测,从而告知外界数据变化。实现可响应对象的方式:ge......
  • Linux新手要了解的十个知识点
    Linux对于有的新手来说,感觉无从下手,或者不知道从哪儿学起?怎么学?针对这些问题,我给大家说说新手学习Linux需要了解的十个知识点。注意大小写Linux是大小写敏感的系......
  • 玫瑰图知识点
    1.数据排序:(展示玫瑰状)data:[{value:100,name:'Direct'},{value:300,name:'Email'},{value:400,name:'UnionAds'},......
  • kafka与zookeeper集群的部署
    一.首先需要java的坏境1、安装java环境rpm-ivhjdk-8u151-linux-x64.rpm2、配置java环境变量exportJAVA_HOME=/usr/java/jdk1.8.0_151exportCLASSPATH=.:$JAVA_HOME......
  • Zookeeper分布式协调服务
    大数据项目最终需要运行在大数据平台之上,而构建Hadoop集群是构建整个大数据平台的核心。Hadoop集群包含HDFS集群和YARN集群,想要构建高可用的Hadoop集群又依赖Zookee......
  • 知识点2-1 B+树(5)myISAM简介
    myISAM简介MyISAM的B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。主索引和辅助索引没啥区别,只是主索引中的key一定得是唯一的。这里的索引都是非聚簇索引......
  • 今日部分知识点总结———SQL注入,hooks的优缺点,cookies,xxxStorage的区别,BFC,合并二叉
    SQL注入在浏览器页面用户提交数据处,输入特定的字符实现sql语句的篡改,从而对数据库进行操作。比如在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录;用户名......
  • 知识点 1: MySQL的回表
    1:聚簇索引和非聚簇索引是什么?MySQL的索引有不同的角度的分类方式,例如:按数据结构分、按逻辑角度分、按物理存储分其中,按物理存储分有两种索引:聚簇索引和非聚簇索引。 ......
  • MySQL常用知识点梳理
    删表DROPTABLEIFEXISTS表名;新建表createtable表名(字段名类型约束(逐渐,非空,唯一,默认值),字段名类型约束(逐渐,非空,唯一,默认值),)编码,存储引擎;约束N......
  • 【mongo 系列】聚合知识点梳理
    什么是聚合数据?我们先来看看是是聚合数据数据聚合(DataAggregation)是指合并来自不同数据源的数据。.聚类也称聚类分析,亦称为群集分析,是对于统计数据分析的一门技术,在......