Apache ZooKeeper - ZooKeeper 数据模型回顾
文章目錄
- Pre
- 數據模型
- 概述
- znode 節點類型與特性
- 持久節點
- 臨時節點
- 有序節點
- 節點小結
- 節點的狀態結構
Pre
前面我們梳理了Zk的核心功能 , ZooKeeper 作為一個分布式協調服務,提供了在分布式環境下一致性問題的解決方案 。
今天 我們再來回顧下基礎知識
基本分為三大模塊:
-
數據模型
-
Watch 監控
-
ACL 權限控制
數據模型
概述
通過 ZooKeeper 提供的 create 命令來創建幾個節點,分別是:“/locks”“/servers”“/works”:
create /locks create /servers create /works最終在 ZooKeeper 服務器上會得到一個具有層級關系的數據結構,如下圖所示,這個數據結構就是 ZooKeeper 中的數據模型
ZooKeeper 中的數據模型是一種樹形結構,類似文件目錄, 有一個根文件夾,下面還有很多子文件夾。
ZooKeeper 的數據模型具有一個固定的根節點(/),我們可以在根節點下創建子節點,并在子節點下繼續創建下一級節點。
ZooKeeper 樹中的每一層級用斜杠(/)分隔開,且只能用絕對路徑(如“get /servers/ap1”)的方式查詢 ZooKeeper 節點,而不能使用相對路徑。
znode 節點類型與特性
持久節點
ZooKeeper 中的數據節點也分為持久節點、臨時節點和有序節點 。 新版本中增加了 容器節點 和 TTL節點,這里我們關注下 持久節點、臨時節點和有序節點 。
持久節點在 ZooKeeper 最為常用的,幾乎所有業務場景中都會包含持久節點的創建。
之所以叫作持久節點是因為一旦將節點創建為持久節點,該數據節點會一直存儲在 ZooKeeper 服務器上,即使創建該節點的客戶端與服務端的會話關閉了,該節點依然不會被刪除。
如果我們想刪除持久節點,就要顯式調用 delete 函數進行刪除操作。
臨時節點
臨時節點是指,如果將節點創建為臨時節點,那么該節點數據不會一直存儲在 ZooKeeper 服務器上。當創建該臨時節點的客戶端會話因超時或發生異常而關閉時,該節點也相應在 ZooKeeper 服務器上被刪除。同樣,我們可以像刪除持久節點一樣主動刪除臨時節點。
在平時的開發中,我們可以利用臨時節點的這一特性來做服務器集群內機器運行情況的統計,將集群設置為“/servers”節點,并為集群下的每臺服務器創建一個臨時節點“/servers/ap1”,當服務器下線時該節點自動被刪除,最后統計臨時節點個數就可以知道集群中的運行情況。
有序節點
有序節點并不算是一種單獨種類的節點,而是在之前提到的持久節點和臨時節點特性的基礎上,增加了一個節點有序的性質。所謂節點有序是說在我們創建有序節點的時候,ZooKeeper 服務器會自動使用一個單調遞增的數字作為后綴,追加到我們創建節點的后邊。
例如一個客戶端創建了一個路徑為 works/task- 的有序節點,那么 ZooKeeper 將會生成一個序號并追加到該節點的路徑后,最后該節點的路徑為 works/task-1。通過這種方式我們可以直觀的查看到節點的創建順序。
節點小結
上述這幾種數據節點雖然類型不同,但 ZooKeeper 中的每個節點都維護有這些內容:一個二進制數組(byte data[]),用來存儲節點的數據、ACL 訪問控制信息、子節點數據(因為臨時節點不允許有子節點,所以其子節點字段為 null),除此之外每個數據節點還有一個記錄自身狀態信息的字段 stat。
節點的狀態結構
每個節點都有屬于自己的狀態信息 ,執行 stat /nodeName,可以看到控制臺輸出了一些信息,這些就是節點狀態信息。
[zk: localhost:2181(CONNECTED) 6] stat /artisan-persist cZxid = 0xa ctime = Mon Nov 16 23:07:37 CST 2020 mZxid = 0xb mtime = Mon Nov 16 23:08:55 CST 2020 pZxid = 0xa cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 12 numChildren = 0 [zk: localhost:2181(CONNECTED) 7]每一個節點都有一個自己的狀態屬性,記錄了節點本身的一些信息,這些屬性如下
在 ZooKeeper 中為數據節點引入了版本的概念,每個數據節點有 3 種類型的版本信息,對數據節點的任何更新操作都會引起版本號的變化。
ZooKeeper 的版本信息表示的是對節點數據內容、子節點信息或者是 ACL 信息的修改次數。
行了,退下了
總結
以上是生活随笔為你收集整理的Apache ZooKeeper - ZooKeeper 数据模型回顾的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache ZooKeeper - 使
- 下一篇: Apache ZooKeeper -