`
zoutm
  • 浏览: 95225 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

zookeeper系列之数据模型

阅读更多

zookeeper的数据模型就是一颗树,对外的操作接口看起来就像一个小文件系统。题外话,很感慨最近遇到的好几个数据模型都是树状的,jcr的数据模型,jboss 的tree cache都是树状的表现形式。 每个Zookeeper server都存在一个相同的树,server之间需要维持树的一致性,并且任何时刻这棵树都存在在内存中,因此,我们一定要控制树的规模。树有多个节点(node)构成,要获取节点是通过path得到的。每个节点可以存储数据,节点的数据是以二进制的形式存在的。节点从存储角度看分可持久的节点和临时节点(Ephemeral node)。持久的节点保存在磁盘上,而临时节点只存储在内存中,当创建该节点的session关闭则该临时节点也自动删除。从节点的是否具有特殊性来看分普通节点和序列化节点(Sequential node)。序列化节点会在创建的节点名自动加上序列号。比如要创建/a/b/c/serieal-这样的序列化节点,如果服务器端已经存在这个序列号节点,且最大值为/a/b/c/serial-10,则新创建的名字为/a/b/c/serial-11。而普通节点的名字是由客户端指定的,服务器端不会自动改变节点的名字。下图为Zookeeper的数据模型示意图。注意,任何临时节点的父节点不能为临时节点。后续的Zookeeper应用中将会使用ephemeral_sequential作为分布式锁的实现模型。下面是一个树状图形式:



 每个节点都关联一个状态,Stat,结构如下:

private long czxid; 创建本节点时的zxid
  private long mzxid; 本节点最后修改时的zxid
  private long ctime;创建本节点的时间,都以leader时间为准
  private long mtime;本节点最后修改时的时间,以leader时间为准
  private int version;通过setData会增加版本,每次修改会使version版本增加1.
  private int cversion;孩子变化时会更改父亲节点的版本,每当有孩子增加或者删除时,此版本增加1
  private int aversion;每当有对此节点进行setACL操作时,aversion会自动增加1
  private long ephemeralOwner;如果节点为临时节点,则表明那个session创建此节点
  private int dataLength;关联节点的数据长度为多少
  private int numChildren;节点有多少个孩子
  private long pzxid;孩子最后一次变更(增加或删除)的zxid
 对于setData接口中需要提供的版本,如果为-1,则表明总是在最后的基础上修改,或者说自动覆盖原有数据,即使在发送请求的过程中已经被其他请求修改也自动覆盖。如果指定版本,如果指定的版本不是当前最新版本,则修改不会成功,会抛出badVersion错误。可以模拟CompareAndSet操作用来提供同步功能。

在一个请求的FinalRequestProcessor处理时,才将最后的结果应用到data_tree上。主要调用zks.dataTree.processTxn(request.hdr, request.txn).

  • 大小: 16.2 KB
分享到:
评论

相关推荐

    ZooKeeper 实现分布式锁的方法示例

    在介绍 ZooKeeper 分布式锁前需要先了解一下 ZooKeeper 中节点(Znode),ZooKeeper 的数据存储数据模型是一棵树(Znode Tree),由斜杠(/)的进行分割的路径,就是一个 Znode(如 /locks/my_lock)。每个 Znode 上...

    Hadoop日记Day20---ZooKeeper系列(四)

    配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公共的部分。简单地说,ZooKeeper可以作为一个具有高可用性的配置存储器,允许分布式应用的参与者检索和更新配置文件。使用...

    大数据期末知识点总结.pdf

    ⼤数据趋势: ⼤数据趋势: ⼤数据细分市场、⼤数据推动企业发展、⼤数据分析的新⽅法出现、⼤数据与云计算⾼度融合、⼤数据⼀体化设备陆续出现、⼤数据安全⽇ 益受到重视。 ⼤数据应⽤实例: ⼤数据应⽤实例: ⽹...

    javashuffle源码-spark-data-sources:使用V2API开发Spark外部数据源

    一系列不同复杂度的数据源,全部用 Java 实现,因为原生 Java 支持是新 API 的主要目标(未来可能会添加 Scala 版本) 一系列 Spark 示例来练习实现的各种数据源(现在也使用 Java) 该项目已从以下较旧的项目中分拆...

    Java及大数据学习路线.pdf

    Nginx反向代理、负载均衡、动静分离 JVM内存模型、参数调优 JUC线程⾼级 分布式架构注册中⼼Zookeeper 虚拟化应⽤容器Docker 全⽂检索引擎ElasticSearch 消息队列RabbitMQ 前端VUE/ES6 2⼤数据学习路线 2.1JavaSE ...

    Fourinone分布式计算框架

    首先,对分布式协同方面,它实现了Zookeeper所有的功能,并且做了很多改进,包括简化Zookeeper的树型结构,用domain/node两层结构取代,简化Watch回调多线程等待编程模型,用更直观的容易保证业务逻辑完整性的内容...

    Fourinone分布式并行计算四合一框架

     首先,对分布式协同方面,它实现了Zookeeper所有的功能,并且做了很多改进,包括简化Zookeeper的树型结构,用domain/node两层结构取代,简化Watch回调多线程等待编程模型,用更直观的容易保证业务逻辑完整性的内容...

    fourinone-3.04.25

    首先,对分布式协同方面,它实现了Zookeeper所有的功能,并且做了很多改进,包括简化Zookeeper的树型结构,用domain/node两层结构取代,简化Watch回调多线程等待编程模型,用更直观的容易保证业务逻辑完整性的内容...

Global site tag (gtag.js) - Google Analytics