zookeeper學習(一)_簡介


上篇文章 我們已經安裝上了zookeeper,也簡單的體驗了一把,但是如果讓你給別人介紹下zookeeper,可能也是說不出來。本篇文章就參考了網上各位優秀博主的文章,整理出自己更能理解的內容

優秀博文

    1. sunddenly的zookeeper系列

http://www.cnblogs.com/sunddenly/category/620563.html

    1. 程序員小灰zookeeper系列

https://mp.weixin.qq.com/s/Gs4rrF8wwRzF6EvyrF_o4A

簡介

Zookeeper是一種分布式協調服務

之前的工作都是單機部署應用,並沒有接觸過zookeeper,現在 的新公司動不動就集群,什么主從,分布式,渣渣的我聽得一臉蒙蔽,項目中也使用zookeeper進行應用配置以及使用了elasticjob。

應用場景

  • 1.分布式鎖(利用Zookeeper的臨時順序節點,可以輕松實現分布式鎖)
  • 2.服務注冊和發現
  • 3.共享配置和狀態信息

數據模型

Zookeeper的數據模型如同文件系統的目錄。

Zookeeper的數據存儲是基於節點,這種節點叫做Znode。

data

Znode存儲的數據信息。

ACL

記錄Znode的訪問權限,即哪些人或哪些IP可以訪問本節點。

stat

包含Znode的各種元數據,比如事務ID、版本號、時間戳、大小等等。

child

當前節點的子節點引用

Zookeeper是為讀多寫少的場景所設計。Znode並不是用來存儲大規模業務數據,而是用於存儲少量的狀態和配置信息,每個節點的數據最大不能超過1MB。

Zookeeper的基本操作和事件通知

Zookeeper包含了哪些基本操作呢?這里列舉出比較常用的API:

  • create 創建節點

  • delete 刪除節點

  • exists 判斷節點是否存在

  • getData 獲得一個節點的數據

  • setData 設置一個節點的數據

  • getChildren 獲取節點下的所有子節點

這其中,exists,getData,getChildren屬於讀操作。Zookeeper客戶端在請求讀操作的時候,可以選擇是否設置Watch。

Watch是什么意思呢?

我們可以理解成是注冊在特定Znode上的觸發器。當這個Znode發生改變,也就是調用了create,delete,setData方法的時候,將會觸發Znode上注冊的對應事件,請求Watch的客戶端會接收到異步通知。

具體交互過程如下:

1.客戶端調用getData方法,watch參數是true。服務端接到請求,返回節點數據,並且在對應的哈希表里插入被Watch的Znode路徑,以及Watcher列表。

2.當被Watch的Znode已刪除,服務端會查找哈希表,找到該Znode對應的所有Watcher,異步通知客戶端,並且刪除哈希表中對應的Key-Value。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM