Zookeeper的數據結構
樹型結構,類似於文件目錄.
Zookeeper的節點類型
臨時節點,臨時帶編號節點,持久節點,持久帶編號節點.
臨時節點下不允許創建子節點.
Zookeeper角色
Leader,Follower.
Zookeeper的工作原理
服務提供者啓動時,會將其服務名稱,ip地址註冊到配置中心。
服務消費者在第一次調用服務時,會通過註冊中心找到相應的服務的IP地址列表,並緩存到本地,以供後續使用。當消費者調用服務時,不會再去請求註冊中心,而是直接通過負載均衡算法從IP列表中取一個服務提供者的服務器調用服務。
當服務提供者的某臺服務器宕機或下線時,相應的ip會從服務提供者IP列表中移除。同時,註冊中心會將新的服務IP地址列表發送給服務消費者機器,緩存在消費者本機。
當某個服務的所有服務器都下線了,那麼這個服務也就下線了。
同樣,當服務提供者的某臺服務器上線時,註冊中心會將新的服務IP地址列表發送給服務消費者機器,緩存在消費者本機。
服務提供方可以根據服務消費者的數量來作爲服務下線的依據.
Zookeeper心跳檢測機制
zookeeper提供了“心跳檢測”功能,它會定時向各個服務提供者發送一個請求(實際上建立的是一個 socket 長連接),如果長期沒有響應,服務中心就認爲該服務提供者已經“掛了”,並將其剔除.
服務消費者會去監聽相應路徑,一旦路徑有變化(增加或減少),zookeeper都會通知服務消費方服務提供者地址列表已經發生改變,從而進行更新
Zookeeper的選舉機制
投票過半數則選舉Leader成功,依據id進行投票,優先投給當前節點中id大的.選舉成功後,後續來的節點,無論多大,都是Follower.
Zookeeper的監聽原理
ZK客戶端,會創建connet網絡通信連接,listener監聽線程.
通過connect連接將註冊的監聽事件發送給Zookeeper服務端.
服務端將監聽事件添加到註冊監聽器列表,開始監聽,監聽到有數據或路徑變化.將消息發送給listener.
listener調用process方法.
Zookeeper的常用命令
create /zk myData
get /zk [watch]
set /zk newDate
delete /zk
ls /zk [watch]
stat /zk [watch]
Zookeeper與分佈式鎖
使用zookeeper創建臨時序列節點來實現分佈式鎖,適用於順序執行的程序,大體思路就是創建臨時序列節點,找出最小的序列節點,獲取分佈式鎖,程序執行完成之後此序列節點消失,通過watch來監控節點的變化,從剩下的節點的找到最小的序列節點,獲取分佈式鎖,執行相應處理,依次類推……