Zookeeper基礎

在深入學習ZooKeeper工作之前,讓我們一起來看看ZooKeeper 的一些基本概念。我們將在本章討論下列主題 -

  • 體系結構
  • 分層命名空間
  • 會話
  • 監控

ZooKeeper的體系結構

看看下面的圖。它描繪ZooKeeper 的「客戶端 - 服務器架構」。

Architecture

ZooKeeper 架構的一部分組件如下表中所解釋。

部分

描述

Client

客戶端,在我們的分佈式應用集羣的一個節點,從服務器獲取信息。對於一個特定的時間間隔,每個客戶端將消息發送到服務器,以讓服務器都知道客戶機是活的。

同樣,服務器會發送一個確認當客戶端連接。如果沒有從所連接的服務器的響應,客戶端自動重定向消息到另一個服務器

Server

服務器,ZooKeeper集成的一個節點,提供所有的服務提供給客戶。給出應答客戶,告知該服務器還活着

合組

ZooKeeper 服務器組。節點所需要形成的合奏的最小數目爲3

Leader

它執行自動恢復,如果任何連接的節點的故障的服務器節點。領導者服務啓動

Follower

遵循領導指示服務器節點

分層命名空間

下圖顯示了用於內存中表示 ZooKeeper 文件系統的樹形結構。 ZooKeeper節點被稱爲znode。每個znode由一個名稱識別,並通過路徑(/)序列隔開。

  • 在圖中,首先有一個根znode,它由「/」分隔。在根下,有兩個邏輯命名空間 config 和 workers。

  • 在config命名空間用於集中配置管理以及 workers 命名空間用於命名。

  • 在 config 命名空間下,每個znode可以存儲高達 1MB 的數據。這類似於UNIX文件系統,不同的是父 znode 也可以存儲數據。這種結構的主要目的是存儲同步數據以及描述znode的元數據。這種結構被稱爲 ZooKeeper數據模型。

Hierarchical

在 ZooKeeper 數據模型中每個 znode 維護一個 stat 結構。 一個統計(stat )只是提供了一個 znode 元數據。 它由版本號,動作控制列表(ACL),時間戳和數據長度組成。

  • 版本號 − 每個znode都有一個版本號,這意味着每個相關的時間使用節點改變數據,其相應的版本號也將增加。使用版本號是重要的,在多個 zookeeper 的客戶端正在努力通過相同znode執行操作。

  • 動作控制列表(ACL) −ACL是基本的身份驗證機制,用於訪問znode。它管理所有的znode讀寫操作。

  • 時間戳 − 時間戳表示過去時間,從znode創建和修改起算。它通常以毫秒錶示。ZooKeeper 確定每次從「事務ID」(zxid)更改znodes。Zxid是獨特的,爲每個事務處理維持時間,使您可以輕鬆地識別從一個請求到另一個請求經過的時間。

  • 數據長度 − 存儲在 znode 數據的合計量是數據長度。可以存儲的最大數據容量爲1MB。

Znodes 類型

Znodes 被歸類爲持久性,順序和短暫。

  • 持久性znode − 持久性 znode 處於活動狀態,即使客戶端,它創造了特定的 znode。默認情況下,所有的 znodes 是持久的,除非另有說明。

  • 短暫znode − 短暫znodes活躍,直到客戶端還活着。當客戶端被從 ZooKeeper 集合斷開連接,然後znodes自動刪除。由於這個原因,只有短暫znodes不允許再有一個子。如果短週期znode被刪除,那麼下一個合適的節點,將填補其位置。短暫znodes 發揮在領導選舉中起重要作用。

  • 連續znode − 連續znodes可以是持久或短暫的。當一個新的znode作爲連續znode創建的,則 ZooKeeper 通過將10位的序列號爲原始名稱設置znode的路徑。例如,如果使用路徑 /myapp 來創建一個znode作爲連續znode,ZooKeeper將改變路徑 /myapp0000000001並設置一個序列號爲0000000002。如果兩個連續znodes同時被創建,ZooKeeper從來不使用相同數量在每個znode上。連續znodes在鎖定和同步中起到重要作用。

會話

會話對於 ZooKeeper 操作是非常重要的。請求在會話 FIFO 順序執行。當一個客戶端連接到服務器,會話將建立一個會話ID並分配給客戶端。

客戶端在特定的時間間隔發送心跳來保持會話有效。如果 ZooKeeper 從客戶端接收檢測信號超過在服務的開始指定的期間(會話超時),它認爲該客戶死亡。

會話超時通常以毫秒錶示。當一個會話因任何原因而結束,該會話期間短暫創造了的 znodes 會被刪除。

監視

監視是一個簡單的機制,在ZooKeeper集合通知下以獲取客戶有關的變化。 客戶端可以設置監視,同時讀取特定znode。監視發送通知給註冊的客戶機對任何znode(在其上的客戶端寄存器)的變化。

節點改變時znode或子znode變化相關聯的數據也會被修改。監視只被觸發一次。如果客戶想要再次通知,則必須通過另一次讀操作來完成。當一個連接會話已過期,客戶端會從服務器斷開,並在相關的監視也將被刪除。