zookeeper-简介(一)

来源:互联网 发布:公司logo设计软件 编辑:程序博客网 时间:2024/05/24 04:20

Zookeeper 是一种分布式的,开源的,应用于分布式应用的协作服务。

它提供了一些简单的操作,使得分布式应用可以基于这些接口实现诸如同步、配置维护和分集群或者命名的服务。

Zookeeper 很容易编程接入,它使用了一个和文件树结构相似的数据模型。可以使用 Java 或者 C 来进行编程接入。

1. Zookeeper 数据模型

ZooKeeper 拥有一个层次的命名空间,这个和标准的文件系统非常相似

ZooKeeper 树中的每个节点被称为—Znode。

和文件系统的目录树一样,ZooKeeper 树中的每个节点可以拥有子节点。

但也有不同之处:

1) 引用方式:

在 ZooKeeper 中,路径由 Unicode 字符串组成,并且有一些限制。字符串"/zookeeper"用以保存管理信息,比如关键配额信息。

2) Znode 结构

ZooKeeper 命名空间中的Znode,兼具文件和目录两种特点。

既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分

每个 Znode 由 3 部分组成:

stat:此为状态信息, 描述该 Znode 的版本, 权限等信息

data:与该 Znode 关联的数据

children:该 Znode 下的子节点

服务器和客户端都被设计为严格检查并限制每个Znode的数据大小至多1M,但常规使用中应该远小于此值

3) 数据访问

每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限

4) 节点类型

Persistent Nodes:永久有效地节点,除非client 显式的删除,否则一直存在。

Ephemeral Nodes:临时节点,仅在创建该节点 client 保持连接期间有效,一旦连接丢失,zookeeper 会自动删除该节点。

Sequence Nodes:顺序节点,ZooKeeper 会自动在节点路径末尾添加递增序号,这种类型是实现分布式锁,分布式 queue 等特殊功能的关键。

5) 监控

客户端可以在节点上设置 watch,

当节点状态发生改变时(Znode的增、删、改)将会触发 watch 所对应的操作。

当 watch 被触发时,ZooKeeper 将会向客户端发送且仅发送一条通知,因为 watch 只能被触发一次,这样可以减少网络流量。

ZooKeeper可以为所有的读操作设置watch,这些读操作包括:exists()、getChildren()及 getData()