一文带你了解Zookeeper所有核心概念

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 一文带你了解Zookeeper所有核心概念

前言

Zookeeper作为分布式应用的分布式协调服务,提供C语言和Java语言的API调用。其本身,由Java开发,有一些核心概念,我们需要有很明确的认识,才能够更好地使用该服务中间件。本次将从以下几个部分展开:

  • Session会话
  • Watch
  • 数据模型

Session

image.png

如图所示,ZK是一个C/S架构,包含客户端、服务端,客户端连接服务端,称之为一个会话。

建立会话的流程、特点如下:

  • 一个客户端连接一个会话,由ZK进行分配唯一的会话id
  • 客户端以特定的时间间隔发送心跳以保持会话有效性,通过参数tickTime来设定
  • 超过会话超时时间未收到客户端心跳,服务端则判定,该客户端失效,已挂掉;minSessionTimeout  会话的最小超时时间,(默认为2倍的tickTime)maxSessionTimeout 会话的最大超时时间,(默认为20倍的tickTime)
  • 会话中的请求按照FIFO顺序执行,类似于队列

数据模型

ZK作为分布式协调服务,同时也是个集中存储服务,数据存储在内容中,具有高性能、低延时特点,依赖于本身的数据模型。

层次名称空间
  • 类似unix文件系统,以(/)为根image.png
  • 区别:节点可以包含与之关联的数据以及子节点(在文件系统看来,既是文件也是文件夹)
  • 节点的路径总是表示为规范的、绝对的、斜杠分隔的路径

image.png

image.png

如图所示,每个节点,都可以设置对应的值

image.png

其中,每个节点,称之为znode。

znode
  • 名称唯一,命名规范
  • 节点类型:持久、顺序、临时、临时顺序
  • 节点数据构成
znode - 命名规范

节点名称除下列限制外,可以使用任何unicode字符

  • null字符(\u0000)不能作为路径名的一部分
  • 以下字符不能使用,因为不能很友好的显式,\u0001 - \u0019 和\u007F - \u009F
  • 不允许使用以下字符:\ud800 - uf8fff,\uFFF0 - \uFFFF
  • "."字符可以用作另一个名称的一部分,但是“.” 和 ".." 不能单独用于指示路径上的节点,zookeeper不适用相对路径,都是绝对路径的节点例如:“/a/b/./c” "c/a/b/../" 都是无效的节点命名
  • zookeeper有一个保留节点 “zookeeper”

image.png

znode-节点类型

节点包含四种节点类型

  • 持久节点
create /test1 test
  • 临时节点
create -e /test1 /abd abds
  • 顺序节点
create -s /test1/abc 908
  • 临时顺序节点
create -e -s /test1/abd/ 90

其中,顺序节点,为10位的十进制序号,每个父节点都携带一个计数器,zk是由java开发,计数器是带符号的int(4字节),数值到2147483647,之后将发生溢出,导致名称“<path> -2147483648”

image.png

如图所示,完成四种节点类型节点的创建,可以看到顺序节点的十进制序号

image.png

同时,临时节点,有效范围在当前会话有效期内,关闭当前会话,重新开一个客户端

image.png

图示内,可以看到当前sessionid 0x100002011b80003

image.png

再次查看节点,即可发现临时节点 c 、f0000000005 都已经不存在。临时节点在协调服务中应用广泛。

znode-数据构成

节点数据:存储的协调数据(状态信息、配置、位置信息等)

节点元数据(stat结构)

数据量上限:1M

zk为分布式协调服务,非存储型数据库,仅用来用于分布式协调,因此数据量小,保证高性能。

znode-元数据stat结构

image.png

在zk客户端,可以使用stat命令,查看节点元数据。包括以下数据:

Stat结构字段 描述
cZxid 创建该节点的zxid(事务id)
mZxid 最后修改该节点的zxid
pZxid 当前节点最后更新的子节点zxid
ctime 节点创建时间
mtime 节点最后修改时间
dataVersion 节点数据修改次数
cversion 节点子节点变更次数
dataLength 节点数据长度
numChildren 节点子节点数
ephemeralOwner 节点为临时节点,所有者会话id,如果不是临时节点,值为0
aclVersion 节点访问控制列表变更次数

