网站开发常用js函数,平面设计师用的网站,网站基础设施建设,做网站如何收费ZooKeeper 数据模型
ZooKeeper 拥有层次化的命名空间#xff0c;类似分布式文件系统#xff0c;但每个节点不仅能有子节点#xff0c;还可关联数据。节点路径为规范的绝对路径#xff0c;用斜杠分隔#xff0c;无相对引用。路径命名有如下约束#xff1a;
路径名不能包…ZooKeeper 数据模型
ZooKeeper 拥有层次化的命名空间类似分布式文件系统但每个节点不仅能有子节点还可关联数据。节点路径为规范的绝对路径用斜杠分隔无相对引用。路径命名有如下约束
路径名不能包含空字符 \u0000。不能使用显示不佳或易混淆的字符如 \u0001 - \u001F、\u007F、\u009F。禁止使用 \ud800 - \uF8FF、\uFFF0 - \uFFFF 这些字符。虽然 . 可作为其他名称的一部分但 . 和 .. 不能单独用于表示路径中的节点因为 ZooKeeper 不使用相对路径。保留关键字 zookeeper 不可用。
1. ZNodesZooKeeper 节点
状态结构Stat Structure每个 ZNode 维护一个状态结构包含数据变更、ACL 变更的版本号以及时间戳。版本号和时间戳用于验证缓存和协调更新。每次 ZNode 数据变更版本号都会增加。客户端更新或删除数据时需提供版本号若版本号不匹配操作将失败该行为可被覆盖。节点角色定义在 ZooKeeper 文档中ZNode 指数据节点服务器指构成 ZooKeeper 服务的机器法定节点指构成集群的服务器客户端指使用 ZooKeeper 服务的主机或进程。
2. Watches监听机制
客户端可对 ZNode 设置监听ZNode 发生变化时触发监听并清除。监听触发后ZooKeeper 会向客户端发送通知。
3. 数据访问
原子性命名空间中每个 ZNode 存储的数据读写是原子操作读操作获取所有关联数据字节写操作替换所有数据。访问控制每个节点有访问控制列表ACL用于限制访问权限。数据规模ZooKeeper 并非通用数据库或大对象存储主要管理协调数据数据通常较小以千字节为单位。客户端和服务器实现会检查确保 ZNode 数据小于 1M实际数据应更小。处理大数据会增加操作时间和影响延迟若需存储大数据可将其存于 NFS 或 HDFS 等大容量存储系统在 ZooKeeper 中存储指向这些存储位置的指针。
4. 特殊类型的 ZNodes
临时节点Ephemeral Nodes只要创建该 ZNode 的会话处于活动状态临时节点就存在。会话结束ZNode 会被删除且临时节点不允许有子节点。可使用 getEphemerals() API 获取会话创建的临时节点列表常用于服务发现场景。顺序节点Sequence Nodes创建 ZNode 时可要求 ZooKeeper 在路径末尾添加单调递增的计数器该计数器对父节点唯一格式为 %010d10 位数字前补 0。计数器是父节点维护的有符号整数4 字节超过 2147483647 会溢出。容器节点Container Nodes3.6.0 版本引入用于特定场景如领导者选举、锁机制等。当容器的最后一个子节点被删除容器节点未来某个时刻可能被服务器删除。创建容器节点的子节点时要处理 KeeperException.NoNodeException 异常若发生该异常需重新创建容器节点。TTL 节点TTL Nodes3.6.0 版本引入创建持久或持久顺序 ZNode 时可选择设置以毫秒为单位的 TTL。若 ZNode 在 TTL 内未被修改且无子节点未来某个时刻可能被服务器删除。默认情况下 TTL 节点功能禁用需通过系统属性启用否则创建时会抛出 KeeperException.UnimplementedException 异常。
5. ZooKeeper 中的时间跟踪
ZxidZooKeeper 事务 IDZooKeeper 状态的每次变更都会获得一个 Zxid 标记体现所有变更的全局顺序。每个变更有唯一 Zxid若 zxid1 zxid2则 zxid1 变更先于 zxid2 变更发生。版本号节点的每次变更会使节点的某个版本号增加包括数据版本号version、子节点版本号cversion和 ACL 版本号aversion。Ticks多服务器模式下服务器用 Ticks 定义事件时间如状态上传、会话超时、节点间连接超时等。Tick 时间通过最小会话超时2 倍 Tick 时间间接暴露若客户端请求的会话超时小于最小会话超时服务器会将实际会话超时设为最小会话超时。实时时间ZooKeeper 仅在 ZNode 创建和修改时在状态结构中记录时间戳不使用实时时间。
6. ZooKeeper 状态结构Stat Structure
每个 ZNode 的状态结构包含以下字段
czxid创建该 ZNode 的变更的 Zxid。mzxid最后修改该 ZNode 的变更的 Zxid。pzxid最后修改该 ZNode 子节点的变更的 Zxid。ctime该 ZNode 创建的时间从纪元开始的毫秒数。mtime该 ZNode 最后修改的时间从纪元开始的毫秒数。version该 ZNode 数据的变更次数。cversion该 ZNode 子节点的变更次数。aversion该 ZNode ACL 的变更次数。ephemeralOwner若该 ZNode 是临时节点为其所有者会话 ID否则为 0。dataLength该 ZNode 数据字段的长度。numChildren该 ZNode 的子节点数量。