zookeeper 分布式服務框架是 apache hadoop 的乙個子專案,主要是用來解決分布式應用中經常遇到的一些資料管理問題。
如:集群管理、統一命名服務、分布式配置管理、分布式訊息佇列、分布 式鎖、分布式通知協調等。
越來越多的分布式計算開始強依賴zk,比如storm、hbase
zookeeper對分布式開發帶來很多便利,用zk的獨有特性巧妙地解決了很多難題; 很多分布式技術用到zookeeper或多或少特性,尤其是新生代分布式技術幾乎都會依賴zookeeper特性,如hbase、火爆的storm。
zookeeper名字空間由節點znode構成,其組織方式類似檔案系統,其中各個節點相當於目錄和檔案,通過路徑作為唯一標識。與檔案系統不同的是,每個節點具有與之對應的資料內容,同時也可以具有子節點。
zookeeper用於儲存協調資料,如狀態、配置、位置等資訊,每個節點儲存的資料量很小,kb級別。
節點維護乙個狀態stat結構(包括資料變化的版本號、acl變化、時間戳),以允許快取驗證與協調更新。每當節點資料內容改變,多乙個版本號,類似hbase。客戶端獲取資料的同時也會獲取資料版本號。節點的資料內容以原子方式讀寫。
節點具有乙個訪問控制列表(accesscontrol list - acl)來約束訪問操作,即具有許可權控制。
watches:zookeeper對node的增、刪、改、查都可觸發監聽
watch事件是一次性觸發器,當watch監視的資料發生變化時,通知設定了該watch的client,即watcher
watch事件非同步傳送至觀察者
watch是一次性觸發的並且在獲取watch事件和設定新watch事件之間有延遲,所以不能可靠的觀察到節點的每一次變化
客戶端監視乙個節點,總是先獲取watch事件,再發現節點的資料變化
watch事件的順序對應於zookeeper服務所見的資料更新的順序
流行的應用場景
1、分布式應用配置管理
發布與訂閱即所謂的配置管理,顧名思義就是將資料發布到zk節點上,供訂閱者動態獲取資料,實現配置資訊的集中式管理和動態更新。例如全域性的配置資訊,位址列表等就非常適合使用。
2、name service
這個主要是作為分布式命名服務,通過呼叫zk的create node api,能夠很容易建立乙個全域性唯一的path,這個path就可以作為乙個名稱。序列化節點
3、分布式通知/協調
zookeeper中特有watcher註冊與非同步通知機制,能夠很好的實現分布式環境下不同系統之間的通知與協調,實現對資料變更的實時處理。
使用方法:通常是不同系統都對zk上同乙個znode進行watch,監聽znode的變化(包括znode本身內容及子節點的),其中乙個系統update了 znode,那麼另乙個系統能夠收到通知,並作出相應處理。
3、分布式鎖
分布式鎖,這個主要得益於zookeeper為我們保證了資料的強一致性,zk集群中任意節點(乙個zk server)上的相同znode的資料是一定是相同的。
鎖服務可以分為兩類,乙個是保持獨佔,另乙個是控制時序。
4、集群管理
hbase master選舉則是zookeeper經典的使用場景;
storm集群管理
5、分布式佇列
佇列方面,一種是常規的先進先出佇列,另一種是要等到佇列成員聚齊之後的才統一按序執行。對於第二種先進先出佇列,增加分布式鎖服務以控制時序場景
Zookeeper應用場景
zookeeper是乙個高可用的分布式資料管理與系統協調框架。基於對paxos演算法的實現,使該框架保證了分布式環境中資料的強一致性,也正是基於這樣的特性,使得zookeeper能夠應用於很多場景。網上對zk的使用場景也有不少介紹,本文將結合作者身邊的專案例子,系統的對zk的使用場景進行歸類介紹。值...
Zookeeper應用場景
分布式佇列 fifo 先進先出 barrier 同步佇列 共享鎖集群管理 leader選舉 命名服務 分布式應用配置項的管理等 fifo設計思路 1.在 queue fifo的目錄下建立 sequential 型別的子目錄 x i 這樣就能保證所有成員加入佇列時都是有編號的。2.出佇列時通過 get...
ZooKeeper典型應用場景
zookeeper 是乙個開源的高可用的分布式資料管理與系統協調框架,基於對 paxos 演算法的實現,保證了分布式環境中資料的強一致性。發布與訂閱模型 發布者發布資料到 zk 節點上,供訂閱者動態獲取資料。在資料量很少,但是資料更新快的場景下 訊息中介軟體中的發布者和訂閱者的負載均衡,linked...