Dubbo介紹

欢乐豆123發表於2024-11-07

Dubbo介紹

概要

Dubbo是一個高效能的Java RPC框架。它提供了三大核心能力:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現。

簡單來說 Dubbo 是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案

一、面向介面的遠端方法呼叫(RPC)

1. 什麼是RPC?

RPC是遠端過程呼叫(Remote Procedure Call)。 RPC 的主要功能目標是讓構建分散式計算(應用)更容易,在提供強大的遠端呼叫能力時不損失本地呼叫的語義簡潔性。為實現該目標,RPC 框架需提供一種透明呼叫機制,讓使用者不必顯式的區分本地呼叫和遠端呼叫。

2. RPC框架的特點

1) RPC框架一般使用長連結,不必每次通訊都要3次握手,減少網路開銷。

2) RPC框架一般都有註冊中心,有豐富的監控管理。釋出、下線介面、動態擴充套件等,對呼叫方來說是無感知、統一化的操作協議私密,安全性較高

3) RPC 協議更簡單內容更小,效率更高,服務化架構、服務化治理,RPC框架是一個強力的支撐。

3. Dubbo提供的RPC

Dubbo提供高效能的基於代理的遠端呼叫能力,服務以介面為粒度,遮蔽了遠端呼叫底層細節。

在 Dubbo 的服務架構中,服務提供方(Provider)和服務消費方(Consumer)透過介面來約定服務呼叫的邏輯,而不依賴於具體的實現。也就是說,Provider 提供一個介面,Consumer 僅需引用這個介面便可以呼叫遠端服務,而無需瞭解具體的實現類。這種方式帶來了兩個好處:

1)解耦性

Provider 和 Consumer 透過介面進行呼叫,不直接耦合在一起,即使服務實現發生改變,Consumer 端也無需做任何修改。

2)易於擴充套件

服務提供方可以靈活地擴充套件或更換服務實現,只需確保介面不變,服務呼叫就不會受到影響。

4. Dubbo預設使用什麼協議

Dubbo預設協議是dubbo協議,採用的是單一長連線和NIO非同步通訊的方式,適用於小資料量以及大併發的服務呼叫,消費者遠大於提供者,Dubbo的傳輸層協議TCP,非同步的,使用Hessian序列化

二、服務註冊和發現
註冊中心
Dubbo 自身並沒有實現獨立的註冊中心,但它支援多種主流的註冊中心(如 Zookeeper、Nacos、Redis 等),從而使服務治理更靈活和適應不同的分散式環境。其中Zookeeper是Dubbo預設的註冊中心。

服務提供者向 Zookeeper 註冊服務,服務消費者向 Zookeeper 訂閱服務;
服務消費者透過 Zookeeper 獲取服務提供者的地址資訊,然後呼叫服務提供者的服務


三、Dubbo的負載均衡策略

Dubbo內建多種負載均衡策略:

1. 輪詢

2. 隨機

3. 最小活躍呼叫

4. 一致性雜湊

但是,這些負載均衡策略並不一定適用於所有的場景,因此Dubbo也允許我們自定義負載均衡策略。

自定義負載均衡策略需要實現LoadBalance介面,然後透過SPI機制進行擴充套件。自定義負載均衡策略可以根據不同場景的需求,實現不同的演算法和邏輯,從而更好地滿足業務需求。

四、Dubbo架構

1. 十層架構

Dubbo 的十層架構是對整個框架的詳細分層,將 Dubbo 的各個模組和功能進行清晰的職責劃分。每一層都獨立運作,相互協作,主要用於詳細描述 Dubbo 框架內部的技術實現。具體的十層包括:

1)服務介面層(Service):定義服務介面,供 Consumer 和 Provider 雙方使用。

2)配置層(Config):負責配置解析,將服務、註冊中心、協議、介面等進行配置。

3)服務代理層(Proxy):對服務介面生成代理類,使得服務消費端可以透明呼叫。

4)服務註冊層(Registry):負責服務的註冊與發現,Consumer 從註冊中心獲取 Provider 的地址。

5)叢集層(Cluster):提供負載均衡、容錯、路由等功能,實現叢集呼叫的高可用性。

6)監控層(Monitor):記錄服務呼叫次數和呼叫時間等資料,用於監控服務效能和健康狀況。

7)遠端呼叫層(Protocol):定義呼叫協議(如 Dubbo、HTTP、REST),負責序列化、反序列化和資料傳輸。

8)資訊交換層(Exchange):負責資訊的請求和響應,包括非同步呼叫和事件通知機制。

9)網路傳輸層(Transport):底層的網路通訊支援,負責基於 TCP 或其他協議的網路傳輸。

10)資料序列化層(Serialize):將資料序列化成位元組流,以便透過網路傳輸。

2. 三層架構

從Dubbo 在服務治理和配置方面的模組劃分,可以分為三層架構。如下圖:

Dubbo的三層架構包括:

1)介面層

介面層是Dubbo的核心,它定義了服務提供者和服務消費者之間的通訊介面。在Dubbo中,介面預設使用Java介面實現,具有很強的可擴充套件性。

2)配置層

配置層的作用是透過配置檔案或程式碼來配置Dubbo的各種引數,包括連線引數、超時時間、重試次數等等。Dubbo支援多種配置方式,包括XML配置、註解配置和屬性配置。

3)基礎設施層

基礎設施層是Dubbo的底層架構,包括了Dubbo的RPC框架、網路通訊、序列化和反序列化等實現細節。Dubbo的基礎設施層具有較高的效能和可定製性。


參考連結:

https://juejin.cn/post/7264829808008511499

https://juejin.cn/post/7298682235975548968