zookeeper的實際應用場景案例
1、資料釋出訂閱/配置中心
1、原理:釋出者將資料釋出到zookeeper的節點上,訂閱者獲取節點上的資料,從而實現釋出訂閱的目的。實現配置資訊的集中式管理和資料的動態更新
2、實現配置中心有兩種模式:push (推送:伺服器端推送)、pull(拉取:客戶端主動拉取),客戶端向服務端註冊要關注的節點,一旦節點發生變化,服務端就會給客戶端傳送通知。
3、zookeeper採用的是推拉相結合的方式。 客戶端向伺服器端註冊自己需要關注的節點。一旦節點資料發生變化,那麼伺服器端就會向客戶端傳送watcher事件通知。客戶端收到通知後,主動到伺服器端獲取更新後的資料
4、注意點:
a.資料量比較小
b.資料內容在執行時會發生動態變更
c.叢集中的各個機器共享配置
2、負載均衡
請求/資料分攤多個計算機單元上
實現原理:
在zookeeper的根節點上,每個客戶端都建立一個子節點,當請求過來的時候,通過負載均衡演算法,路由到對應的子節點對應的客戶端,從而實現負載均衡。
3、分散式鎖
1、目的:使用分散式鎖,主要為了解決分散式環境下,多個計算機單元對一個共享資源的競爭的關係。防止一個資源在同一時刻被多個計算機單元進行更改。
2、使用redis實現的原理:
3、使用資料庫實現的原理:
建立一個表,通過索引唯一的方式—新增一個表的時候,將其中一個欄位設定為唯一索引,當訪問統一資源的時候,先insert一條資料,那麼只有第一個插入成功的才認為獲取到了鎖,而其他插入如果出現唯一索引異常的,則等待,當處理完成以後,需要將該資料刪除,以便後來的客戶端能獲取到鎖。
4、使用zookeeper來實現的原理:
排他鎖方式:
做一個節點Locks,在該節點下再建立一個Lock的臨時節點。客戶端在該Locks下中去建立Lock的臨時節點。則同時只能有一個能建立成功。
共享鎖方式:有序節點的順序性
有序的臨時節點,每個客戶端寫了節點後,因為會存在一個最小節點,只有最小節點有優先順序獲取資料。