一、版本號
- 每⼀個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權限版本號