zookeeper學習整理

概述

zookeeper是一個高可用的分佈式數據管理與協調框架,基於ZAB算法實現,主要解決分佈式一致性問題。html

http://www.javashuo.com/article/p-acbzudyc-bo.html算法

核心概念

節點

zk的命名空間是由一系列數據節點組成的,節點上能夠包含數據。安全

類型

節點類型分爲:持久節點、臨時節點、順序節點。併發

建立過程當中經過組合有如下4種:app

  • CreateMode.PERSISTENT :永久性節點框架

  • CreateMode.PERSISTENT_SEQUENTIAL :永久性序列節點分佈式

  • CreateMode.EPHEMERAL :臨時節點,會話斷開或過時時會刪除此節點高併發

  • CreateMode.PERSISTENT_SEQUENTIAL :臨時序列節點,會話斷開或過時時會刪除此節點.net

只有葉子節點能夠是臨時節點,其餘節點必須是永久性節點。htm

狀態信息

Stat類中包含了數據節點的全部狀態信息。

版本-保證分佈式數據原子性操做

zk中數據節點具備3種類型的版本信息:

  • version : 當前數據節點數據內容的版本號

  • cversion: 當前數據節點子節點的版本號

  • aversion: 當前數據節點ACL變動版本號

Watcher-數據變動的通知

zk內部一個重要的特性就是能夠監聽節點的變化狀態。

ACL--保障數據的安全

zk提供了一套完善的Access Control List權限控制機制來保障數據的安全。

客戶端

原生

http://www.javashuo.com/article/p-pckbzquq-gr.html

http://blog.csdn.net/jiuqiyuliang/article/details/56012027

zkClient.jar

http://blog.csdn.net/wo541075754/article/details/68929512

Curator

全世界使用最普遍的zk客戶端之一。

對事件監聽、分佈式鎖、分佈式計數器、master選舉、分佈式Barrier有很好的支持。

應用場景

分佈式鎖

鎖包括排他鎖和共享鎖,排他鎖又成爲寫鎖、獨佔鎖,加鎖期間只容許一個事務對其操做。共享鎖又成爲讀鎖,當一個事務對數據對象加上共享鎖,事務就只能進行數據讀取,其餘事務也只能對數據對象加共享鎖,直到此對象上全部共享鎖被釋放。

分佈式鎖實現流程

1.在/app下建立臨時節點lock

2.獲取/app下全部子節點

3.判斷是不是寫請求,若是是寫請求獲取排他鎖,本身的lock節點序號節點最小佔有鎖,而後執行、釋放,不然監聽比本身序號小的節點,等待鎖;

4.若是是讀請求,判斷本身的lock節點是不是最小的,或者比本身小的都是讀請求,若是是佔有鎖,不然監聽比本身序號小的節點,等待鎖。

master選舉

利用zk的強一致性,可以保證高併發下節點的建立必定能全局惟一性。

實現流程

N臺服務在同一時刻同時對/app節點下建立"master"臨時子節點,只有其中一臺能夠建立成功,此時建立成功的即是master,其餘服務隊/app節點上註冊子節點變動的watcher,若是master掛了,其餘服務從新進行選舉。

配置中心

配置中心也能夠叫作數據發佈/訂閱系統。zk內部採用的是推拉相結合的方式:客戶端向服務端註冊須要關注的節點,一旦節點數據發生變動,服務端就會向相應的客戶端發送watcher事件通知,客戶端接收到消息後,須要主動到服務端獲取最新的數據。

命名服務

在zk中,每個數據節點都可以維護一份子節點的順序順列,當客戶端對其建立一個順序子節點的時候zk會自動之後綴的形式在其子節點上添加一個序號,命名服務即便利用zk的這種特性。

動態DNS服務

分佈式隊列/屏障

相關文章
相關標籤/搜索