文章目錄
zookeeper是什麼
定義:zookeeper是一個開源的分佈式協調服務,一個典型的分佈式數據一致性解決方案。
前世今生:Yahoo創建,最初爲 hadoop的子項目,是google Chubby的開源實現,現爲Apache的頂級項目。
分佈式應用程序可以基於zookeeper實現數據發佈訂閱、負載均衡、命名服務、分佈式鎖、集羣管理等一系列功能。
zookeeper提供什麼能力
zookeeper搭建的集羣可以保證以下分佈式協議
- 順序一致性
從同一個客戶端發起的多個事務請求,將會嚴格按照發起順序應用到各個節點
- 原子性
所有事務請求的處理結果在集羣中所有機器的應用情況一致。所有機器要麼全部應用,要麼全部不應用。
- 單一視圖
無論連接的是哪個節點,效果都一樣
- 可靠性
一旦一個事務被應用,那麼該事物狀態會被保持
- 實時性
zookeeper保證一定時間段後,客戶端從服務端讀取到最新狀態
zookeeper的特點
###數據模型簡單
zk的數據模型是一個共享的、樹樹型結構的名字空間。由一系列ZNode組成,ZNode被稱爲數據節點,具有層級關係。zk將全量數據存儲在內存中,以此來實現提高服務器吞吐,減少延遲的目的
可構成集羣
zk集羣由一組機器構成,3~5臺即可,組成zk集羣的每臺機器在內存中維護當前的服務器狀態,並且每臺機器之間都互相保持着通信。集羣中只要超過一般的機器能正常工作,那整個集羣就能正常對外服務
順序訪問
對於來自客戶端的每個更新請求,zk都會分配一個全局唯一的遞增編號,事務操作將按照這個編號按照先後順序執行,且該特性可被實用於其他用途。
高性能
全量數據都存儲在內存中,並直接服務於客戶端的所有非事務請求,尤其適合讀操作爲主的場景。
zookeeper的基本概念
zk的概念此處只做基本介紹和簡單講解,後續做詳細講解
集羣角色
- Leader
一個,提供讀寫能力
- Follower
多個,提供讀能力,選舉Leader能力
- Observer
多個,提供讀能力,不參與選舉
會話
zk客戶端和服務器之間是TCP長連接。sessionTimeout設置一個會話超時時間,連接異常斷開時,只要在超時時間內連接上任意一臺zk節點,之前的會話依然有效。
節點
1.機器節點
構成集羣的機器
2.數據節點 ZNode
ZNode數據節點,數據模型中的數據單元。數據模型是一棵樹,由斜槓(/)分割路徑,保存數據內容和屬性。可分爲持久節點和臨時節點兩類
版本
每個ZNode上面都有一個stat的數據結構,記錄3個數據版本:
- version:當前ZNode版本
- cversion:當前ZNode子節點的版本
- aversion:當前ZNode的ACL版本
ACL
(access control lists) 權限控制清單
- CREATE: 創建子節點權限
- READ: 獲取節點數據和子節點列表的權限
- WRITE: 更新節點數據的權限
- DELETE: 刪除子節點的權限
- ADMIN: 設置節點ACL的權限
create和delete都是針對子節點的權限控制
Watcher
事件監聽。zk的重要特性,zk允許用戶註冊事件到指定節點,當特定時間觸發,事件通知會被髮送到具體的客戶端。