Zookeeper簡介

一、Zookeeper介紹

1、Zookeeper是一個開放源碼的分佈式協調服務,有知名互聯網公司雅虎創建,是Google Chubby的開源實現。設計目標是將那些複雜且容易出錯的分佈式一致性服務封裝起來,構成一個高效可靠的原語集,並以一系列簡單易用的接口提供給用戶使用。

2、Zookeeper是一個典型的分佈式一致性的解決方案,分佈式應用程序可以基於它實現諸如數據發佈/訂閱、負載均衡、命名服務、分佈式協調/通知、集羣管理、Master選舉、分佈式鎖和分佈式隊列等功能。

3、Zookeeper的設計目標:簡單的數據模型、可以構建集羣、順序訪問、高性能。

二、Zookeeper的基本概念

1、集羣角色

Zookeeper集羣中的所有機器通過一個Leader選舉過程來選定一臺被稱爲“Leader”的機器,Leader機器爲客戶端提供讀和寫服務。Follower和Observer都能夠提供讀服務,唯一的區別在於,Observer機器不參與Leader的選舉過程,也不參與寫操作的“過半寫成功”策略,因此Observer可以在不影響寫性能的情況下提升集羣的讀性能。

2、會話(session)

在Zookeeper中,一個客戶端連接指客戶端和服務器之間的一個tcp長連接。客戶端啓動的時候,首先會與服務器建立一個tcp連接,從第一次連接建立開始,客戶端回話的生命週期也開始了,通過這個連接,客戶端能夠通過心跳檢測與服務器保持有效的會話,也能夠向Zookeeper服務器發送請求並接受響應,同時還能夠通過該連接接收來自服務器的Watch事件通知。Session的SessionTimeout值用來設置一個客戶端會話的超時時間。當客戶端連接斷開時,只要在sessionTimeout規定的時間內能夠重新連接上集羣中任意一臺服務器,那麼之前創建的回話仍然有效。

3、數據節點(Znode)

Zookeeper中,“節點”分爲兩類,第一類同樣是指構成集羣的機器,我們稱之爲機器節點;第二類則是指數據模型中的數據單元,我們稱之爲數據節點---ZNode。Zookeeper將所有數據存儲在內存中,數據模型是一棵樹,有斜槓(/)進行分割的路徑,就是一個Znode。每個ZNode上都會保存自己的數據內容,同事還會保存一系列屬性信息。

ZNode可以分爲持久節點和臨時節點。持久節點是指一單這個ZNode被創建,除非主動進行ZNode的移除操作,否則這個ZNode將一直保存在Zookeeper上。臨時節點,生命週期和客戶端會話綁定,一旦客戶端會話失效,那麼這個客戶端創建的所有臨時節點都會被移除。

4、版本

Zookeeper的每個ZNode上都會存儲數據,對應於每個ZNode,Zookeeper都會爲其維護一個焦作Stat的數據結構,Stat中記錄了這個ZNode的三個數據版本,分別是version(當前ZNode的版本)、cversion(當前ZNode子節點的版本)和aversion(當前ZNode的ACL版本)。

5、Watcher

時間監聽器,Zookeeper允許用戶在指定節點上註冊一些Watcher,並且在一些特定事件觸發的時候,Zookeeper服務端會將事件通知到感興趣的客戶端上去,該機制是Zookeeper實現分佈式協調服務的重要特性。

6、ACL(Access Control Lists)

Zookeeper採用ACL策略來進行權限控制,類似於UNIX文件系統的權限控制。Zookeeper定義了5種權限。CREATE、REDE、WRITE、DELETE、ADMIN。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章