Dubbo+Zookeeper叢集案例

Izumi發表於2020-06-09

一.開源分散式服務框架

1.Dubbo是阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以Spring框架無縫整合。
   Dubbo是一款高效能、輕量級的開源Java RPC框架,它提供了三大核心能力:①面向介面的遠端方法呼叫;②智慧容錯和負載均衡;③服務自動註冊和發現

2.結構圖

節點角色說明:

Provider: 暴露服務的服務提供方。
Consumer: 呼叫遠端服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的呼叫次數和呼叫時間的監控中心。
Container: 服務執行容器。
 

呼叫關係說明

0服務容器負責啟動,載入,執行服務提供者provider。
1服務提供者provider在啟動時,(通過連線伺服器的client)向註冊中心註冊自己可以提供的服務。(其實就是註冊一些provider自己的ip:port以及對自己提供的服務的描述,比如能幹什麼!)
2服務消費者consumer在啟動時,向註冊中心訂閱自己所需的服務。並註冊自己的ip:port等資訊。
3註冊中心返回服務提供者provider地址列表給消費者consumer,如果有變更,註冊中心將基於長連線推送變更資料給消費者consumer。
4服務消費者consumer,從註冊中心返回的提供者provider地址列表中,基於軟負載均衡演算法,選一臺提供者provider進行呼叫,如果呼叫失敗,再選另一臺呼叫。
5服務消費者consumer和提供者provider,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心monitor。
Dubbo 架構具有以下幾個特點,分別是連通性、健壯性、伸縮性、以及向未來架構的升級性。

二.Dubbo作用

  dubbo其實就是一箇中間層管理工具,他是一個框架,裡面可以裝你想裝的服務,一般註冊中心大多用zookeeper,當然除了zookeeper,還要Redis等也可以做註冊中心。
 
 

三.Dubbo+Zookeeper(註冊中心使用Zookeeper),Zookeeper其實是樹狀結構。

1.可以把register理解成房產中介,provider是賣房的人,張三想賣掉自己在秦淮區的學區房,李四想賣掉自己在棲霞區的學區房,consumer王五是想在棲霞區買學區房給自己孩子上學,王五去中介諮詢後,中介返回給王五的需求 滿足者是李四,王五從中介那得到李四的電話,自己打電話找李四買房。

比如Provider註冊的是  192.168.1.(描述121是吃飯,122睡覺,123打遊戲,124健身四種不同的服務)
2-0、 、dubbo--這是dubbo在ZooKeeper上建立的根節點  /dubbo
2-1 、 Dubbo在Zookeeper上註冊的節點目錄:假設介面名稱是:com.bob.dubbo.service.CityDubboService。
這是服務節點,代表了Dubbo的一個服務  /dubbo/com.bob.dubbo.service.CityDubboService
2-2 、 Dubbo啟動時,Consumer和Provider都會把自身的URL格式化為字串,然後註冊到zookeeper相應節點下,作為一個臨時節點,當連斷開時,節點被刪除。
這是服務提供者的根節點,其子節點代表了每一個服務真正的提供者/dubbo/com.bob.dubbo.service.CityDubboService/providers
這是服務消費者的根節點,其子節點代表每一個服務真正的消費者;/dubbo/com.bob.dubbo.service.CityDubboService/consumers
2-3、 Consumer在啟動時,不僅僅會註冊自身到 …/consumers/目錄下,同時還會訂閱…/providers目錄下所有子節點,具體的看你訂閱具體是哪一個節點(比如訂閱健身這些服務),實時獲取其上Provider的URL字串資訊。register返回給Consumer這個ip--192.168.1.124,Consumer拿著這個iP直接去找Provider呼叫這項服務--健身。
2-4 、監控中心啟動時訂閱com.bob.dubbo.service.CityDubboService目錄下的所有提供者和消費者URL。

 

四.Dubbo——Zookeeper補充:

支援以下功能:

 當提供者出現斷電等異常停機時,註冊中心能自動刪除提供者資訊
當註冊中心重啟時,能自動恢復註冊資料,以及訂閱請求
當會話過期時,能自動恢復註冊資料,以及訂閱請求
當設定<dubbo:registry check="false" />時,記錄失敗註冊和訂閱請求,後臺定時重試
可通過設定<dubbo:registry username="admin" password="124" />設定zookeeper 登入資訊
可通過<dubbo:registry group="dubbo" />設定 zookeeper 的根節點,不設定將使用無 根樹
支援 * 號萬用字元 <dubbo:redistry group="*" version="*" />,可訂閱服務的所有分組 和所有版本的提供者
 
補充:
  消費者從ZK獲取provider地址列表後,會在本地快取一份。當ZK註冊中心所有節點全部宕掉之後,消費者可以使用本地快取的服務列表和provider進行通訊。
ZK的意義在於為consumer和provider提供服務地址的釋出/訂閱服務,讓消費者及時感知最新的服務列表,consumer真正呼叫provider是通過某種通訊協議直接呼叫,並不依賴ZK。
 
所以當zookeeper當機之後,不會影響消費者呼叫服務提供者,影響的是zookeeper當機之後如果提供者有變動,增加或者減少,zk無法把變更通知推送給consumer,consumer會因為感知不到變更時間,不去拉取最新的服務列表,導致本地快取的服務列表有可能過時的。

完結,個人理解,如有偏差,請大家指正,謝謝!

2020-06-09 10:58:28

 

相關文章