標籤:

zookeeper在dubbo起了什麼作用

zookeeper實現的是資源的訂閱發布基本原理就是,分散式的環境下服務方實際上是資源,每個服務方把自己的服務的節點信息,註冊在zk上,消費者通過zk獲取到所需要的服務的相關信息,比如url之類。

我們都知道zk有個很重要的功能,會主動通知消費者所訂閱資源的變化信息,比如,同一個服務 某台機器相關進程關閉後,zk會通知消費者,資源的變化情況,這樣,就實現了服務的動態添加減少。

這一點在分散式環境下非常重要,設想如下場景:

某網站在做搶購活動,突然發現,後台某個服務資源吃緊,需要增加伺服器,而又不能影響當前業務,簡單來說他的功能類似於註冊中心。

dubbo的服務提供者會在zookeeper上面創建一個臨時節點,表明自己的IP和埠,當消費者需要使用服務時,會先在zookeeper上面查詢,找到服務提供者,做一些負載的選擇(比如隨機、輪流),然後按照這些信息,訪問服務提供者。

zookeeper負責保存了服務提供方和服務消費方的的URI(dubbo自定義的一種URI),服務消費方找到zookeeper,向zookeeper要到服務提供方的URI,然後就找到提供方,並調用提供方的服務。解耦,分散式,failover。

dubbo是管理中間層的工具,在業務層到數據倉庫間有非常多服務的接入和服務提供者需要調度,dubbo提供一個框架解決這個問題。

注意這裡的dubbo只是一個框架,至於你架子上放什麼是完全取決於你的,就像一個汽車骨架,你需要配你的輪子引擎。這個框架中要完成調度必須要有一個分散式的註冊中心,儲存所有服務的元數據,你可以用zk,也可以用別的,只是大家都用zk。

zookeeper用來註冊服務和進行負載均衡,哪一個服務由哪一個機器來提供必需讓調用者知道,簡單來說就是IP地址和服務名稱的對應關係。當然也可以通過硬編碼的方式把這種對應關係在調用方業務代碼中實現,但是如果提供服務的機器掛掉調用者無法知曉,如果不更改代碼會繼續請求掛掉的機器提供服務。zookeeper通過心跳機制可以檢測掛掉的機器並將掛掉機器的IP和服務對應關係從列表中刪除。至於支持高並發,簡單來說就是橫向擴展,在不更改代碼的情況通過添加機器來提高運算能力。通過添加新的機器向zookeeper註冊服務,服務的提供者多了能服務的客戶就多了。


推薦閱讀:

Zab,Raft,Viewstamp的區別(1)選舉;
豌豆實驗室的Codis(分散式Redis)與自己用Zookeeper+Redis組網,有什麼區別?
Zookeeper vs Chubby
jstorm中用CuratorFramework訪問zookeeper出現的奇怪情況?
ZAB協議選主過程詳解

TAG:ZooKeeper | dubbo |