文章目錄
參考鏈接:Zookeeper面試題
1 What is ZooKeeper ?
ZooKeeper 是一個集中化服務,維護配置信息、命名,提供分佈式同步和集羣服務。這些服務都以分佈式應用的某種形式使用。使用過程中必然會有大量的工作去修復問題或者競爭條件,因爲這些服務使用的困難性,應用程序最初可能不會展現,在後期的變化中越來越脆弱難以管理,即使正確的使用,不同的服務在部署時導致管理的複雜性。
- Zookeeper保證瞭如下分佈式一致性特性
- 順序一致性
- 原子性
- 單一視圖
- 可靠性
- 實時性(最終一致性)
2 ZooKeeper提供了什麼?
- 文件系統
- 通知機制
3 ZooKeeper 文件系統
ZooKeeper提供一個多層級的節點命名空間(節點成爲znode),與文件系統不同的是,這些節點都可以設置關聯的數據,而文件系統中只有文件節點可以存放數據而目錄節點不可以。也就是znode的節點既是文件節點也是目錄節點。
ZooKeeper爲了保證高吞吐和低延遲,在內存中維護了這個樹狀的目錄結構,這種特性使得Zookeeper不能用於存放大量的數據,每個節點的存放數據上限爲1M。
4 ZAB協議
ZAB協議是爲分佈式協調服務Zookeeper專門設計的一種支持崩潰恢復的原子廣播協議。
- 兩種基本的模式
- 崩潰恢復
- 消息廣播
當整個zookeeper集羣剛剛啓動或者Leader服務器宕機、重啓或者網絡故障導致不存在過半的服務器與Leader服務器保持正常通信時,所有進程(服務器)進入崩潰恢復模式,首先選舉產生新的Leader服務器,然後集羣中Follower服務器開始與新的Leader服務器進行數據同步,當集羣中超過半數機器與該Leader服務器完成數據同步之後,退出恢復模式進入消息廣播模式,Leader服務器開始接收客戶端的事務請求生成事物提案來進行事務請求處理。
5 四種類型的數據節點 Znode
- PERSISTENT(持久節點)
除非手動刪除,否則節點一直存在於Zookeeper上 - EPHEMERAL(臨時節點)
臨時節點的生命週期與客戶端會話綁定,一旦客戶端會話失效(客戶端與zookeeper連接斷開不一定會話失效),那麼這個客戶端創建的所有臨時節點都會被移除。 - PERSISTENT_SEQUENTIAL(持久順序節點)
基本特性同持久節點,只是增加了順序屬性,節點名後邊會追加一個由父節點維護的自增整型數字。 - EPHEMERAL_SEQUENTIAL(臨時順序節點)
基本特性同臨時節點,增加了順序屬性,節點名後邊會追加一個由父節點維護的自增整型數字。
6 ZooKeeper Watches 機制:數據變更通知
Zookeeper允許客戶端向服務端的某個Znode註冊一個Watches監聽,當服務端的一些指定事件觸發了這個Watches,服務端會向指定客戶端發送一個事件通知來實現分佈式的通知功能,然後客戶端根據Watches通知狀態和事件類型做出業務上的改變。
- 工作機制
- 客戶端註冊 Watch
- 服務端處理 Watch
- 客戶端回調 Watch
- Watches 通知類型
- One-time trigger,一次性觸發
- Sent to the client,客戶端回調