天天看點

ZooKeeper 功能

ZooKeeper 的設計目标是将那些複雜且容易出錯的分布式一緻性服務封裝起來,構成一個高效可靠的原語集,并以一系列簡單易用的接口提供給使用者使用。

原語: 作業系統或計算機網絡用語範疇。它是由若幹條指令組成的,用于完成一定功能的一個過程。具有不可分割性,即原語的執行必須是連續的,在執行過程中不允許被中斷。

ZooKeeper 是一個典型的分布式資料一緻性解決方案,

分布式應用程式可以基于 ZooKeeper 實作諸如:

資料釋出/訂閱、負載均衡、命名服務、分布式協調/通知、叢集管理、Master 選舉、分布式鎖和分布式隊列等功能。

ZooKeeper 一個最常用的使用場景就是用于擔任服務生産者和服務消費者的注冊中心。

服務生産者将自己提供的服務注冊到 ZooKeeper 中心,服務的消費者在進行服務調用的時候先到 ZooKeeper 中查找服務,擷取到服務生産者的詳細資訊之後,再去調用服務生産者的内容與資料。

如下圖所示,在 Dubbo 架構中 ZooKeeper 就擔任了注冊中心這一角色。

Zookeeper叢集管理

所謂叢集管理無在乎兩點:是否有機器退出和加入、選舉master。 

Zookeeper分布式鎖

有了zookeeper的一緻性檔案系統,鎖的問題變得容易。鎖服務可以分為兩類,一個是保持獨占,另一個是控制時序。 

對于第一類,我們将zookeeper上的一個znode看作是一把鎖,通過createznode的方式來實作。

所有用戶端都去建立 /distribute_lock 節點,最終成功建立的那個用戶端也即擁有了這把鎖。用完删除掉自己建立的distribute_lock 節點就釋放出鎖。 

對于第二類, /distribute_lock 已經預先存在,所有用戶端在它下面建立臨時順序編号目錄節點,和選master一樣,編号最小的獲得鎖,用完删除,依次友善。