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