ZooKeeper 是 Apache 的一個頂級項目,為分布式應用提供高效、高可用的分布式協調服務。它主要提供了諸如命名服務、配置服務、集群管理、分布式鎖等分布式基礎服務。由于 ZooKeeper 便捷的使用方式、卓越的性能和良好的穩定性,被廣泛地應用于諸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系統中。且zookeeper的應用場景有:1、統一配置文件管理;2、服務注冊和發現;3、提供分布式鎖;4、集群管理。
zookeeper是干什么的
所提供服務:
1、命名服務
在zookeeper的文件系統里創建一個目錄,即有唯一的path。在我們使用tborg無法確定上游程序的部署機器時即可與下游程序約定好path,通過path即可實現互相探索發現。
2、配置服務
程序是需要配置的,如果程序分散部署在多臺機器上,要逐個改變配置就變得困難。現在把這些配置全部放到zookeeper上去,保存在 Zookeeper 的某個目錄節點中,然后所有相關應用程序對這個目錄節點進行監聽,一旦配置信息發生變化,每個應用程序就會收到 Zookeeper 的通知,然后從 Zookeeper 獲取新的配置信息應用到系統中就好。
3、集群管理
所有機器約定在父目錄GroupMembers下創建臨時目錄節點,然后監聽父目錄節點的子節點變化消息。一旦有機器掛掉,該機器與 zookeeper的連接斷開,其所創建的臨時目錄節點被刪除,所有其他機器都收到通知:某個兄弟目錄被刪除,于是,所有人都知道了。
4、分布式鎖
鎖服務可以分為兩類,一個是保持獨占,另一個是控制時序。對于第一類,我們將zookeeper上的一個znode看作是一把鎖,通過createznode的方式來實現。所有客戶端都去創建 /distribute_lock 節點,最終成功創建的那個客戶端也即擁有了這把鎖。廁所有言:來也沖沖,去也沖沖,用完刪除掉自己創建的distribute_lock 節點就釋放出鎖。對于第二類, /distribute_lock 已經預先存在,所有客戶端在它下面創建臨時順序編號目錄節點,和選master一樣,編號最小的獲得鎖,用完刪除,依次方便。
應用場景:
1、統一配置文件管理
即只需要部署一臺服務器,則可以把相同的配置文件同步更新到其他所有服務器,此操作在云計算中應用特別多。<a href="#watchconfig">查看詳細 </a>
2、服務注冊和發現
類似消息隊列MQ,dubbo發布者會把數據存到znode中,訂閱者會讀取這個數據。如下圖所示,發布者發布數據,訂閱者根據數據的變化進行操作。利用 Znode 和 Watcher,可以實現分布式服務的注冊和發現,最著名的應用就是阿里的分布式 RPC 框架 Dubbo。
3、提供分布式鎖
分布式環境中不同進程之間會爭奪資源,類似多線程中的鎖。下圖中多個服務器中的進程要操作網盤中的文件,為了避免沖突,需要分布式鎖。雅虎研究員設計 ZooKeeper 的初衷。利用 ZooKeeper 的臨時順序節點,可以輕松實現分布式鎖。
4、集群管理
集群中保證數據的強一致性。無論客戶端讀取哪一臺機器的數據,都會得到一致的數據,因為zookeeper會將數據從主節點同步到其他節點。
[免責聲明]
文章標題: zookeeper是干什么的
文章內容為網站編輯整理發布,僅供學習與參考,不代表本網站贊同其觀點和對其真實性負責。如涉及作品內容、版權和其它問題,請及時溝通。發送郵件至36dianping@36kr.com,我們會在3個工作日內處理。