1. 程式人生 > >zookeeper學習整理

zookeeper學習整理

post 對象 實現 學習 版本 分布式鎖 所有 每一個 curator

概述

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

https://www.cnblogs.com/felixzh/p/5869212.html

核心概念

節點

zk的命名空間是由一系列數據節點組成的,節點上可以包含數據。

類型

節點類型分為:持久節點、臨時節點、順序節點。

創建過程中通過組合有以下4種:

  • CreateMode.PERSISTENT :永久性節點

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

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

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

只有葉子節點可以是臨時節點,其他節點必須是永久性節點。

狀態信息

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

版本-保證分布式數據原子性操作

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

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

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

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

Watcher-數據變更的通知

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

ACL--保障數據的安全

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

客戶端

原生

https://www.cnblogs.com/zpb2016/p/5791641.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服務

分布式隊列/屏障

zookeeper學習整理