ZooKeeper是分布式协调服务,不是一种静态框架或工具集,它是需要独立部署运行起来的中心化协调服务,分布式系统中的分布式进程通过调用ZooKeeper的服务来实现彼此的协调与约定,具体是通过ZooKeeper的客户端API来操作内存数据节点(ZNode)。
如图,ZooKeeper的数据模型为层次化命名空间树,树上每个节点称为数据节点(ZNode),这些ZNode可以被分布式进程客户端通过统一的API来调用操作,同时每个ZNode都是通过层次化命名路径来定位的,如上图中最下方的节点就可以通过路径“/app1/app3”来确定。
分布式进程通过操作ZNode来实现彼此的动作协调,但这种协调本身不是一直长时间持续发生的,比如多个分布式进程互斥访问共享资源,经过一段时间每个进程都访问成功,那么他们所操作的数据对象即ZNode现在是不是可以被回收掉,而没必要一直存在内存中占用资源?另外某些场景下协调的结果是需要长期保存下来,因为他们需要被频繁使用的,也可能在使用的过程中被更新,如分布式选举的结果,分布式配置管理等,此时的ZNode就需要一直存在内存中并且能够存储一定量的协调结果数据。
针对以上场景分析,ZooKeeper的ZNode引入了2种类型和Key-Value数据存储特性,如下图:
sequential_flag=Ture | sequential_flag=False | |
Regular(常规节点) | 客户端需要显示的创建和删除节点,如果没有显示的删除,节点会一直存在。节点名字末尾会被自动添加一个计数值作为最后创建的名字,而这个计数值在同一层级单调递增 | 创建节点的时候,不会在节点名字末尾添加任何内容 |
Ephemeral(临时节点) | 临时节点可以被客户端显示的创建和删除,也可以在会话结束后被系统自动删除。同时临时节点不能创建子节点。顺序特性如上。 | 创建节点的时候,不会在节点名字末尾添加任何内容 |
节点是数据对象,那么它包含哪些字段,在内存中是如何表示的呢?详细字段如下图所示:
ZNode在内存中是表示为DataNode的类,它本身包含的信息有父节点Parent,同样是一个ZNode;本身存储的数据Data,类型为二进制数组;访问权限ACL,是一个Long型的数据(之后会讲到),节点本身的状态信息Stat,表示了当前节点的所有状态数据;孩子列表Children,是一个String类型的集合。其中Stat表的信息字段具体解释如下:
状态属性 | 说明 |
czxid | 即Created ZXID,表示该数据节点创建时的事务ID |
mzxid | 即Modified ZXID,表示该节点最后一次被更新时的事务ID |
ctime | 即Created Time,表示节点被创建的时间 |
mtime | 即Modified Time,表示节点最后一次被更新的时间 |
version | 数据节点的当前版本 |
cversion | 子节点的版本号,表示子节点被修改次数 |
aversion | 节点的ACL的版本号 |
ephemeralOwner | 创建该临时节点的会话ID,如果是常规节点默认为0 |
dataLength | 数据内容长度 |
numChildren | 子节点的个数 |
pzxid | 子节点列表最后一次被修改时的事务ID,子节点内容变更不会影响此值 |
Stat数据示例如下:
[zk: zookeeper2(CONNECTED) 1] get /test20000000002
test
cZxid = 0x10000000a
ctime = Thu Nov 24 13:59:41 GMT 2016
mZxid = 0x10000000a
mtime = Thu Nov 24 13:59:41 GMT 2016
pZxid = 0x10000000a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: zookeeper2(CONNECTED) 2]
ZooKeeper的分布式协调服务是通过在内部实现一个高性能的协调内核以及开放一组API来让用户自行构建高级的分布式协调服务功能,而不需要开发很多特定语义的分布式协调服务功能。其中开放的API就是用来操作ZNode的,那么这些API都有哪些操作?如下所示:
create(path,data,flags):创建ZNode,路径名为path,存储数据data,flags是节点类型
delete(path,version):删除指定的路径path和版本version的ZNode
exists(path,watch):返回是否指定的path路径的节点存在,并且watch该路径
getData(path,watch):获取指定path路径的节点存储的数据,并且watch该路径
setData(path,data,version):存储指定数据data在指定路径path的指定版本节点上
getChildren(path,watch):返回指定path路径节点的所有孩子的名字集合
sync(path):等待所有挂起的更新操作都同步到当前连接的zookeeper服务器节点
相关推荐
二、ZooKeeper数据模型 ZooKeeper的数据模型类似于文件系统,由一系列路径名(ZNode)构成。每个ZNode都可以存储数据,同时可以有子ZNode。ZNode有三种类型:持久化节点、临时节点和顺序节点,它们分别对应不同的...
三、Zookeeper数据模型 Zookeeper的数据模型类似于文件系统,由节点(ZNode)构成,每个节点都可以存储数据,并具有版本号、ACL(访问控制列表)和时间戳等属性。节点分为临时节点(会话结束自动删除)和持久节点...
ZooKeeper数据模型 ZooKeeper的数据模型包括目录结构、节点(znode)和数据。每个节点称为znode,具有唯一的路径标识。节点可以包含数据和子节点。Znode中的数据可以有多个版本。客户端应用可以在节点上设置监视器...
三、Zookeeper数据模型 Zookeeper的数据模型是一个层次化的命名空间,类似于文件系统的目录结构,称为ZNode。每个ZNode都可以存储数据,并且有自己的子节点。ZNode分为临时节点和持久节点,临时节点在创建它的客户端...
Zookeeper基于 zab 协议实现强一致性,并采用类文件系统的数据模型,使得操作简单直观。 二、Zookeeper 3.4.10 版本特性 1. 性能优化:3.4.10 版本对性能进行了大量优化,包括客户端连接、数据同步、请求处理等...
**二、Zookeeper数据模型** Zookeeper的数据模型类似于文件系统,由一系列的路径标识符组成,每个路径称为Znode。Znode可以存储数据,并且具有版本号,支持多版本控制。 **三、Zookeeper角色** 1. **Leader**: ...
2、Zookeeper数据模型 Zookeeper的数据模型基于一种层次化的命名空间,类似于文件系统的目录结构,称为ZNodes。每个ZNode都存储数据,并且可以有子节点。这种模型允许创建复杂的分布式协调逻辑。 2.1、ZNodes节点 -...
1.1 ZooKeeper数据模型:Zookeeper的数据模型是一种树形结构,类似于文件系统,由节点(ZNode)组成。每个ZNode都有一个唯一的路径标识,并可以存储数据。 1.2 角色与组件: - Leader:负责处理所有的写请求,以及...
通过这些知识点的学习,我们不仅了解了如何在 Linux 环境下安装配置 zookeeper,并且还掌握了基本的操作命令和数据模型的基础知识。这对于深入理解 zookeeper 的工作原理及应用场景非常有帮助。
1. **简单性**:Zookeeper 提供了一个类似文件系统的数据模型,用户可以通过简单的 API 来操作数据。 2. **表达能力**:Zookeeper 可用于实现多种分布式协调机制,例如分布式锁、分布式队列以及领导者选举等。 3. **...
#### ZooKeeper数据模型 ZooKeeper维护了一个层次化的命名空间,类似于文件系统的目录树结构,其中每个节点称为一个ZNode。每个ZNode可以包含数据和子节点。ZNode有两种类型:持久节点和临时节点。持久节点会在创建...
3. **ZooKeeper数据模型**:Zookeeper的数据模型类似于文件系统,由节点(Znode)组成,具有路径、数据、权限等属性。 4. **ZooKeeper协议**:Zookeeper通过Zab协议实现分布式一致性,保证在集群中所有节点的数据...
- ZooKeeper数据模型:Zookeeper的数据模型类似于一个层次化的文件系统,每个节点称为znode,znode可以存储数据并具有唯一的路径标识。 -Watcher机制:Watcher是Zookeeper的一个重要特性,允许客户端注册监听事件,...
- **Znode**:Zookeeper数据模型的基本单元,类似于文件系统的节点,可以存储数据和元数据。 - **Watcher**:一种事件监听机制,允许客户端注册对特定Znode的变更或事件的关注,并在这些事件发生时得到通知。 - **...
- ZooKeeper 数据模型基于树形结构,每个节点(称为 ZNode)可以存储数据,也可以有子节点,并且具有版本号,支持ACID特性。 - ZNode 分为临时节点和持久节点,临时节点在创建它的客户端断开连接后自动删除。 3. ...
ZNode是ZooKeeper数据模型的基本单元,类似于文件系统中的文件或目录。每个ZNode都可以存储数据,并且有自己的路径,比如"/config"或"/servers"。ZNodes可以有子ZNodes,形成一个层次化的命名空间。 其次,...
二、ZooKeeper数据模型 ZooKeeper的数据模型是层次化的命名空间,类似于文件系统,由节点(ZNode)组成。每个ZNode都有唯一的路径标识,可以存储数据,同时具备ACL(访问控制列表)和时间戳。 1. ZNode类型:分为...
3. **Zookeeper数据模型**:Zookeeper的数据模型是一个层次化的命名空间,类似于文件系统,由一系列路径名(Path)组成。每个路径名对应一个ZNode,ZNode可以存储数据,也可以有子ZNode。 4. **配置文件**:压缩包...
4. **Zookeeper数据模型** 数据模型基于树形结构,每个节点称为ZNode,可以存储数据并具有版本号,支持ACID(原子性、一致性、隔离性、持久性)事务特性。 5. **Zookeeper应用场景** - **配置管理**:集中式管理...
- **节点(ZNode)**: ZooKeeper 数据模型由一系列的节点(ZNode)组成,每个节点都可以存储数据并具有唯一的路径标识。 - **会话(Session)**: 用户与ZooKeeper 服务器之间的连接称为会话,会话具有超时机制,...