ZooKeeper 技术内幕:版本

    今天借助ZK实现领导者选举,画时序图过程中发现,准确控制一次选举从开始到结束,非常得困难。甚至准备在ZK额外记录一系列的状态信息来确定选举开始和结束的边界,逻辑复杂且难以100%保证状态一致。

    细想一下,是缺少一个唯一标记集群变化的标识。来处理多次变化重叠、单次变化各节点是否完成同步。

    发现忽略了ZK带给我们的一个很有用的特性,可以使用ZNode的版本来标记一次集群节点的变化。ZK不仅有节点数据变更的版本信息还有一个父节点版本(感知子节点的增删变化)。

背景

ZK 中,ZNode 都有一个 版本号

  1. 版本号,都有哪些?
  2. 版本号,如何修改?
  3. 版本号,什么作用?

版本号

版本号,都有哪些?

每个 ZNode 都有 3 类版本信息:

  • version:数据内容,版本
  • cversion:子节点列表,版本
  • aversion:ACL 权限,版本

特别说明:

  1. ZK 中版本就是修改次数:即使修改前后,内容不变,但版本仍会+1version=0 表示节点创建之后,修改的次数为 0。
  2. cversion 子节点列表:ZNode,其中 cversion 只会感知子节点列表变更信息,新增子节点、删除子节点,而不会感知子节点数据内容的变更。
  3.  

版本号,如何修改?

下述情况,版本号会自动更新:

  1. 版本自增:每次变化,版本就加一;

版本号,什么作用?

目标:解决 ZNode 的并发更新问题,实现 CAS(Compare And Switch)乐观锁。

补充:乐观锁事务,分为 3 个典型阶段:

  1. 数据读取
  2. 写入校验
  3. 数据写入

参考资料

from: http://ningg.top/zookeeper-lesson-7-zookeeper-version/

转载于:https://my.oschina.net/yaohonv/blog/1605345

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值