Alibaba-Dubbo介紹


2020年9月21日10:56:46

一、前言1.什么是Dubbo?

Dubbo是阿里巴巴公司發布的一個高性能優秀的開源分布式服務框架,使得應用可通過高性能的 RPC實現服務的輸出和輸入功能,可以和Spring框架無縫集成。
它提供了三大核心能力:①面向接口的遠程方法調用;②智能容錯和負載均衡;③服務自動注冊和發現。

二、Dubbo介紹

1.Dubbo工作原理圖

1.1 節點角色說明

Provider: 暴露服務的服務提供者。
Consumer: 調用遠程服務的服務消費者。
Registry: 服務者服務注冊與消費者注冊、發現服務的注冊中心。
Monitor: 統計服務的調用次數和調用時間的監控中心。
Container: Dubbo服務運行容器。

1.2 調用關系說明

1.2.1 整個Dubbo服務容器啟動,加載,運行服務提供者provider;
1.2.2 服務提供者provider在啟動時,(通過連接注冊中心服務器的client)向注冊中心注冊自己可以提供的服務。(注冊provider自己的ip、port、以及對自己提供的服務的描述等信息);
1.2.3 服務消費者consumer在啟動時,向注冊中心訂閱自己所需的服務,如果沒有訂閱到自己想獲得的服務,它會不斷的嘗試訂閱。新的服務注冊到注冊中心以后,注冊中心會將這些服務notify(通知)給消費者。同時消費者也會向注冊自己的ip、port等信息;
1.2.4 注冊中心返回服務提供者provider地址列表給消費者consumer,如果有變更,注冊中心將基於長連接推送變更后數據給消費者consumer;
1.2.5 服務消費者consumer,從注冊中心返回的提供者provider地址列表中(多數情況下提供者是集群形式),基於軟負載均衡算法,選一台可用的提供者provider進行RPC調用,如果調用失敗,再選另一台調用;
1.2.6 消費者consumer和提供者provider,在內存中累計調用次數和調用時間,定時每分鍾發送一次統計數據到監控中心monitor。Monitor在整個架構中是可選的,Monitor功能需要單獨配置,不配置或者配置后Monitor掛掉,都不會影響服務的調用。
1.2.7 Dubbo 架構具有以下幾個特點:連通性、健壯性、伸縮性、以及向未來架構的升級性。

2. Dubbo作用

2.1 Dubbo其實就是一個中間層管理工具,它是一個框架,里面可以裝你想裝的任何服務,Dubbo的注冊中心大多用zookeeper,當然除了zookeeper,還有Redis等也可以做為Dubbo的注冊中心。

三、Dubbo+Zookeeper介紹

1.Dubbo注冊中心白話解釋

可以把Dubbo的register注冊中心理解成房產中介鏈家,provider是賣房的人,provider張三想賣掉自己在秦淮區的學區房,provider李四想賣掉自己在棲霞區的學區房,consumer王五是想在棲霞區買學區房給自己孩子上學,王五去鏈家咨詢后,鏈家給王五的需求條件滿足者是李四,王五從鏈家那拿到李四的電話,自己打電話找李四買房。(哈哈哈哈,說的比較白話通俗一點)

2.Zookeeper作為Dubbo的注冊中心圖示


PS:Zookeeper內部是樹形結構。

2.1 圖示說明介紹

2.1.1 這是Dubbo啟動時在注冊中心ZooKeeper上創建的默認根節點 “/dubbo”;
2.1.2 接口在Zookeeper上注冊節點:假設接口名稱是:com.bob.dubbo.service.CityDubboService,代表了Dubbo的一個服務,那么Dubbo會自動在Zookeeper中注冊該結點: “/dubbo/com.bob.dubbo.service.CityDubboService”;
2.1.3 Dubbo啟動時,其中的持久化結點,不管你provider和consumer斷開后,持久化節點都不會消失;
2.1.4 Dubbo啟動時,Consumer和Provider都會把自身的URL、端口等格式化為字符串,然后注冊到zookeeper相應節點下,作為一個臨時節點,當連斷開時,節點被刪除。
eg:
服務提供者的持久化節點“providers”,其子節點代表了每一個服務真正的提供者
服務消費者的持久化節點“consumers”,其子節點代表每一個服務真正的消費者
2.1.5 比如Providers持久化節點下注冊的是:192.168.1.12*(描述121是吃飯,122睡覺,123打游戲,124健身,四種不同的服務),Consumer在啟動時,不僅僅會注冊自身ip、port等信息到 …/consumers/目錄下,同時還會訂閱…/providers目錄下所有子節點,具體的看你訂閱具體是哪一個節點(比如訂閱.124健身服務),實時獲取其在Providers持久化節點下的URL字符串信息。register返回給Consumer這個ip——192.168.1.124,Consumer拿着這個iP直接去找提供者Provider RPC調用這項服務——健身。
2.1.6 監控中心啟動時訂閱com.bob.dubbo.service.CityDubboService目錄下的所有提供者provider和消費者consumer 的URL。

四、Dubbo+Zookeeper補充

1.圖示介紹

1.1 Zookeeper作為Dubbo的注冊中心支持以下功能:

1.1.1 當提供者出現斷電等異常宕機時,注冊中心能自動刪除提供者節點信息;
1.1.2 當注冊中心重啟時,能自動恢復注冊數據,以及訂閱請求;
1.1.3 當會話過期時,注冊中心能自動恢復注冊數據,以及訂閱請求;
1.1.4 當設置 時,記錄提供者provider失敗注冊和消費者consumer失敗訂閱請求,后台可定時重試;
1.1.5 可通過設置 設置zookeeper 登錄信息;
1.1.6 可通過 自定義zookeeper 的根節點,不設置將使用默認的“/dubbo”作為根節點;
1.1.7 支持 * 號通配符 ,消費者可訂閱提供者的所有分組 和所有版本。

1.2 注意點

1.2.1 消費者從ZK獲取provider地址列表后,會在本地緩存一份。當ZK注冊中心所有節點全部宕掉之后,消費者可以使用本地緩存的服務列表和provider進行通信。
ZK的意義在於為provider、consumer提供服務的發布和訂閱,讓消費者及時感知最新的服務列表,consumer真正調用provider是通過某種通信協議直接調用,並不依賴ZK。
所以當zookeeper宕機之后,不會影響消費者調用服務提供者,影響的是zookeeper宕機之后如果提供者provider信息有變動、provider宕機,zk無法把變更最新的provider列表數據通知推送給consumer,consumer會因為感知不到變更時間,不去拉取最新的服務列表,導致本地緩存的服務列表有可能是過時的,或者說consumer基於本地緩存的提供者服務列表,PRC其中一台provider1,但是provider1宕機了或者信息變動了,導致RPC失敗!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM