zookeeper學習(一)_簡介

  • 2019 年 10 月 3 日
  • 筆記

上篇文章 我們已經安裝上了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。