客户端提供下面命令,可以使用访问控制功能

create [-s] [-e] [-c] [-t ttl] path [data] [acl]

setAcl [-s] [-v version] [-R] path acl

getAcl [-s] path

提供设置格式为 (scheme:expression, perms)

schemes包括

  • world 任何客户端都可以访问.
  • auth 拥有授权的客户端.
  • digest  使用username:base64 encoded SHA1 password digest.
  • ip ip:127.0.0.1,read
  • x509

perms包括

  • CREATE: 可创建子节点
  • READ: 可获取节点数据以及子节点列表.
  • WRITE: 设置节点数据
  • DELETE: 删除子节点
  • ADMIN: 设置权限
Zookeeper中的时间

zk采用多种方式,来追踪时间。

  • Zxid Zookeeper中的每次更改操作都会对应一个唯一的事务id,称为Zxid,是一个全局有序的时间戳标记。
  • Version numbers 版本号,每个节点的更改操作,都会版本号增加
  • Ticks 当使用zk集群时,服务端,采用“滴答”tick,来定义事件的时间,如状态上传、会话超时、对等点之间的连接超时等。ticktime仅通过最小会话超时时间间接公开(默认为2倍ticktime)如果客户端请求的设置会话超时,小于服务端设置最小会话超时,服务端会通知客户端会话超时实际超时时间,即会采用服务端的配置时间,且把结果告知客户端。如果客户端设置会话超时,大于服务端配置,则使用客户端设置。
  • Real time Zookeeper除了在znode创建和修改时间时将时间戳放入stat结构之外,其他不使用real time或者时钟时间

Watch监听机制

客户端,可以通过在znode上设置watch,实现实时监听znode的变化

  • data watch 监听数据变更
  • child watch 监听子节点变化

image.png

首先,对节点添加watch监听,然后对节点数据更改,所有客户端,会触发watch时间,监听到变化。

image.png

addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE

Zookeeper在3.6.0版本后,通过addWatch方法,增加watch可以设置watch监听模式,默认为PERSISTENT_RECURSIVE,持久递归,可以触发多次

Zookeeper特性
  1. 顺序一致性:   保证客户端操作是按照顺序生效的
  2. 原子性:           更新成功或失败,没有部分结果
  3. 单个系统映像:无论连接到哪个集群中服务器,客户端都能看到相同的内容
  4. 可靠性:           数据的变更不会丢失,除非被客户端覆盖修改
    zk发生数据更改时,先进行事务记录,会在集群中进行一致性算法处理,最终实现一致性,实现可靠
  5. 及时性:           保证系统的客户端当时读取的数据是最新的
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
1月前
|
分布式计算 Hadoop Unix
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
42 1
|
1月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
47 0
|
5月前
|
存储 监控 负载均衡
Zookeeper 详解:分布式协调服务的核心概念与实践
Zookeeper 详解:分布式协调服务的核心概念与实践
250 0
|
6月前
|
存储 负载均衡 网络协议
ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
【4月更文挑战第10天】ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
92 1
|
6月前
|
存储 Dubbo 网络协议
Zookeeper学习系列【一】 教会你Zookeeper的一些基础概念
Zookeeper学习系列【一】 教会你Zookeeper的一些基础概念
300 0
|
6月前
|
存储 算法 Dubbo
ZooKeeper 概念
ZooKeeper 概念
41 0
|
6月前
|
存储 负载均衡 网络协议
ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
93 0
|
存储 分布式计算 监控
分布式数据库HBase的基本概念和架构之基本架构的ZooKeeper
分布式数据库HBase是一个开源的分布式数据库系统,是Apache Hadoop生态系统的重要组成部分。
445 0
|
存储 缓存 负载均衡
认识 Zookeeper -基本概念,组成和功能
认识 Zookeeper -基本概念,组成和功能
179 0
|
算法 大数据 开发者
ZooKeeper 集群选举:概念&amp;全新集群选举|学习笔记
快速学习 ZooKeeper 集群选举:概念&amp;全新集群选举
185 0
ZooKeeper 集群选举:概念&amp;全新集群选举|学习笔记