ZooKeeper簡介
ZooKeeper是一個分布式應用程序協調服務,主要用於解決分布式集群中應用系統的一致性問題。它能提供類似文件系統的目錄節點樹方式的數據存儲,主要用途是維護和監控所存數據的狀態變化,以實現對集群的管理。
ZooKeeper應用場景:
統一命名
配置管理
集群管理
共享鎖
隊列管理
ZooKeeper架構
ZooKeeper集群的總體架構如下圖:
ZooKeeper數據模型
ZooKeeper擁有樹形層次的數據模型,與標准的文件系統非常相似,ZooKeeper樹中的每個節點被稱為Znode。
Znode的主要特點如下:
(1) Znode中僅存儲與同步相關的數據,因此數據量很小,大概B到KB量級,例如狀態信息、配置內容、位置信息等。
(2) 一個Znode維護一個狀態結構,包括:版本號、ACL(訪問控制列表)變更、時間戳。Znode存儲的數據每次發生變化,版本號都會遞增,這樣客戶端就可以基於版本號檢索相關數據。
(3) 每個Znode都有一個ACL,用來限定該Znode可以被何種請求訪問。 客戶端可以在Znode上設置一個觀察者(Watcher),如果該Znode上的數據發生變更,ZooKeeper就會通知客戶端,從而觸發觀察者中實現的邏輯的執行。
ZooKeeper節點類型
ZooKeeper中節點主要有四種類型:
持久節點(PERSISTENT)
持久順序節點( PERSISTENT _SEQUENTIAL)
臨時節點(EPHEMERAL)
臨時順序節點( EPHEMERAL _SEQUENTIAL )
ZooKeeper觀察者模式
ZooKeeper允許客戶端向服務器注冊一個觀察者(Watcher),一旦服務器的狀態發生變化,ZooKeeper就會通知已經在它上面注冊的觀察者做出相應的反應。 Watcher機制主要包括客戶端線程、客戶端WatchManager和ZooKeeper服務器三部分。
ZooKeeper分布式鎖
在分布式環境下,為了保證數據的一致性,需要利用分布式鎖技術來保證只有固定數量的進程對數據進行修改。只有獲取鎖的客戶端可以對數據進行修改,其余客戶端只能暫時等待。
ZooKeeper分布式鎖機制的實現流程如下圖: