前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zookeeper系统模型结构分析

Zookeeper系统模型结构分析

原创
作者头像
会洗碗的CV工程师
发布2024-05-13 11:24:19
2250
发布2024-05-13 11:24:19
举报
文章被收录于专栏:Zookeeper

Zookeeper的系统模型结构可以从以下几个方面进行分析:

  1. 数据结构:
  • Zookeeper本身是一个树形目录服务(名称空间),其数据模型类似于文件系统,以树状结构进行组织。在这个树状结构中,每一个数据节点都被称为一个ZNode,这些ZNode可以存储数据、属性和ACL(Access Control Lists,访问控制列表)权限信息。
  • ZNode的数据模型可以细分为数据和属性两部分。数据部分指的是存储在ZNode中的实际数据,可以是字符串、字节数组或其他可序列化的数据类型。属性部分则是ZNode的元数据,包括创建时间、修改时间、版本号等。
  • Zookeeper中的每个路径下的节点key(完整路径,名称)是唯一的,这保证了数据的唯一性和可寻址性。
  1. 节点类型:
  • 持久节点(PERSISTENT):这是Zookeeper中最常见的一种节点类型。一旦创建,除非手动删除,否则将永久存在于Zookeeper中。
  • 持久有序节点(PERSISTENT_SEQUENTIAL):在创建有序节点时,Zookeeper会在路径上加一个序号作为后缀,这个序号是有序递增的。
  • 临时节点(EPHEMERAL):临时节点在客户端会话断开后会被Zookeeper服务端自动删除。此外,如果服务器重启或宕机,临时节点也会被删除。临时节点下面不能再创建子节点。
  • 临时顺序编号节点(EPHEMERAL_SEQUENTIAL):这种节点在客户端会话断开后会被删除,同时Zookeeper会给该节点名称进行顺序编号。
  1. 事务ID(ZXID):
  • 在Zookeeper中,事务是指能够改变Zookeeper服务器状态的操作,包括数据节点创建与删除、数据节点内容更新和客户端会话创建与失效等。对于每一个事务请求,Zookeeper都会为其分配一个全局唯一的事务ID(ZXID),通常是一个64位的数字。每一个ZXID对应一次更新操作,从这些ZXID中可以间接地识别出Zookeeper处理这些更新操作请求的全局顺序。
  1. Watcher机制:
  • Watcher是Zookeeper中用于监控ZNode变化的机制。当ZNode发生变化时,Watcher会触发回调函数通知应用程序。这使得Zookeeper能够支持分布式系统中常见的发布/订阅模式。
  1. Zookeeper集群:
  • Zookeeper集群由多个Zookeeper实例组成,通过Paxos协议实现数据一致性和故障容错。在集群内部,Zookeeper使用ZAB(Zookeeper Atomic Broadcast)协议来保证所有节点对数据的一致性。ZAB协议是基于Paxos协议实现的。

综上所述,Zookeeper的系统模型结构是一个高度可扩展、高可用的分布式协调服务系统,它利用树形数据结构、多种节点类型、事务ID、Watcher机制和集群技术来支持各种分布式应用的需求。

节点数据信息

节点的状态结构

每个节点都有属于自己的状态信息,这就很像每个人的身份信息一样。

语法结构:

代码语言:bash
复制
[zk: localhost:2181(CONNECTED) 15] stat /a
cZxid = 0x300000014
ctime = Thu Dec 30 15:05:07 CST 2021
mZxid = 0x300000014
mtime = Thu Dec 30 15:05:07 CST 2021
pZxid = 0x300000015
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 1

查看节点类型

语法结构:

代码语言:bash
复制
create 参数 /java spring

参数

  1. -e:临时节点
  2. -s:顺序节点
  3. 默认不写就是持久型节点

Watcher监听机制

ZooKeeper 提供了分布式数据的发布/订阅功能。一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使它们能够做出相应的处理。

注意:

在ZooKeeper中,引入了Watcher机制来实现这种分布式的通知功能。ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发了这个Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。

监听机制

监听节点变化

语法结构:

代码语言:bash
复制
ls -w path

参数:

命令如果使用watch,那么监听的是节点的变化,而不是值的变化。

语法结构:

代码语言:bash
复制
get -w path

参数:

watch监听机制只能够使用一次,如果下次想要使用,必须重新监听,就比如ls path watch命令,只能监听节点路径的改变一次,如果还想监听,那么需要再执行一次ls path watch命令。

权限控制 ACL

在ZooKeeper的实际使用中,我们的做法往往是搭建一个共用的ZooKeeper集群,统一为若干个应用提供服务。在这种情况下,不同的应用之间往往是不会存在共享数据的使用场景的,因此需要解决不同应用之间的权限问题。

ACL 权限控制

  1. 权限模式(Schema)
  2. 授权对象(ID)
  3. 权限(Permission)

参数:

  1. ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
  2. 每个znode支持设置多种权限控制方案和多个权限
  3. 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点
代码语言:bash
复制
setAcl /test2 ip:128.0.0.1:crwda

schema

ZooKeeper内置了一些权限控制方案,可以用以下方案为每个节点设置权限:

id

授权对象ID是指,权限赋予的用户或者一个实体,例如:IP 地址或者机器。授权模式 schema 与 授权对象 ID 之间关系:

权限permission

权限相关命令

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 节点数据信息
  • Watcher监听机制
  • 权限控制 ACL
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档