1.简介
应用通常使用的是zookeeper 客户端的服务。 zookeeper 客户端负责和zookeeper 服务端进行交互。
2.数据模型
Zookeeper 的数据模型是层次模型。 层次模型常见于文件系统. Zookeeper 使用文件系统模型主要基于以下两点考虑。
- 文件系统的树形结构便于表达数据之间的层次关系。
- 文件系统的属性结构便于为不同的应用分配独立的命名空间
Zookeeper的层次模型称为 data tree. Data tree 的每个节点叫做 znode. 不同于文件系统, 每个节点都能保存数据。每个节点都有一个版本,版本的序号从零开始。
3. data tree 接口
Zookeeper 对外提供一个用来访问data tree 的简化文件系统API。
- 使用UNIX 风格的路径来定位znode, 例如/A/X 表示znodeA 的子节点X.
- znode 的数据只支持全量写入和读取,没有像通用文件系统那样支持部分写入和读取。
- data tree 的所有API 都是 wait-free 的。 正在执行中的API调用不会影响其他API的完成
- data tree 的API 都是对文件系统的wait-free 操作,不直接提供锁这样的分布式协同机制, 但是data tree 的API 非常强大, 可以用来实现多种分布式协同机制。
4. znode 分类
一个znode 可以是持久性的也可以是临时性的:
- 持久性的znode: 这样的znode 在创建之后即使发生zookeeper 集群宕机或者client宕机也不会丢失。
- 临时性的znode: client 宕机或者client 在指定的timeout 时间内没有给zookeeper 集群发送消息, 这样的znode 就会消失。
znode 也可以是顺序性的 每一个 顺序性的znode 关联一个唯一一个 的单调递增整数。 这个单调递增整数是znode 名字后缀。如果上面两种znode 具备顺序性,又有一下两种znode:
- 持久顺序性的znode : znode 除了具备持久性的znode 的特点之外 znode 的名字应该具备顺序性。
- 临时顺序性的znode: znode 除了具备临时性znode 的特点之外, znode 的名字具备顺序性。