日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ZooKeeper 基本概念:特点、数据模型、节点特性、Watcher、ACL

發布時間:2024/4/11 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZooKeeper 基本概念:特点、数据模型、节点特性、Watcher、ACL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 什么是ZooKeeper?
    • 特點
    • 設計目標
    • 應用場景
  • 系統模型
    • 數據模型
    • 節點特性
      • 節點類型
      • 節點狀態
    • 版本
    • Watcher
    • ACL
      • 權限模式:Scheme
      • 權限對象:ID
      • 權限:Permission
    • Session


什么是ZooKeeper?

ZooKeeper是一個開源的分布式協調服務,由知名互聯網公司雅虎創建,是Google Chubby的開源實現。它的設計目標是將那些復雜且容易出錯的分布式一致性服務封裝起來,構成一個高效可靠的原語集,并以一系列簡單易用的接口提供給用戶使用。

原語: 操作系統或計算機網絡用語范疇。是由若干條指令組成的,用于完成一定功能的一個過程。具有不可分割性·即原語的執行必須是連續的,在執行過程中不允許被中斷。


特點

ZooKeeper可以保證如下分布式一致性特性:

  • 順序一致性:從同一客戶端發起的事務請求,最終將會嚴格地按照順序被應用到 ZooKeeper 中去。
  • 原子性:所有事務請求的處理結果在整個集群中所有機器上的應用情況是一致的,也就是說,要么整個集群中所有的機器都成功應用了某一個事務,要么都沒有應用。
  • 單一視圖:無論客戶端連到哪一個 ZooKeeper 服務器上,其看到的服務端數據模型都是一致的。
  • 可靠性:一旦一次更改請求被應用,更改的結果就會被持久化,直到被下一次更改覆蓋。
  • 實時性:ZooKeeper保證在一定時間段內,客戶端最終一定能夠從服務端上讀取到最新的數據狀態。

設計目標

ZooKeeper致力于實現一個高性能、高可用,具有嚴格順序訪問控制能力(主要是寫操作的嚴格順序性)的分布式協調服務。高性能使得ZooKeeper能夠應用于那些對系統吞吐有明確要求的大型分布式系統,高可用使得分布式的單點問題得到了很好的解決,而嚴格的順序訪問控制使得客戶端能夠基于ZooKeeper實現一些復雜的同步原語。

