更新時間:2023-09-25 來源:黑馬程序員 瀏覽量:
zookeeper是CP架構的集群,采用 zab 一致性協議確保數據的強一致。對zookeeper中的數據進行修改,其內部會自動將所有節點數據進行修改后才提供查詢服務,不會出現redis那種異步同步導致數據丟失的問題。
zookeeper 數據是目錄樹的形式,每個目錄稱為znode,znode中可存儲數據(一般不超過 1M),還可以在其中增加子節點。
zookeeper中的節點有兩種,分別為臨時節點和永久節點。
(1)永久節點: 客戶端與zookeeper斷開連接后,該節點依舊存在。
(2)臨時節點: 客戶端與zookeeper斷開連接后,該節點會被刪除。臨時節點下不能創建子節點。
SEQUENTIAL屬性: ZooKeeper允許用戶為每個節點添加一個特殊的屬性:SEQUENTIAL,一旦節點被標記上這個屬性,那么在這個節點被創建的時候,ZooKeeper 會自動在其節點名后面追加上一個整型數字,這個整型數字是一個由父節點維護的自增數字。
依賴于zk節點路徑唯一的機制來實現的(利用zk同一目錄下不能創建多個相同名稱的節點這個特性,來實現分布式鎖的功能。對于同一個路徑,只能有一個客戶端能創建成功,其它的都創建失敗)。
節點唯一性:對于同一個路徑,只能有一個客戶端能創建成功,其它的都創建失敗。
創建臨時節點:客戶端與zookeeper斷開連接后,該節點會被刪除,不必設置鎖超時時間。
基于臨時節點的zk鎖(請求排隊)
基于臨時節點實現,會產生驚群效應,性能稍差。
基于臨時順序節點的zk鎖(請求排隊)
Curator是Netflix公司開源的?套zookeeper客戶端框架,封裝了大部分Zookeeper的功能,例如Leader選舉、分布式鎖等,減少了技術人員在使用Zookeeper時的底層細節開發工作。
Curator中封裝了以下幾種鎖:
InterProcessMutex:分布式可重入排它鎖 InterProcessSemaphoreMutex:分布式不可重入排它鎖 InterProcessReadWriteLock:分布式讀寫鎖 InterProcessMultiLock:多重共享鎖,將多個鎖作為單個實體管理的容器 InterProcessSemaphoreV2:共享信號量
實際開發中,可以直接使用 Curator客戶端中的各種官方實現的分布式鎖,沒必要重復造輪子。