zookeeper學習整理
概述
zookeeper是一個高可用的分布式數據管理與協調框架,基於ZAB算法實現,主要解決分布式一致性問題。
https://www.cnblogs.com/felixzh/p/5869212.html
核心概念
節點
zk的命名空間是由一系列數據節點組成的,節點上可以包含數據。
類型
節點類型分為:持久節點、臨時節點、順序節點。
創建過程中通過組合有以下4種:
CreateMode.PERSISTENT :永久性節點
CreateMode.PERSISTENT_SEQUENTIAL :永久性序列節點
CreateMode.EPHEMERAL :臨時節點,會話斷開或過期時會刪除此節點
CreateMode.PERSISTENT_SEQUENTIAL :臨時序列節點,會話斷開或過期時會刪除此節點
只有葉子節點可以是臨時節點,其他節點必須是永久性節點。
狀態信息
Stat類中包含了數據節點的所有狀態信息。
版本-保證分布式數據原子性操作
zk中數據節點具有3種類型的版本信息:
version : 當前數據節點數據內容的版本號
cversion: 當前數據節點子節點的版本號
aversion: 當前數據節點ACL變更版本號
Watcher-數據變更的通知
zk內部一個重要的特性就是可以監聽節點的變化狀態。
ACL--保障數據的安全
zk提供了一套完善的Access Control List權限控制機制來保障數據的安全。
客戶端
原生
https://www.cnblogs.com/zpb2016/p/5791641.html
http://blog.csdn.net/jiuqiyuliang/article/details/56012027
zkClient.jar
http://blog.csdn.net/wo541075754/article/details/68929512
Curator
全世界使用最廣泛的zk客戶端之一。
對事件監聽、分布式鎖、分布式計數器、master選舉、分布式Barrier有很好的支持。
應用場景
分布式鎖
鎖包括排他鎖和共享鎖,排他鎖又成為寫鎖、獨占鎖,加鎖期間只允許一個事務對其操作。共享鎖又成為讀鎖,當一個事務對數據對象加上共享鎖,事務就只能進行數據讀取,其他事務也只能對數據對象加共享鎖,直到此對象上所有共享鎖被釋放。
分布式鎖實現流程:
1.在/app下創建臨時節點lock
2.獲取/app下所有子節點
3.判斷是否是寫請求,如果是寫請求獲取排他鎖,自己的lock節點序號節點最小占有鎖,然後執行、釋放,否則監聽比自己序號小的節點,等待鎖;
4.如果是讀請求,判斷自己的lock節點是否是最小的,或者比自己小的都是讀請求,如果是占有鎖,否則監聽比自己序號小的節點,等待鎖。
master選舉
利用zk的強一致性,能夠保證高並發下節點的創建一定能全局唯一性。
實現流程:
N臺服務在同一時刻同時對/app節點下創建"master"臨時子節點,只有其中一臺可以創建成功,此時創建成功的便是master,其他服務隊/app節點上註冊子節點變更的watcher,如果master掛了,其他服務重新進行選舉。
配置中心
配置中心也可以叫做數據發布/訂閱系統。zk內部采用的是推拉相結合的方式:客戶端向服務端註冊需要關註的節點,一旦節點數據發生變更,服務端就會向相應的客戶端發送watcher事件通知,客戶端接收到消息後,需要主動到服務端獲取最新的數據。
命名服務
在zk中,每一個數據節點都能夠維護一份子節點的順序順列,當客戶端對其創建一個順序子節點的時候zk會自動以後綴的形式在其子節點上添加一個序號,命名服務即使利用zk的這種特性。
動態DNS服務
分布式隊列/屏障
zookeeper學習整理