分布式服务框架----zookeeper

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 分布式服务框架----zookeeper

1.zookeeper简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,也是Apache Hadoop 的一个子项目,主要为了解决分布式架构下数据一致性问题,典型的应用场景有分布式配置中心、分布式注册中心、分布式锁、分布式队列、集群选举、分布式屏障、发布/订阅等场景。

上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制

2.zookeeper数据结构

Zookeeper是一个类似于文件系统的数据结构,最外层我们可以想象成一个大的文件夹,里面都是一些小的文件夹。

3.zookeeper节点类型

Zookeeper中每一个子目录项都是一个znode(目录节点),这些目录节点和我们普通的目录一样可以新建、删除、修改,我们常用的主要有四种类型的znode。

1、持久化目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,他将永远存在。

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

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

3、临时目录节点

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

4、临时顺序编号目录节点

客户端与zookeeper断开连接后,该节点被删除,只是zookeeper给该节点名称进行顺序编号。

4.zookeeper监听类型

zookeeper可以监听到七种类型变化:

1、None:连接建立事件

2、NodeCreated:节点创建

3、NodeDeleted:节点删除

4、NodeDataChanged:节点数据变化

5、NodeChildrenChanged:子节点列表变化

6、DataWatchRemoved:节点监听被移除

7、ChildWatchRemoved:子节点监听被移除

5.zookeeper(Stat 结构体)字段详解

czxid: 创建节点的事务 zxid,每次修改 ZooKeeper 状态都会收到一个 zxid 形式的时间戳,也就是 ZooKeepe r事务 ID。

事务 ID 是 ZooKeeper 中所有修改总的次序。每个修改都有唯一的 zxid,若 zxid1 小于 zxid2,那么 zxid1 在 zxid2 之前发生。

ctime: znode 被创建的毫秒数(从 1970 年开始)

mzxid: znode 最后更新的事务 zxid

mtime: znode 最后修改的毫秒数(从 1970 年开始)

pZxid: znode 最后更新的子节点 zxid

cversion : znode 子节点变化号,znode 子节点修改次数

dataversion: znode 数据变化号

aclVersion: znode 访问控制列表的变化号

ephemeralOwner: 如果是临时节点,这个是 znode 拥有者的 session id。如果不是临时节点则是 0。

dataLength: znode 的数据长度

numChildren: znode 子节点数量

6.zookeeper监听原理详解

① 首先要有一个 main() 线程

② 在 main 线程中创建 Zokeeper 客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener) 。

③ 通过 connect 线程将注册的监听事件发送给 Zookeeper。

④ 在 Zookeeper 的注册监听器列表中将注册的监听事件添加到列表中。

⑤ Zookeeper 监听到有数据或路径变化,就会将这个消息发送给 listener 线程。

⑥ listener 线程内部调用了 process() 方法。

7.Synchronized与zookeeper的区别

如果我们是单机情况下也就是只有一个进程的情况下使用Synchronized是可以保证线程安全的。

但是分布式情况下是多个不同的进程,而不是一个进程里面不同的线程,所以Synchronized是无法保证多个进程安全的。

简单来说,Synchronized保证单进程的线程安全;zookeeper则是保证多进程的进程安全。

8.zookeeper节点创建,监听命令

zookeeper创建节点,和监听节点命令如下

1、创建持久节点:create /节点名称

2、创建持久顺序节点:create -s /节点名称

3、创建临时节点:create -e /节点名称

4、创建临时顺序节点:create -e -s /节点名称

5、监听节点:get -w /节点名称

8.zookeeper ACL权限

zookeeper有ACL( Access Control List )权限控制,可以控制节点的读写操作,保证数据的安全性。

ACL权限设置有权限模式、授权对象、权限信息

权限模式: 就是zookeeper服务器进行权限验证的方式,权限模式大体分为两种类型:

范围验证: 范围就是zookeeper可以针对一个ip或者一段ip地址授予权限,相当于指纹解锁,我给我一个手指头,或者所有的脚指头都授予权限。

口令验证: 可以理解为用户名密码的方式,这种就相当于密码解锁了,知道了用户名密码后所有的人都相当于授予了权限。

授权对象: 授权对象就是把权限授予给谁,如果是范围验证方式,那么授权对象就是ip地址,如果是口令验证,授权对象就是用户名。

授权信息: 授权信息就是指我们具体的权力是什么。

9.zookeeper定义好的5种权限

1、数据节点(c:create)创建权限,授予权限的对象可以在数据节点下创建子节点。

2、数据节点(w:wirte)更新权限,授予权限的对象可以更新该数据节点。

3、数据节点(r:read)读取权限,授予权限的对象可以读取该节点的内容以及子节点的列表信息。

4、数据节点(d:delete)删除权限,授予权限的对象可以删除该数据节点的子节点。

5、数据节点(a:admin)管理者权限,授予权限的对象可以对该数据节点体进行ACL权限设置。

10.权限信息的查看与设置

可以通过getAcl来获取某个节点的权限信息,通过setAcl来设置某个节点的权限信息。

11.zookeeper的持久化

zookeeper和redis很像,数据都是在内存中的,持久化也是两种方式,一种是记录事务日志,一种是快照方式

记录事务日志磁盘会进行IO操作,事务日志的不断增多会触发磁盘为文件开辟新的磁盘块,所以为了提升磁盘的效率,可以在创建文件的时候就向操作系统申请一块大一点的磁盘块,通过参数zookeeper.preAllocSize配置。

事务日志的存放地址通过zoo.cfg配置文件中的dataDir来指定。

快照方式,在生成快照文件时,经过snapCount次事务后,会生成快照文件。

与事务日志文件一样,快照文件的命名也是有意义的,命名为snapShot.{zxid},后缀时该快照文件生成时已执行的最新的事务的zxid,即[1,zxid]的所有事务已应用到DataTree。

实践部署zookeeper的持久化有着兴趣的超新星们请参考这两位大佬的博客

Zookeeper 教程(超详细)

Zookeeper-持久化

希望大佬们学习成功后,带带沃!

感谢大家,点赞,收藏,关注,评论!

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
8天前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
8天前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
9天前
|
存储 负载均衡 Dubbo
分布式-Zookeeper(一)
分布式-Zookeeper(一)
|
7天前
|
数据采集 分布式计算 MaxCompute
MaxCompute 分布式计算框架 MaxFrame 服务正式商业化公告
MaxCompute 分布式计算框架 MaxFrame 服务于北京时间2024年09月27日正式商业化!
26 3
|
9天前
|
负载均衡 监控 Dubbo
分布式框架-dubbo
分布式框架-dubbo
|
9天前
分布式-Zookeeper-数据订阅
分布式-Zookeeper-数据订阅
|
9天前
|
监控
分布式-Zookeeper-Zab协议
分布式-Zookeeper-Zab协议
|
9天前
|
XML 负载均衡 监控
分布式-dubbo-简易版的RPC框架
分布式-dubbo-简易版的RPC框架
|
9天前
|
Java
分布式-Zookeeper-分布式锁
分布式-Zookeeper-分布式锁
|
9天前
|
存储 负载均衡 算法
分布式-Zookeeper-Master选举
分布式-Zookeeper-Master选举
下一篇
无影云桌面