1. 程式人生 > 其它 >Zookeeper及基於Zookeeper的分散式鎖總結

Zookeeper及基於Zookeeper的分散式鎖總結

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也將被刪除。