🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # zookeeper特性 1. Zookeeper:一个leader,多个follower组成的集群 2. 全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的 3. 分布式读写,更新请求转发,由leader实施 4. 顺序一致性: 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行 5. 数据更新原子性,一次数据更新要么成功(半数以上节点成功),要么失败 6. 实时性,在一定时间范围内,client能读到最新数据 7. 可靠性:一旦一个更新动作被执行,所有的服务器都将执行这个更新动作 # zookeeper数据结构 ## 概况 1. 层次化的目录结构,命名符合常规文件系统规范(见下图) 2. 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识 3. 节点Znode可以包含数据(只能存储很小量的数据,<1M;最好是1k字节以内)和子节点(但是EPHEMERAL类型的节点不能有子节点,下一页详细讲解) 4. 客户端应用可以在节点上设置监视器(后续详细讲解) ## 数据结构图 ![](https://box.kancloud.cn/4ff820c3d52cbdaa393d01dedbfc9fa2_355x207.png) ## 节点类型 节点存数据不要超过1M,因为他要半数以上同步过去 1. Znode有三种类型: 短暂(ephemeral)(断开连接自己删除) 持久(persistent)(断开连接不删除) 顺序 (sequential) (自动在节点路径末尾添加递增序号,同时client也能设置他的生命周期是永久还是会话绑定的) 2. Znode有四种形式的目录节点(默认是persistent ) ~~~ PERSISTENT (持久) 永久有效的节点,除非client显示的删除它,否则它会一直存在 PERSISTENT_SEQUENTIAL(持久序列/test0000000019 ) EPHEMERAL (临时的)临时节点,仅在创建该节点client与服务器保持会话期间有效,一旦会话失效,zk会自动删除该节点,同时这个节点不能含有子节点 EPHEMERAL_SEQUENTIAL ~~~ 3. 创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护 4. 在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序 # 写数据流程 ![](https://box.kancloud.cn/ef77fdcf1738b88129e62cdf698af90e_1234x589.png)