Zookeeper及基於Zookeeper的分散式鎖總結
阿新 • • 發佈:2022-04-17
1. Zookeeper
ZooKeeper 內部儲存的資料結構
/
+-- node1
+-- node2
| +-- sub_node21 -> "I am sub_node21"
| +-- sub_node22 -> "I am sub_node22"
+-- node3
資料模型圖
graph TB A((/)) --> B((node1)) A((/)) --> C((node2)) B((node1)) --> D((sub_node11)) B((node1)) --> E((sub_node12))Znode 四種類型
持久 <----> 臨時
無序<-----> 順序
持久無序型
持久有序型
臨時無序型
臨時有序型
graph LR subgraph 持久節點 A(持久)-->AB(持久有序) A(持久)-->AC(持久無序) note(持久型會一直在Zookeeper中儲存,即使客戶端退出) end subgraph 臨時節點 C(臨時)-->CB(臨時有序) C(臨時)-->CC(臨時無序) noteC(客戶端退出, 臨時節點將會被刪除) end D(有序) --> E(即Zookeeper會在znode名稱後增加原子有序的序列號) F(無序) --> G(預設,即不新增序列號)Sessions(會話)
會話對於ZooKeeper的操作非常重要。會話中的請求按FIFO順序執行。一旦客戶端連線到伺服器,將建立會話並向客戶端分配會話ID 。
客戶端以特定的時間間隔傳送心跳以保持會話有效。如果ZooKeeper集合在超過伺服器開啟時指定的期間(會話超時)都沒有從客戶端接收到心跳,則它會判定客戶端宕機。
會話超時通常以毫秒為單位。當會話由於任何原因結束時,在該會話期間建立的臨時節點也會被刪除。
Watches(監視)
監視是一種簡單的機制,使客戶端收到關於ZooKeeper集合中的更改的通知。客戶端可以在讀取特定znode時設定Watches。Watches會向註冊的客戶端傳送任何znode(客戶端登錄檔)更改的通知。
Znode更改是與znode相關的資料的修改或znode的子項中的更改。只觸發一次watches。如果客戶端想要再次通知,則必須通過另一個讀取操作來完成。當連線會話過期時,客戶端將與伺服器斷開連線,相關的watches也將被刪除。