Zookeeper基礎


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

  • 體系結構
  • 分層名稱空間
  • 對談
  • 監控

ZooKeeper的體系結構

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

Architecture of ZooKeeper

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 Namespace

在 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變化相關聯的資料也會被修改。監視只被觸發一次。如果客戶想要再次通知,則必須通過另一次讀操作來完成。當一個連線對談已過期,用戶端會從伺服器斷開,並在相關的監視也將被刪除。