Dubbo原理和機制詳解(非常全面)

mikechen的網際網路架構發表於2022-10-24

Dubbo原理和機制詳解(非常全面)-mikechen的網際網路架構

Dubbo是一款Java RPC框架,致力於提供高效能的RPC遠端服務呼叫方案。

大家好,我是  mikechen ,專注分享網際網路 大廠架構技術」~

本文,我重點詳解 Dubbo 的原理機制。

目錄

  • Dubbo核心功能
  • Dubbo核心元件
  • Dubbo的架構設計
  • Dubbo呼叫流程


Dubbo核心功能

Dubbo主要提供了3大核心功能:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現。

 1)遠端方法呼叫

網路通訊框架,提供對多種NIO框架抽象封裝,包括“同步轉非同步”和“請求-響應”模式的資訊交換方式。

 2)智慧容錯和負載均衡

提供基於介面方法的透明遠端過程呼叫,包括多協議支援,以及軟負載均衡,失敗容錯,地址路由,動態配置等叢集支援。

3) 服務註冊和發現

服務註冊,基於註冊中心目錄服務,使服務消費方能動態的查詢f服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。


Dubbo核心元件

Dubbo角色,主要包含如下幾個核心元件:

Dubbo原理和機制詳解(非常全面)-mikechen的網際網路架構

1)註冊中心(registry)

生產者在此註冊併發布內容,消費者在此訂閱並接收發布的內容。

2)消費者(consumer)

客戶端,從註冊中心獲取到方法,可以呼叫生產者中的方法。

3)生產者(provider)

服務端,生產內容,生產前需要依賴容器(先啟動容器)。

4)容器(container)

生產者在啟動執行的時候,必須依賴容器才能正常啟動(預設依賴的是spring容器),

5)監控(Monitor)

統計服務的呼叫次數與時間等。


Dubbo的架構設計

Dubbo整體架構如下圖所示:

Dubbo原理和機制詳解(非常全面)-mikechen的網際網路架構

圖中左邊淡藍背景的為服務消費方使用的介面,右邊淡綠色背景的為服務提供方使用的介面, 位於中軸線上的為雙方都用到的介面。


Dubbo框架設計一共劃分了10個層:

1. 服務介面層(Service)

該層是與實際業務邏輯相關的,根據服務提供方和服務消費方的業務設計對應的介面和實現。

2. 配置層(Config)

對外配置介面,以ServiceConfig和ReferenceConfig為中心,可以直接new配置類,也可以透過spring解析配置生成配置類。

 3.服務代理層(Proxy)

服務介面透明代理,生成服務的客戶端Stub和伺服器端Skeleton,以ServiceProxy為中心,擴充套件介面為ProxyFactory。

 4.服務註冊層(Registry)

封裝服務地址的註冊與發現,以服務URL為中心,擴充套件介面為RegistryFactory、Registry和RegistryService。可能沒有服務註冊中心,此時服務提供方直接暴露服務。

 5.叢集層(Cluster)

封裝多個提供者的路由及負載均衡,並橋接註冊中心,以Invoker為中心,擴充套件介面為Cluster、Directory、Router和LoadBalance。將多個服務提供方組合為一個服務提供方,實現對服務消費方來透明,只需要與一個服務提供方進行互動。

 6.監控層(Monitor)

RPC呼叫次數和呼叫時間監控,以Statistics為中心,擴充套件介面為MonitorFactory、Monitor和MonitorService。

 7.遠端呼叫層(Protocol)

封將RPC呼叫,以Invocation和Result為中心,擴充套件介面為Protocol、Invoker和Exporter。Protocol是服務域,它是Invoker暴露和引用的主功能入口,它負責Invoker的生命週期管理。Invoker是實體域,它是Dubbo的核心模型,其它模型都向它靠擾,或轉換成它,它代表一個可執行體,可向它發起invoke呼叫,它有可能是一個本地的實現,也可能是一個遠端的實現,也可能一個叢集實現。

8. 資訊交換層(Exchange)

封裝請求響應模式,同步轉非同步,以Request和Response為中心,擴充套件介面為Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。

 9.網路傳輸層(Transport)

抽象mina和netty為統一介面,以Message為中心,擴充套件介面為Channel、Transporter、Client、Server和Codec。

10.資料序列化層(Serialize)

可複用的一些工具,擴充套件介面為Serialization、 ObjectInput、ObjectOutput和ThreadPool。


Dubbo呼叫流程

Dubbo原理和機制詳解(非常全面)-mikechen的網際網路架構

對照上面的整體架構圖,大致分為以下8大步驟:

1、服務提供者啟動,開啟Netty服務,建立Zookeeper客戶端,向註冊中心註冊服務;

2、服務消費者啟動,透過Zookeeper向註冊中心獲取服務提供者列表,與服務提供者透過Netty建立長連線;

3、服務消費者透過介面開始遠端呼叫服務,ProxyFactory透過初始化Proxy物件,Proxy透過建立動態代理物件;

4、動態代理物件透過invoke方法,層層包裝生成一個Invoker物件,該物件包含了代理物件;

5、Invoker透過路由,負載均衡選擇了一個最合適的服務提供者,在透過加入各種過濾器,協議層包裝生成一個新的DubboInvoker物件;

6、再透過交換成將DubboInvoker物件包裝成一個Reuqest物件,該物件透過序列化透過NettyClient傳輸到服務提供者的NettyServer端;

7、到了服務提供者這邊,再透過反序列化、協議解密等操作生成一個DubboExporter物件,再層層傳遞處理,會生成一個服務提供端的Invoker物件;

8、這個Invoker物件會呼叫本地服務,獲得結果再透過層層回撥返回到服務消費者,服務消費者拿到結果後,再解析獲得最終結果。


作者簡介

陳睿 |  mikechen  ,10年+大廠架構經驗,《mikechen的網際網路架構》系列文章作者,專注於網際網路架構技術。

閱讀「mikechen 的網際網路架構」40W 字 技術文章合集

關注「mikechen 的網際網路架構」公眾號,回覆【 架構】即可領取

Dubbo原理和機制詳解(非常全面)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011997/viewspace-2919796/,如需轉載,請註明出處,否則將追究法律責任。

相關文章