一、版本号
- 每⼀个znode都有⼀个版本号,它随着每次数据变化⽽⾃增
- 两个API操作可以有条件地执⾏:setData和delete。这两个调⽤以版本号作为转⼊参数,只有当转⼊参数的版本号与服务器上的版本号⼀致时调⽤才会成功
应用场景
- 当多个ZooKeeper客户端对同⼀个znode进⾏操作时,版本的使⽤就会显得尤为重要
- 如下图所示:
- 客户端c1对znode/config写⼊了⼀些配置信息
- 然后另⼀个客户端c2同时更新了这个znode
- 之后c1的版本号已经过期,c1调⽤setData⼀定不会成功
- 使⽤版本机制有效避免了并行操作不一致的情况,如下图所示
二、相关版本
- 每个ZNode都维护一个叫作Stat的数据结构,Stat中记录了这个ZNode的三个数据版本
- get -s命令、ls -s命令、stat命令都可以来查看到节点的版本信息
- 如下所示:
- cversion:当前节点的子节点版本号,初始值为-1,每对该节点的子节点进行操作,这个cversion都会自动增加
- dataversion:当前子节点的数据版本号,初识版本为0,每对该节点的数据进行操作,这个dataVersion都会自动增加
- aclVersion:当前节点的acl权限版本号