針對以上需求,ZooKeeper的四個設計目標如下:

  • 簡單的數據模型:ZooKeeper使用一個共享的、樹形結構的命名空間來協調分布式程序。其數據模型類似一個文件系統,不過與傳統的文件系統不同,ZooKeeper將全量數據存儲在內存中,以此來實現提高服務器吞吐、減少延遲的目的。
  • 可以構建集群:一個ZooKeeper集群通常由一組機器組成,組成ZooKeeper集群的每臺機器都會在內存中維護當前服務器狀態,并且每臺機器之間都互相保持通信。只要集群中存在半數以上的機器能夠正常工作,整個集群就可以正常對外提供服務。
  • 順序訪問:對于來自客戶端的每個更新請求,ZooKeeper都會分配一個全局唯一的遞增編號,這個編號反映了所有事務操作的先后順序,可以根據這個特性來實現更高層次的同步原語。
  • 高性能:由于ZooKeeper將全量數據存儲在內存中,并直接服務于客戶端的所有非事務請求,因此它尤其適用于以讀操作為主的應用場景。
  • 應用場景

    ZooKeeper是一個典型的分布式數據一致性的解決方案,通常用于以下這些場景:

    • 數據發布/訂閱
    • 負載均衡
    • 命名服務
    • 分布式協調/通知
    • 集群管理
    • Master選舉
    • 分布式鎖
    • 分布式隊列


    系統模型

    數據模型

    ZooKeeper數據存儲的結構與標準的Unix文件系統非常類似,但是并沒有引入傳統文件系統中目錄和文件等概念,而是使用了其特有的數據節點的概念,我們稱之為ZNode。Znode是zookeeper中的最小數據單元,每個Znode上都可以保存數據,同時還可以掛載子節點,形成一個樹形化命名空間。

    如上下圖,Znode的節點路徑標識方式和Unix文件系統路徑非常相似,都是由一系列使用斜杠(/)進行分割的路徑表示,最上層的根結點以/代表,并且每個Znode都有一個唯一的路徑標識。

    ZooKeeper數據模型

    ??注意:ZooKeeper 主要是用來協調服務的,而不是用來存儲業務數據的,所以不要放比較大的數據在 znode 上,ZooKeeper 給出的上限是每個結點的數據大小最大是 1M。


    節點特性

    節點類型

    在ZooKeeper中,Znode節點類型分為持久節點(PERSISTENT)臨時節點(EPHEMERAL)、**順序節點(SEQUENTIAL)**三大類,通過組合使用,可以生成以下四種組合型節點類型:

    • 持久節點:該數據節點被創建后,就會一直存在于ZooKeeper的服務器上,直到有刪除操作來主動清除這個節點。
    • 持久順序節點:基本特性與持久節點一致,額外的特性是順序性,即一個父節點可以為其子節點維護一個創建的先后順序 ,這個順序體現在節點名稱上,是節點名稱后自動添加一個由 10 位數字組成的數字串,從 0 開始計數,上限是整型最大值。
    • 臨時節點:臨時節點的生命周期與客戶端的會話綁定在一起,如果客戶端會話失效,則這個節點就會自動被清理掉。同時,臨時節點不能創建子節點,它只能作為葉子節點使用。
    • 臨時順序節點:基本特性與臨時節點一致,額外的特性是順序性。

    節點狀態

    每個數據節點除了存儲數據內容之外,還存儲了數據節點本身的一些狀態信息(如子節點數量、事務id、版本信息等),這些狀態信息由Stat這個類來維護。

    • czxid:Created ZXID,該數據節點被創建時的事務ID。
    • mzxid:Modified ZXID,節點最后一次被更新時的事務ID。
    • ctime:Created Time,該節點被創建的時間。
    • mtime: Modified Time,該節點最后一次被修改的時間。
    • version:節點的版本號。
    • cversion:子節點的版本號。
    • aversion:節點的 ACL 版本號。
    • ephemeralOwner:創建該節點的會話的sessionID ,如果該節點為持久節點,該值為0。
    • dataLength:節點數據內容的長度。
    • numChildre:該節點的子節點個數,如果為臨時節點為0。
    • pzxid:該節點子節點列表最后一次被修改時的事務ID,注意是子節點的列表 ,不是內容。


    版本

    ZooKeeper中為節點引入了版本的概念,每個數據節點都具有三種類型的版本信息,對數據節點的任何更新操作都會引起版本號的變化。

    • dataVersion:當前Znode節點數據內容版本號
    • cversion:當前Znode節點的子節點版本號。
    • aclVersion:當前Znode的ACL變更版本號。

    為了解決那些數據更新競爭激烈的場景,ZooKeeper借助版本號機制來實現樂觀并發控制。


    Watcher

    Watcher(事件監聽器),是ZooKeeper中的一個很重要的特性。ZooKeeper允許客戶端在指定節點上注冊一些 Watcher,并且在一些特定事件觸發的時候,ZooKeeper服務端會將事件通知到感興趣的客戶端上去,該機制是 ZooKeeper 實現分布式協調服務的重要特性。

    Watcher從注冊到通知全流程

    從上圖中我們可以看到,ZooKeeper的Watcher機制主要包括客戶端線程、客戶端WatchManager、ZooKeeper服務器三個部分。工作流程如下:

  • 客戶端向ZooKeeper服務器注冊Watcher對象
  • 客戶端將Watcher對象存儲在客戶端的WatchManager中。
  • 當ZooKeeper服務器觸發Watcher事件后,會向客戶端發送通知。
  • 客戶端從WatchManager中取出對應的Watcher對象來執行回調邏輯。

  • ACL

    ZooKeeper提供了一套完善的ACL(Access Control Lists)權限控制機制來保障數據的安全,類似于Unix/Linux中的UGO權限控制機制。

    ACL機制由以下三部分組成,我們通常使用scheme:id:permission來標識一個有效的ACL信息。

    • 權限模式(Scheme)
    • 授權對象(ID)
    • 權限(Permission)


    權限模式:Scheme

    權限模式是用來確定權限驗證過程中使用的校驗策略。在ZooKeeper中最常用的就是以下四種權限模式

    • IP:IP模式通過IP地址粒度來進行權限控制。
    • Digest:Digest是最常用的權限控制模式,其以類似于username:password形式的權限標識來進行權限配置,便于區分不同應用來進行權限控制。當我們配置了權限標識后,為了保證安全,ZooKeeper會分別使用SHA-1算法和BASE64編碼進行處理,將其混淆為無法辨識的字符串。
    • World:World是最開放的權限控制模式,是一種特殊的Digest模式。在該模式下數據節點的訪問權限對所有用戶開放,即所有用戶都可以在不進行任何數據校驗的情況下操作ZooKeeper上的數據。權限標識為world:anyone
    • Super:Super模式即超級用戶模式,是一種特殊的Digest模式。在該模式下超級用戶可以對任意ZooKeeper上的數據節點進行任何操作。

    權限對象:ID

    授權對象指的是權限賦予的用戶或一個指定實體,例如IP地址或是機器等。在不同的權限關系下,授權對象是不同的,對應關系如下圖:

    • IP:通常是一個IP地址或者一個IP網段,如192.168.0.110或192.168.0.1/24
    • Digest:Digest是最常用的權限控制模式,其以類似于username:password形式的權限標識來進行權限配置,便于區分不同應用來進行權限控制。當我們配置了權限標識后,為了保證安全,ZooKeeper會分別使用SHA-1算法和BASE64編碼進行處理,將其混淆為無法辨識的字符串。
    • World:只有一個ID:anyone
    • Super:與Digest模式一致。

    權限:Permission

    權限就是指那些通過權限檢查后可以被允許執行的操作。在ZooKeeper中,所有對數據的操作權限分為以下五大類:

    • CREATE:數據節點的創建權限,允許授權對象在該數據節點下創建子節點。
    • DELETE:數據節點的刪除權限,允許授權對象刪除該數據節點的子節點。
    • READ:數據節點的讀取權限,允許授權對象訪問該數據節點并讀取其數據內容或子節點列表等。
    • WRITE:數據節點的更新權限,允許授權對象對該數據節點進行更新操作。
    • ADMIN:數據節點的管理權限,允許授權對象在該數據節點進行ACL相關的設置操作。


    Session

    Session(會話) 可以看作是ZooKeeper服務器與客戶端的之間的一個TCP長連接,通過這個連接,客戶端能夠通過心跳檢測與服務器保持有效的會話,也能夠向ZooKeeper服務器發送請求并接受響應,同時還能夠通過該連接接收來自服務器的Watcher事件通知。

    Session有一個屬性叫做:sessionTimeout ,sessionTimeout 代表會話的超時時間。當由于服務器壓力太大、網絡故障或是客戶端主動斷開連接等各種原因導致客戶端連接斷開時,只要在sessionTimeout規定的時間內能夠重新連接上集群中任意一臺服務器,那么之前創建的會話仍然有效。

    另外在每次客戶端向服務端發起會話創建請求時,服務端都會為其分配一個SessionID,SessionID用來唯一標識一個會話,因此ZooKeeper必須保證SessionID的全局唯一性

    總結

    以上是生活随笔為你收集整理的ZooKeeper 基本概念:特点、数据模型、节点特性、Watcher、ACL的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。