Zookeeper服務註冊與發現機制原理

2021-10-07 06:51:22 字數 1061 閱讀 1585

zookeeper解決了分布式鎖的各種機制,通過它,我們可以將重心放在業務邏輯上,而非併發控制上。

zookeeper提供了兩個功能:

分布式鎖;

服務註冊與發現。

zookeeper的資料模型

zookeeper的資料儲存是基於節點的,稱作znode。znode的引用方式非常類似於檔案路徑,例如:當要訪問貓時,需要指定路徑/動物/貓。znode包含四個元素:

acl:訪問許可權,即那些人或者那些ip可以訪問本節點;

stat:元資料,例如事務id、版本號、時間戳、大小等;

child:子節點引用。

每個znode節點最多只能儲存1mb資料。

zookeeper的基本操作

建立節點:create

刪除節點:delete

判斷節點是否存在:exists

獲取乙個節點的資料:getdata

設定乙個節點的資料:setdata

獲取節點下的所有子節點:getchildren

其中,exists、getdata、getchildren屬於讀操作,zookeeper客戶端在請求讀操作的時候,可以選擇是否設定watch。

zookeeper的事件通知機制

可以將watch理解成是註冊在特定znode上的觸發器,當這個znode發生改變時,也就是呼叫了create、delete、setdata等方法時,將會觸發znode上註冊的對應的事件,請求watch的看客戶端會接收到非同步通知。

舉個使用者服務註冊與發現的例子:

當使用者服務1宕機時,使用者服務2將會註冊到api閘道器,繼續提供服務。原理就是:當使用者通過api閘道器訪問使用者服務時,實際上只是拿到了使用者服務的ip位址和埠號。而api閘道器中通過呼叫getdata(/user/reg, watch)方法,監聽服務的狀態。若出現服務宕機,則zookeeper伺服器將會通過非同步通知的方式告知api閘道器,使用者服務1已經宕機,同時提供可供使用的其他使用者服務的ip位址和埠號並記錄下來,以便於下次有使用者請求到來時使用。

服務註冊中心zookeeper

一 背景 場景 1 服務位址如何維護 服務啟動的時候,註冊到乙個服務中 key,服務名 value 若干個http位址 2 如何對目標服務負載均衡 從註冊服務中拿到目標服務位址列表,通過輪詢或者隨機演算法得到乙個位址 3 服務 的動態感知 目標服務可能宕機 心跳機制 註冊中心定期和客戶端心跳,如果沒...

dubbo使用zookeeper註冊服務並負載均衡

dubbo建議使用zookeeper作為服務的註冊中心。1.zookeeper的作用 zookeeper用來註冊服務和進行負載均衡,哪乙個服務由哪乙個機器來提供必需讓呼叫者知道,簡單來說就是ip位址和服務名稱的對應關係。當然也可以通過硬編碼的方式把這種對應關係在呼叫方業務 中實現,但是如果提供服務的...

基於zookeeper的服務註冊中心

基於zookeeper的服務註冊中心 本文介紹基於zookeeper的dubbo服務註冊中心的原理。1.zookeeper中的節點 zookeeper是乙個樹形結構的目錄服務,支援變更推送,因此非常適合作為dubbo服務的註冊中心。注 在zookeeper中,節點分為兩類,第一類是指構成集群的機器,...