概述:做爲一枚搬磚工人,只能不能的學習,稍微偷懶感受就要被淘汰了,趕忙彌補下。下面開始囉嗦的理論知識闡述,雖然囉嗦可是對於後續理解仍是頗有必要。java
Zookeeper是一個高性能,分佈式的,開源分佈式應用協調服務。它提供了簡單原始的功能,分 布式應用能夠基於它實現更高級的服務,好比同步,配置管理,集羣管理,名空間。它被設計爲 易於編程,使用文件系統目錄樹做爲數據模型。服務端跑在java上,提供java和C的客戶端 APInode
什麼是分佈式?linux
什麼是協調服務?編程
A distributed system consists of multiple computers that communicate through a computer network and interact with each other to achieve a common goal數組
多臺計算機構成網絡
計算機之間經過我網絡進行通訊數據結構
彼此進行交互併發
共同目標負載均衡
協調: 多個節點一塊兒完成的一個動做框架
舉例:
集羣成員管理 (Group membership)
鎖 (Locking)
選主 (Leader Election)
分層結構
樹形結構中的每一個節點叫作Znode
每一個Znode都有數據 (byte[] 數組),也能夠有子節點
節點路徑 一、斜線分割: /Zoo/Duck 二、沒有相對路勁
經過數據結構stat來存儲數據的變化 ACL的變化和時間戳
數據發生變化時,版本號會遞增
能夠對Znode中的數據進行讀寫操做
數據發佈/訂閱即所謂的配置中心:發佈者將數據發佈到zk的一個或者一系列節點上,訂閱者進行數據訂閱,當數據有變化時,能夠及時獲得數據的變化通知
本質是利用zookeeper的配置管理功能,涉及的步驟爲:
在分佈式系統中,命名服務(ͧName Serviceͨ)也是很重要的應用場景,經過zk也能夠實現相似 於J2EE中的JNDI的效果ͺ分佈式環境下,命名服務更可能是資源定位,並非是真正的實體資源, 其本質也是用到zk的集中配置管理和查找
經過watcher和通知機制實現
分佈式鎖
分佈式事務
當前集羣中的機器數量
集羣中機器的運行時狀態
集羣中節點的上下線操做
集羣節點的統一配置
臨時節點
順序節點
排它鎖
共享鎖
Leader:爲客戶端提供讀和寫服務
Follower:提供讀服務,全部寫服務都須要轉交給Leader角色,參與選舉
Observer:提供讀服務,不參與選舉過程,通常是爲了加強zk集羣的讀請求併發能力
– Zk的客戶端與zk的服務端之間的鏈接
– 經過心跳檢測保持客戶端鏈接的存活
– 接收來自服務端的watch事件通知
– 能夠設置超時時間
不是機器的意思
ZK樹形結構中的數據節點,用於存儲數據
持久節點:一旦建立,除非主動調用刪除操做,不然一直存儲在zk上
臨時節點:與客戶端的會話綁定,一旦客戶端會話失效,這個客戶端建立的全部臨時及誒單都會被移除
SEQUENTIAL Znode :建立節點時,若是設置屬性SEQUENTIAL,則會自動在節點名後面追加一個整型數字
version : 當前Znode的版本
Cversion : 當前Znode的子節點的版本
Aversion : 當前Znode的ACL(訪問控制)版本
做用於Znode節點上
多種事件通知:數據更新,子節點狀態等
相似於linux/unix的權限控制
CREATE:建立子節點的權限
READ:獲取節點數據和子節點列表的權限
WRITE:更新節點數據的權限
– DELETE:刪除子節點的權限