Dubbo的原理解析

2021-08-18 13:54:41 字數 2131 閱讀 9342

dubbo是什麼?

dubbo是alibaba開源的分布式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地鬆耦合)。從服務模型的角度來看,dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,所以基於這一點可以抽象出服務提供方(provider)和服務消費方(consumer)兩個角色。關於註冊中心、協議支援、服務監控等內容,詳見後面描述。

框架圖如下:

節點角色說明: 

provider: 暴露服務的服務提供方。 

consumer: 呼叫遠端服務的服務消費方。 

registry: 服務註冊與發現的註冊中心。 

monitor: 統計服務的呼叫次調和呼叫時間的監控中心。 

container: 服務執行容器。 

呼叫關係說明:

0. 服務容器負責啟動,載入,執行服務提供者。

1. 服務提供者在啟動時,向註冊中心註冊自己提供的服務。

2. 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。

3. 註冊中心返回服務提供者位址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。

4. 服務消費者,從提供者位址列表中,基於軟負載均衡演算法,選一台提供者進行呼叫,如果呼叫失敗,再選另一台呼叫。

5. 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。

dubbo的優點又在**呢?

(1) 連通性: 

註冊中心負責服務位址的註冊與查詢,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心互動,註冊中心不**請求,壓力較小 

監控中心負責統計各服務呼叫次數,呼叫時間等,統計先在記憶體彙總後每分鐘一次傳送到監控中心伺服器,並以報表展示 

服務提供者向註冊中心註冊其提供的服務,並匯報呼叫時間到監控中心,此時間不包含網路開銷 

服務消費者向註冊中心獲取服務提供者位址列表,並根據負載演算法直接呼叫提供者,同時匯報呼叫時間到監控中心,此時間包含網路開銷 

註冊中心,服務提供者,服務消費者三者之間均為長連線,監控中心除外 

註冊中心通過長連線感知服務提供者的存在,服務提供者宕機,註冊中心將立即推送事件通知消費者 

註冊中心和監控中心全部宕機,不影響已執行的提供者和消費者,消費者在本地快取了提供者列表 

註冊中心和監控中心都是可選的,服務消費者可以直連服務提供者

(2) 健狀性: 

監控中心宕掉不影響使用,只是丟失部分取樣資料 

資料庫宕掉後,註冊中心仍能通過快取提供服務列表查詢,但不能註冊新服務 

註冊中心對等集群,任意一台宕掉後,將自動切換到另一台 

註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地快取通訊 

服務提供者無狀態,任意一台宕掉後,不影響使用 

服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復 

(3) 伸縮性: 

註冊中心為對等集群,可動態增加機器部署例項,所有客戶端將自動發現新的註冊中心 

服務提供者無狀態,可動態增加機器部署例項,註冊中心將推送新的服務提供者資訊給消費者

(4) 公升級性: 

當服務集群規模進一步擴大,帶動it治理結構進一步公升級,需要實現動態部署,進行流動計算,現有分布式服務架構不會帶來阻力: 

deployer: 自動部署服務的本地**。 

repository: 倉庫用於儲存服務應用發布包。 

scheduler: 排程中心基於訪問壓力自動增減服務提供者。 

admin: 統一管理控制台

協議支援

dubbo支援多種協議,如下所示:

在通訊過程中,不同的服務等級一般對應著不同的服務質量,那麼選擇合適的協議便是一件非常重要的事情。你可以根據你應用的建立來選擇。例如,使用rmi協議,一般會受到防火牆的限制,所以對於外部與內部進行通訊的場景,就不要使用rmi協議,而是基於http協議或者hessian協議。

最後,至於呼叫和使用,一般每個公司都有相關的標準,我就不再這裡說明了。雖然dubbo已經停止更新了,仍有不少公司在用,也可以學習一下。

Dubbo 服務發布 原理解析

暴露本地服務和暴露遠端服務的區別是什麼?1.暴露本地服務 指暴露在用乙個jvm裡面,不用通過呼叫zk來進行遠端通訊。例如 在同乙個服務,自己呼叫自己的介面,就沒必要進行網路ip連線來通訊。2.暴露遠端服務 指暴露給遠端客戶端的ip和埠號,通過網路來實現通訊。zk持久化節點 和臨時節點有什麼區別?持久...

分布式服務框架dubbo原理解析

alibaba有好幾個分布式框架,主要有 進行遠端呼叫 類似於rmi的這種遠端呼叫 的 dubbo hsf jms訊息服務 napoli notify kv資料庫 tair 等。這個框架 工具 產品在實現的時候,都考慮到了容災,擴充套件,負載均衡,於是出現乙個配置中心 configserver 的東...

dubbo原理之標籤解析

前言 dubbo的標籤解析作為dubbo的入口,結合spring容器的一小小部分的流程,讓大家了解以下dubbo的服務提供者在將服務暴露之前,經歷了哪些過程。標籤解析主要是spring的原始碼部分,spring原始碼加註解部分我也上傳github了 5.0.x分支。下邊是偽 想除錯的也可以按照下面的...