Zookeeper作為分布式系統(tǒng)的底層協(xié)調(diào)服務(wù)有著其簡單可依靠的數(shù)據(jù)模型,數(shù)據(jù)模型加之?dāng)?shù)據(jù)同步、一致性處理和可靠性,在此之上有很多經(jīng)典的應(yīng)用,例如,分布式鎖、服務(wù)器動態(tài)上線下感知、主節(jié)點選舉、數(shù)據(jù)發(fā)布與訂閱、負載均衡等等。雖然應(yīng)用場景很多,但是最根本的還是基于兩個核心的服務(wù),1.管理和存儲數(shù)據(jù)結(jié)點,2.提供對結(jié)點的監(jiān)聽服務(wù)。
一.Zookeeper數(shù)據(jù)模型
Zookeeper數(shù)據(jù)模型類似Linux操作系統(tǒng)的文件系統(tǒng),也是以樹的形式來存儲。嚴格來說是一顆多叉樹,每個節(jié)點上都可以存儲數(shù)據(jù),每個節(jié)點還可以擁有N個子結(jié)點,最上層是根節(jié)點以“/”來代表。
在每個結(jié)點上都存儲了相應(yīng)的數(shù)據(jù),數(shù)據(jù)可以是字符串、二進制數(shù)。但是默認情況下每個結(jié)點的數(shù)據(jù)大小的上限是1M,這是因為Zookeeper主要是用來協(xié)調(diào)服務(wù)的,而不是存儲數(shù)據(jù),管理一些配置文件和應(yīng)用列表之類的數(shù)據(jù)。雖然可以修改配置文件來改變數(shù)據(jù)大小的上限,但是為了服務(wù)的高效和穩(wěn)定,建議結(jié)點數(shù)據(jù)不要超過默認值。
可以看到,在Zookeeper中存儲的創(chuàng)建的結(jié)點和存儲的數(shù)據(jù)包含結(jié)點的創(chuàng)建時間、修改時間、結(jié)點id、結(jié)點中存儲數(shù)據(jù)的版本、權(quán)限版本、孩子結(jié)點的個數(shù)、數(shù)據(jù)的長度等信息。在創(chuàng)建結(jié)點的時候還可以選擇臨時結(jié)點、序列化節(jié)點等類型,這在應(yīng)用時就非常方便了。在后面的應(yīng)用中會有所體現(xiàn)。
Zookeeper提供了兩種客戶端,命令行客戶端和API客戶端,關(guān)于命令行客戶端的使用可以help一下。