数据模型

zk采用层级命名空间存储数据,类似分布式文件系统结构,每一个节点通过路径唯一标示------ZNODE,每一个znode拥有数据访问控制权限、数据存储、状态、版本等信息。

znode基本特性:

  • watches:监听者,客户端可以对znode添加监听,当znode发生状态变化时,zk会发送通知到client。详情:https://zookeeper.apache.org/doc/r3.4.9/zookeeperProgrammers.html#ch_zkWatches
  • data access control: 基于znode的特殊性:znode本身不是专门用于数据存储的,而是用来管理分布式协作数据的,所以client可以对znode进行读写操作是需要做访问权限控制的,并且,每一个znode存储的数据默认不超过1M大小,所以对相应的写操作还需要做相关逻辑校验。
  • ephemeral node:临时节点,该类型节点特性:生命周期和创建该节点的session保持一致(每一个client都会和zk server 保持一个session,session本身会有失效时间),一旦session过期,该节点会被自动删除,因此该类型节点不允许创建子节点。
  • sequence node:顺序节点,对于同一个parent node下创建的节点,每新增一个节点都会给节点名称添加一个自增长的后缀标识。
  • Time in znode:
    • zxid
    • version numbers
    • ticks
    • real time
  • zk stat structure:

会话(Session)

客户端和zk集群之间会保持一个session用于客户端和服务端之间的通信session基本生命周期如下:

  1. connecting:连接状态,客户端试图连接server;
  2. connected:连接成功;
  3. closed:当一个正常的连接发生session失效、server主动关闭等情况时,会转入closed状态。

基本特性:

  1. 客户端和server间采用长连接
  2. 连接建立后,server产生session ID(64位)返还给客户端
  3. 客户端定期发送ping包来检查和保持和server的连接
  4. 一旦session结束或超时,所有ephemeral节点会被删除
  5. 客户端可根据情况设置合适的session超时时间

watches

client可以通过watche端对znode添加监听,一旦znode发生状态变化,client即会收到事件通知。基本特性:

  1. 当侦听的变化发生时,server发消息给客户端进行通知
  2. 客户端使用单线程对所有事件按顺序同步回调
  3. 触发回调条件:
    1. 客户端连接、断开连接
    2. 节点数据发生改变
    3. 节点本身发生变化
  4. Watch是单发的,每次触发后会被自动删除
  5. 如果需要再次侦听事件,必须重新安装watch
  6. 因为watch是One-time trigger,所以无法保证跟踪到每一个znode的变化
  7. 避免安装大量watches侦听在同一个节点

文档

中文文档:http://zookeeper.majunwei.com/document/3.4.6/DeveloperProgrammerGuide.html

官方文档:https://zookeeper.apache.org/doc/r3.4.9/zookeeperProgrammers.html#ch_guideToZkOperations

使用zk需要处理的一些问题:https://wiki.apache.org/hadoop/ZooKeeper/FAQ

results matching ""

    No results matching ""