本文大部分翻译自: http://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html
引言:
Zookeeper主要为分布式程序提供一致性协调服务。
Zookeeper数据模型:
Zookeeper有一个分层的命名空间,很像一个分布式文件系统。与文件系统唯一的不同的是在系统中的每个节点可以包含数据和子节点。
Znodes:en
在Zookeeper树中的每一个节点被称作为znode,znode维护了一个状态结构,其中包括数据变化的版本号,ccl变化,时间戳。每次数据改变之后,版本号就会增加。。每次客户更新数据的时候,也必须提供原数据的版本号。如果zookeeper里面存储的是更新的数据,那么这个更新就会失败(也可以忽视这个版本强制更新)。
注意,在zookeeper中,znode是数据节点(data node),服务器(server)指的是上面运行了zookeeper服务的机器,quorum peers指着的是组成一个合辑(ensemble )的服务器。客户(client)指的是任何使用zookeeper服务的宿主或者进程。
Znode是变成着主要操作的实体,它有一下几个特性:
观察(Watches)
客户可以在znodes上设置观察。这个znode上面的变化会出发这个观察。并清除这个观察。客户会在观察触发的时候得到通知。
数据存储(Data Access)
每个节点有一个访问控制表来限制谁可以对这个节点进行读写。
瞬时节点(Ephemeral Nodes)
Zookeeper有一类节点叫做瞬时节点,它的生命周期同创建它的会话(session)一样。当一个session结束之后,该节点就会不被自动删除。由于这个特性,它不允许有子节点。
顺序节点(Sequence Nodes) -- 唯一命名
创建znode的时候,你可以要求zookeeper添加一个单调递增的计数器在后面。可以用于Queue Recipe