【!Important】Zookeeper用來做什么的,有幾種類型的節點


zookeeper=文件系統+通知機制

一、Zookeeper提供了什么

1、文件系統

Zookeeper維護一個類似文件系統的數據結構

每個子目錄項如NameService都被稱為znoed,和文件系統一樣,我們能夠自由的增加、刪除znode,在znode下增加、刪除子znode,唯一不同的在於znode是可以存儲數據的。

有4種類型的znode

1、PERSISTENT--持久化目錄節點

客戶端與zookeeper斷開連接后,該節點依舊存在

2、PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點

客戶端與zookeeper斷開連接后,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號

3、EPHEMERAL-臨時目錄節點

客戶端與zookeeper斷開連接后,該節點被刪除

4、EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點

客戶端與zookeeper斷開連接后,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號

2、通知機制

客戶端注冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增加刪除)等,zookeeper會通知客戶端。

二、zookeeper可以做什么

1、命名服務

在zookeeper的文件系統里創建一個目錄,即有唯一的path,在我們使用tborg無法確定上游程序的部署機器時即可與下游程序約定好path,通過path即能互相探索發現。

2、配置管理

 程序總是需要配置的,如果程序分散部署在多台機器上,要逐個改變配置就變得困難。好吧,現在把這些配置全部放到zookeeper上去,保存在 Zookeeper 的某個目錄節點中,然后所有相關應用程序對這個目錄節點進行監聽,一旦配置信息發生變化,每個應用程序就會收到 Zookeeper 的通知,然后從 Zookeeper 獲取新的配置信息應用到系統中就好。

3、集群管理

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

        對於第一點,所有機器約定在父目錄GroupMembers下創建臨時目錄節點,然后監聽父目錄節點的子節點變化消息。一旦有機器掛掉,該機器與 zookeeper的連接斷開,其所創建的臨時目錄節點被刪除,所有其他機器都收到通知:某個兄弟目錄被刪除,於是,所有人都知道:它上船了。新機器加入 也是類似,所有機器收到通知:新兄弟目錄加入,highcount又有了。

        對於第二點,我們稍微改變一下,所有機器創建臨時順序編號目錄節點,每次選取編號最小的機器作為master就好。

4、分布式鎖

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

        對於第一類,我們將zookeeper上的一個znode看作是一把鎖,通過createznode的方式來實現。所有客戶端都去創建 /distribute_lock 節點,最終成功創建的那個客戶端也即擁有了這把鎖。廁所有言:來也沖沖,去也沖沖,用完刪除掉自己創建的distribute_lock 節點就釋放出鎖。

        對於第二類, /distribute_lock 已經預先存在,所有客戶端在它下面創建臨時順序編號目錄節點,和選master一樣,編號最小的獲得鎖,用完刪除,依次方便。

5、隊列管理

兩種類型的隊列:

1、 同步隊列,當一個隊列的成員都聚齊時,這個隊列才可用,否則一直等待所有成員到達。

2、隊列按照 FIFO 方式進行入隊和出隊操作。

第一類,在約定目錄下創建臨時目錄節點,監聽節點數目是否是我們要求的數目。

第二類,和分布式鎖服務中的控制時序場景基本原理一致,入列有編號,出列按編號。                 

         終於了解完我們能用zookeeper做什么了,可是作為一個程序員,我們總是想狂熱了解zookeeper是如何做到這一點的,單點維護一個文件系統沒有什么難度,可是如果是一個集群維護一個文件系統保持數據的一致性就非常困難了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM