一、数据模型
ZNode是ZooKeeper中数据的最小单元,每个ZNode上都可以保存数据,同时可以过载子节点,因此构成了一个层次化的命名空间,也就是树。
广义上来讲,事务是对物理和抽象的应用状态上的操作集合。(《事务处理:概念与技术》),从狭义上讲,事务就是指数据库事务,具有ACID特性,即原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
在ZooKeeper中,事务是指能够改变ZooKeeper服务器状态的操作,我们也称之为事务操作或更新操作,一般包括数据节点创建与删除、数据节点内容更新和客户端会话创建与失效等操作。对于每一个事务请求,ZooKeeper会为期分配一个全局唯一的事务ID,用ZXID来表示。
二、节点类型
在ZooKeeper中,每个数据节点都是有生命周期的,其生命周期的长短取决于数据节点的节点类型。
1、持久节点(PERSISTENT)
该数据节点别创建后,就会一直存在于ZooKeeper服务器上,直到有删除操作来主动删除该节点。
2、持久顺序节点(PERSISTENT_SEQUENTIAL)
持久顺序节点的基本特性和持久节点是一致的,额外的特性表现在顺序性上。在ZooKeeper中,每个父节点都会为它的第一级子节点维护一份顺序,用于记录每个子节点创建的先后顺序。
3、临时节点(EPHEMERAL)
临时节点的生命周期和客户端的回话绑定在一起,如果客户端会话失效,那么这个节点就会被自动地清理掉。
ZooKeeper规定了不能基于临时节点来创建子节点,即临时节点只能作为叶子节点。
4、临时顺序节点(EPHEMERAL_SEQUENTIAL)
三、Watcher——数据变更的通知
ZooKeeper的Watcher机制主要包括客户端线程、客户端WatcherManager和ZooKeeper服务器三部分。在具体工作流程上,简单来讲,客户端在ZooKeeper服务器注册Watcher的同时,会将Watcher对象存储在客户端的WatcherManager中。当ZooKeeper服务器端触发Watcher事件后,会向客户端发送通知,客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑。