在互聯網應用中,爲了適應業務的要求,企業級的系統一般是龐大的,爲了解決這一問題,分佈式架構應運而生。node
分佈式架構帶來了其特有的複雜性。各個系統須要協調服務,因而zookeeper便誕生了。數據庫
zookeeper主要用來解決分佈式集羣中應用系統的一致性問題。網絡
ZooKeeper採用了相似文件系統的的數據模型。架構
1)相似文件系統的結構負載均衡
2)在zookeeper中,每個節點被稱爲一個znode如nodeA、nodeB都是一個znode,每一個znode具備惟一的路徑標識。分佈式
在zookeeper中,有4種znoode類型。oop
一、PERSISTENT:持久節點。建立後只要不刪除就永久存在。性能
二、EPHEMERAL:臨時節點。會話結束後該結點自動被刪除,EPHEMERAL結點不容許有子節點。學習
三、PERSISTENT_SEQUENTIAL:持久有序節點。code
四、EPHEMERAL_SEQUENTIAL:臨時有序節點。
3) znode節點能夠被監控,包括這個目錄中存儲的數據的修改,子節點目錄的變化,一旦變化能夠通知設置監控的客戶端,這個功能是zookeeper對於應用最重要的特性,經過這個特性能夠實現的功能包括配置的集中管理,集羣管理,分佈式鎖等等。
4)每個znode爲三部分組成:
一、stat. 此爲狀態信息, 描述該znode的版本, 權限等信息
;
二、data. 與該znode關聯的數據
;
三、children. 該znode下的子節點
;
讓咱們來看看zookeeper能夠爲咱們帶來什麼,在來決定是否要適用這項結束。
1)配置管理:zookeepe經過發佈與訂閱模式爲咱們提供了一個集中的配置管理,當這個配置產生變化時,能夠馬上通知到各個應用系統。
2)Name Server:分佈式環境下,常常須要對應用/服務進行統一命名,便於識別不一樣服務。
好比經過名稱來獲取服務的地址。
3)分佈式鎖:單機程序爲了不數據不一致的問題經常加鎖,zookeeper能夠爲咱們提供在分佈式狀況須要對相應資源加鎖。
(能夠支持多種鎖類型如互斥鎖、自旋鎖等)
4)集羣管理:在分佈式環境下常常會因爲各類緣由,好比硬件故障,軟件故障,網絡問題,有些節點會進進出出。zookeeper經過對臨時有序節點和監聽機制實現集羣管理。
1)storm中用zookeeper來協調同步集羣中機器的狀態(並不傳遞消息)。基本不會有負載,對機器性能沒什麼要求。
2)dubbo中採用zookeeper來做註冊中心,在阿里內部採用的是基於數據庫的註冊中心。
3)Hadoop中用zookeeper來管理集羣中的NameNode。
4)kafka經過zookeeper實現生產者在消費端的負載均衡,動態的集羣擴展等等。
還有不少場景就不一一列舉了。
雖然在挺久以前就接觸過zk,但一直沒有太深刻的學習,如今正好工做中須要使用,藉此機會再深刻的學習下。