ZooKeeper 技術內幕:版本

    今天藉助ZK實現領導者選舉,畫時序圖過程當中發現,準確控制一次選舉從開始到結束,很是得困難。甚至準備在ZK額外記錄一系列的狀態信息來肯定選舉開始和結束的邊界,邏輯複雜且難以100%保證狀態一致。併發

    細想一下,是缺乏一個惟一標記集羣變化的標識。來處理屢次變化重疊、單次變化各節點是否完成同步。less

    發現忽略了ZK帶給咱們的一個頗有用的特性,可使用ZNode的版原本標記一次集羣節點的變化。ZK不只有節點數據變動的版本信息還有一個父節點版本(感知子節點的增刪變化)。分佈式

背景

ZK 中,ZNode 都有一個 版本號spa

  1. 版本號,都有哪些?
  2. 版本號,如何修改?
  3. 版本號,什麼做用?

版本號

版本號,都有哪些?

每一個 ZNode 都有 3 類版本信息:code

  • version:數據內容,版本
  • cversion:子節點列表,版本
  • aversion:ACL 權限,版本

特別說明:事務

  1. ZK 中版本就是修改次數:即便修改先後,內容不變,但版本仍會+1version=0 表示節點建立以後,修改的次數爲 0。
  2. cversion 子節點列表:ZNode,其中 cversion 只會感知子節點列表變動信息,新增子節點、刪除子節點,而不會感知子節點數據內容的變動。
  3.  

版本號,如何修改?

下述狀況,版本號會自動更新:get

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

版本號,什麼做用?

目標:解決 ZNode 的併發更新問題,實現 CAS(Compare And Switch)樂觀鎖。同步

補充:樂觀鎖事務,分爲 3 個典型階段:it

  1. 數據讀取
  2. 寫入校驗
  3. 數據寫入

參考資料

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

相關文章
相關標籤/搜索