设为首页 收藏本站
查看: 753|回复: 0

[经验分享] zookeeper系列之数据模型

[复制链接]

尚未签到

发表于 2017-4-19 09:37:57 | 显示全部楼层 |阅读模式
  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作为分布式锁的实现模型。下面是一个树状图形式:
  
DSC0000.gif
 每个节点都关联一个状态,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).

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-366195-1-1.html 上篇帖子: zookeeper-3.5--1.summary 下篇帖子: zookeeper Have smaller server identifier
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表