Dubbo和Zookerper的關係
- 2019 年 10 月 15 日
- 筆記
1.Dubbo的作用
Dubbo是管理中間層的工具,在業務層到數據倉庫間有非常多服務的接入和服務提供者需要調度,dubbo提供一個框架解決這個問題。Dubbo基於RPC(Remote Procedure Call 遠程過程調用)協議,服務提供方和服務消費方之間的調用關係:
節點角色說明
Provider: 暴露服務的服務提供方。
Consumer: 調用遠程服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的調用次調和調用時間的監控中心。
Container: 服務運行容器。
調用關係說明
0.服務容器負責啟動,載入,運行服務提供者。
1.服務提供者在啟動時,向註冊中心註冊自己提供的服務。
2.服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
3.註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
4.服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。
5.服務消費者和提供者,在記憶體中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
這個框架要完成調度必須要有一個分散式的註冊中心,存儲所有服務的元數據,用到zookeeper。
2.Zookeeper的作用
zookeeper用來註冊服務和負載均衡。
哪一個服務由哪一個機器來提供必須讓調用者知道,簡單來說就是ip地址和伺服器名稱的對應關係。 當然也可以將這種對應關係通過硬編碼在調用方業務程式碼中實現,但是如果提供服務的機器掛掉調用方無法知曉,如果不更改程式碼會繼續請求掛掉的機器提供服務。zookeeper可以通過心跳機制檢測掛掉的伺服器並將掛掉的伺服器的ip和伺服器對應的關係從列表中刪除。
至於支援高並發,就是橫向擴展,在不更改程式碼的情況通過添加機器來提高運算能力。
3.Zookeeper和Dubbo的關係
Dubbo將註冊中心進行抽象,使得它可以外接不同的存儲媒介給註冊中心提供服務。
引入zookeeper作為存儲媒介,也就把zookeeper的特性引了進來。
首先是負載均衡:單註冊中心的承載能力是有限的,在流量達到一定程度的時候需要分流,負載均衡就是為了分流而存在的,一個zookeeper集群配合相應的web應用就很容易達到負載均衡;
資源同步:單單有負載均衡還不夠,節點之間的數據和資源是需要同步,zookeeper集群就天然具備有這樣的功能;
命名服務:將樹狀結構用於維護全局的服務地址列表,服務提供者在啟動的時候,向zookeeper上的指定節點目錄下寫入自己的URL地址,這個操作就完成了服務的發布
Mast:ZooKeeper能會保證客戶端無法創建一個已經存在的ZNode。也就是說,如果同時有多個客戶端請求創建同一個臨時節點,那麼最終一定只有一個客戶端請求能夠創建成功。利用這個特性,就能很容易地在分散式環境中進行Master選舉了。
分散式鎖:分散式鎖是控制分散式系統之間同步訪問共享資源的一種方式。當前獲得鎖的客戶端機器發生宕機或重啟,那麼該臨時節點就會被刪除,釋放鎖。正常執行完業務邏輯後,客戶端就會主動將自己創建的臨時節點刪除,釋放鎖。
4.dubbo的優點 缺點
優點:
透明化的遠程方法調用
像調用本地方法一樣調用遠程方法;只需簡單配置,沒有任何API侵入。
軟負載均衡及容錯機制
可在內網替代nginx lvs等硬體負載均衡器。
服務註冊中心自動註冊 & 配置管理
不需要寫死服務提供者地址,註冊中心基於介面名自動查詢提供者ip。
使用類似zookeeper等分散式協調服務作為服務註冊中心,可以將絕大部分項目配置移入zookeeper集群。
服務介面監控與治理
Dubbo-admin與Dubbo-monitor提供了完善的服務介面管理與監控功能,針對不同應用的不同介面,可以進行 多版本,多協議,多註冊中心管理。
缺點:只支援JAVA語言
5.Dubbo中Zookeeper作為註冊中心,如果zookeeper註冊中心集群都掛掉,服務的發布方和調用方還能通訊嗎?
啟動dubbo時,消費者會從zookeeper中拉去註冊的生產者的地址介面等數據,快取在本地.每次調用時,按照本地存儲的地址進行調用.但是在註冊中心全部掛掉後增加新的提供者,則不能被消費者發現
健壯性:
監控中心宕掉不影響使用,只是丟失部分取樣數據
資料庫宕掉後,註冊中心仍能通過快取提供服務列表查詢,但不能註冊新服務
註冊中心對等集群,任意一台宕掉後,將自動切換到另一台
註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地快取通訊
服務提供者無狀態,任意一台宕掉後,不影響使用
服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復
作者:普度眾生的面癱青年(原文作者)
鏈接:https://www.jianshu.com/p/527e2944034c