1. 程式人生 > >Zookeeper功能說明及工作原理

Zookeeper功能說明及工作原理

zookeeper是一個分散式應用程式協調服務;它提供的功能有:命名服務、配置管理、叢集管理、分散式鎖、佇列管理。

命名服務zookeeper的檔案系統裡建立一個目錄可與下游程式約定好路徑,通過路徑即能互相探索發現。

配置管理在做應用伺服器叢集的時候;可以將專案修改的配置檔案全部放到zookeeper上面,儲存到zookeeper的某個目錄節點中,然後相關程式對這個目錄節點進行監聽,一有配置檔案傳送變化,那麼每個應用程式都將收到通知,然後從zk裡面獲取最新配置檔案同步到應用伺服器上。

叢集管理在應用伺服器叢集的時候;是否有叢集節點加入或退出的時候,zookeeper可以感知並通知其它應用伺服器知曉當前各個叢集節點的線上狀態。所有機器約定在父目錄下建立臨時目錄節點,然後監聽父目錄節點的子節點變化訊息。一旦有機器掛掉,該機器與

zookeeper的連線斷開,其所建立的臨時目錄節點被刪除,所有其他機器都收到通知:某個兄弟目錄被刪除。

分散式鎖zookeeper上的一個znode看作是一把鎖,通過createznode的方式來實現。所有客戶端都去建立 /distribute_lock 節點,最終成功建立的那個客戶端也即擁有了這把鎖。用完刪除掉自己建立的distribute_lock 節點就釋放出鎖。(關於分散式鎖,可以使用redissetnx命令來實現也是一種方法)

佇列管理第一種同步佇列:當一個佇列的成員都聚齊時,這個佇列才可用,否則一直等待所有成員到達(在約定目錄下建立臨時目錄節點,監聽節點數目是否是要求的數目)。第二種佇列按照

FIFO 方式進行入隊和出隊操作。

Zookeeper工作原理

Zookeeper 的核心是原子廣播,這個機制保證了各個Server之間的同步。實現這個機制的協議叫做Zab協議。Zab協議有兩種模式,它們分別是恢復模式(選主)和廣播模式(同步)。當服務啟動或者在領導者崩潰後,Zab就進入了恢復模式,當領導者被選舉出來,且大多數Server完成了和 leader的狀態同步以後,恢復模式就結束了。狀態同步保證了leaderServer具有相同的系統狀態。