1、概念node
ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:主從協調、服務器節點動態上下線、配置維護、域名服務、分佈式同步(分佈式共享鎖)、組服務等。ZooKeeper代碼版本中,提供了分佈式獨享鎖、選舉、隊列的接口,代碼在zookeeper-3.4.3\src\recipes。其中分佈鎖和隊列有Java和C兩個版本,選舉只有Java版本。算法
Zookeeper自己就是一個分佈式集羣程序,集羣的角色:Leader 和follower(Observer)只要集羣中有半數以上節點存活,集羣就能提供服務。因爲zookeeper的以上特性,集羣部署時,需安裝爲基數太。服務器
2、 原理負載均衡
ZooKeeper是以Fast Paxos算法爲基礎的,Paxos 算法存在活鎖的問題,即當有多個proposer交錯提交時,有可能互相排斥致使沒有一個proposer能提交成功,而Fast Paxos做了一些優化,經過選舉產生一個leader (領導者),只有leader才能提交proposer,具體算法可見Fast Paxos。所以,要想弄懂ZooKeeper首先得對Fast Paxos有所瞭解。
ZooKeeper的基本運轉流程:
一、選舉Leader。
二、同步數據。
三、選舉Leader過程當中算法有不少,但要達到的選舉標準是一致的。
四、Leader要具備最高的執行ID,相似root權限。
五、集羣中大多數的機器獲得響應並接受選出的Leader。分佈式
3、特色oop
在Zookeeper中,znode是一個跟Unix文件系統路徑類似的節點,能夠往這個節點存儲或獲取數據。若是在建立znode時Flag設置爲EPHEMERAL(短暫的),那麼當建立這個znode的節點和Zookeeper失去鏈接後,這個znode將再也不存在在Zookeeper裏,Zookeeper使用Watcher察覺事件信息。當客戶端接收到事件信息,好比鏈接超時、節點數據改變、子節點改變,能夠調用相應的行爲來處理數據。Zookeeper的Wiki頁面展現瞭如何使用Zookeeper來處理事件通知,隊列,優先隊列,鎖,共享鎖,可撤銷的共享鎖,兩階段提交。優化
4、Zookeeper文件系統
每一個子目錄項如 NameService 都被稱做爲znode,和文件系統同樣,咱們可以自由的增長、刪除znode,在一個znode下增長、刪除子znode,惟一的不一樣在於znode是能夠存儲數據的。
有四種類型的znode:
一、PERSISTENT-持久化目錄節點
客戶端與zookeeper斷開鏈接後,該節點依舊存在
二、PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點
客戶端與zookeeper斷開鏈接後,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號
三、EPHEMERAL-臨時目錄節點
客戶端與zookeeper斷開鏈接後,該節點被刪除
四、EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點
客戶端與zookeeper斷開鏈接後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號 spa
5、Zookeeper通知機制
客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增長刪除)時,zookeeper會通知客戶端。server
6、zookeeper使用場景blog
(1)採集任務接管
(2)服務主從選舉
(3)分佈式共享鎖
(4)配置中心
最後,zookeeper的使用場景固然不侷限於博主舉例出來的這幾種,還有如dubbo將其使用爲服務器註冊中心、負載均衡等等;若是您對這塊知識很是感興趣,請關注博主並歡迎同博主交流。今天的教程就到這裏,若是你們以爲博主的分享不錯,請點贊支持博主。
參考文獻:https://yq.aliyun.com/articles/588640