1. 程式人生 > >zookeeper在Dubbo中起到了什麼作用?

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註冊服務,服務的提供者多了能服務的客戶就多了。