文章目錄
-
-
- Zookeeper 幾個基本概念
-
- 叢集角色
- 會話
- 資料節點Znode
- Watcher 事件監聽器
- 幾個典型應用場景
-
- Master 選舉
- 實作分布式鎖
- 用作微服務的注冊中心
-
Apache Zookeeper 是由Apache Hadoop 的子項目發展而來,之後正式成為了Apache 的頂級項目。
Zookeeper 是一個典型的分布式資料一緻性的解決方案,它 為分布式應用提供了高效可靠的分布式協調服務,分布式應用程式可以基于它實作諸如資料釋出/訂閱、負載均衡、命名服務、分布式協調與通知、叢集管理、Master 選舉、分布式鎖等功能。
Zookeeper 幾個基本概念
叢集角色
Zookeeper 沒有沿用傳統的Master/Slave 概念,而是引入了Leader、Follower和Observer 三種角色。Zookeeper 叢集中的所有機器通過一個Leader 選舉過程來標明一台被稱為“leader”的機器,Leader 伺服器為用戶端提供讀寫服務。Follower 和Observer 都能提供讀服務,唯一的差別在于,Observer 機器不參與Leader 選舉過程,也不參與寫操作的“過半寫成功”政策,是以Observer 可以在不影響寫性能的情況下提升叢集的讀性能。
會話
在Zokeeper 中, 一個用戶端連接配接是指用戶端和伺服器之間的一個TCP 長連接配接。用戶端啟動的時候,首先會先與伺服器建立一個TCP 連接配接,從第一次連接配接建立開始,用戶端會話的生命周期也開始了。通過這個連接配接,用戶端能夠通過心跳檢測與伺服器保持有效的會話,也能向Zookeeper 伺服器發送請求并接受響應,同時還能通過該連接配接接受來自于伺服器的Watcher 事件通知。
資料節點Znode
Znode 是Zookeeper 資料模型中的資料單元。Zookeeper 将所有資料存儲在記憶體中,資料模型是一棵樹,路徑由/ 進行分割, 例如/home/path1。每個Znode 上都會儲存自己的資料内容,同時還會儲存一系列屬性資訊。
在Zookeeper 中,Znode 分為持久節點和臨時節點兩類。所謂持久節點是指一旦這個Znode 被建立了,這個Znode 将一直儲存在Zookeeper 上,除非進行主動删除操作。臨時節點的生命周期和用戶端會話綁定,一旦用戶端會話失效,那麼這個臨時節點就會被移除。另外Zookeeper 還允許使用者為每個節點添加自增的屬性,就是節點名後面會追加上一個自增的整型數字。
Watcher 事件監聽器
Zookeeper 允許使用者在指定節點上注冊一些Watcher, 并且在一些特定事件觸發的時候,Zookeeper 伺服器會通知到特定的用戶端。
幾個典型應用場景
Master 選舉
Master 選舉是分布式系統中非常常見的應用場景。下圖為一個最簡實作:

如上圖,三個節點1,2,3競選master, 三個節點同時在/master 路徑下建立臨時節點node, 但zookeeper 隻會保證一個用戶端建立成功。建立成功的節點即為master,建立失敗的節點則需注冊一個對/master/node 路徑的變更監聽。一旦master 節點當機了,則此臨時節點也會被删除,其它節點就會收到消息重新開始競選master。
實作分布式鎖
關于zookeeper 實作分布式鎖可以看這篇博文》》》
用作微服務的注冊中心
下圖隻是介紹最簡的實作:
-
服務注冊釋出
例如用戶端host1 在port1 想要釋出注冊UserService 服務,則它需要在/services/com.demo.UserServie 路徑下建立臨時節點,臨時節點值為服務位址host1:port1。服務當機,臨時節點自動關閉。
-
服務調用
例如有消費端想要調用UserService 服務,它隻需擷取/services/com.demo.UserService 下的所有節點,然後按照一定規則選取一個服務釋出方即可遠端調用其服務。