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