1. 程式人生 > >官方文件: Dubbo 框架設計、模組說明、依賴關係

官方文件: Dubbo 框架設計、模組說明、依賴關係

 

以下內容全文轉自 apache 官方 dubbo文件:http://dubbo.apache.org/en-us/docs/dev/design.html

 

框架設計

/dev-guide/images/dubbo-framework.jpg

 

圖片描述:

  • 淺藍色背景的左側區域顯示服務使用者介面,淺綠色背景的右側區域顯示服務提供者介面,中心區域顯示兩個側面介面。
  • 影象從底部到頂部分為10層,這些層是單向依賴的。右側的黑色箭頭表示層之間的依賴關係,每層可以從上層剝離以重複使用,Service和Config層是API,其他層是SPI。
  • 綠框是擴充套件介面,藍框是實現類,影象僅顯示關聯層的實現類。
  • 藍色虛線是初始化過程,啟動時為裝配鏈,方法呼叫過程為紅線,執行時呼叫鏈,繼承紫色三角箭頭,可將子類視為父類的同一節點,文字為lines是方法呼叫。

圖層描述

  • config層:外部配置介面,ServiceConfig並且ReferenceConfig是圖層的中心,可以直接初始化配置類,也可以通過spring生成配置類。
  • 代理層:服務介面的透明代理,生成客戶端Stub服務和伺服器Skeletion of service,ServiceProxy是中心,擴充套件介面是ProxyFactory
  • 登錄檔層:服務登錄檔和發現的封裝,服務URL是中心,擴充套件介面是RegistryFactoryRegistryRegistryService
  • 簇層:muliple提供商和負載平衡,和橋接登記中心的簇的封裝,Invoker
    是中心,擴充套件介面是ClusterDirectoryRouterLoadBalance
  • 監控層:的RPC呼叫倍顯示器和呼叫執行時間,Statistics是中心,擴充套件介面是MonitorFactoryMonitorMonitorService
  • 協議層:RPC的封裝,Invocation並且Result是中心,擴充套件介面是ProtocolInvokerExporter
  • 交換層:的請求和響應,同步傳輸非同步封裝,Request並且Response是中心,擴充套件介面是ExchangerExchangeChannelExchangeClientExchangeServer
  • 傳輸層:米娜和網狀的抽象,Message是中心,擴充套件介面是ChannelTransporterClientServerCodec
  • 序列化層:可重複使用的工具,擴充套件介面SerializationObjectInputObjectOutputThreadPool

關係描述

  • 在RPC中,Protocol是核心層,它意味著您可以通過Protocol + Invoker + Exporter完成RPC呼叫,然後在Invoker的主程序中進行過濾。
  • Consumer和Provider是抽象概念,只是希望您能更直觀地瞭解哪些類屬於客戶端和伺服器端,不使用Client和Server的原因是Dubbo使用Provider,Consumer,Registry,Monitor劃分邏輯拓撲節點。場景,保持團結的概念。
  • Cluster是外部概念,Cluster的目的是讓各種Invoker偽裝成一個Invoker,這樣我們只關注Invoker in Protocol層,新增Cluster或刪除Cluster不會影響其他層,因為我們不需要Cluster什麼時候只有一個提供者。
  • Proxy層封裝了所有介面的透明代理,在Invoker作為中心的其他層中,將Invoker轉換為介面,或者僅在暴露給使用者時將介面實現轉換為Invoker by Proxy。RPC仍然可以工作,甚至刪除代理層,但不是那麼透明,使得遠端服務呼叫看起來不像本地服務呼叫。
  • 遠端處理是Dubbo協議的實現,如果選擇RMI,您可以刪除遠端處理。Remoting分為Transport層和Exchange層,Transport層負責單向訊息傳輸,它是Mina,Netty,Grizzly的抽象,它還可以擴充套件UDP傳輸。Exchange層在傳輸層上封裝了Request-Response語義。
  • 實際上Registry和Monitor不在同一層,它們是獨立的節點,只是為了全域性檢視而一層一層地繪製它們。

模組包裝

/dev-guide/images/dubbo-modules.jpg

模組說明:

  • dubbo-common模組:包括Util類和通用模組。
  • dubbo-remoting模組:是Dubbo協議實現,如果使用RMI for RPC則無需使用此模組。
  • dubbo-rpc模組:各種協議的抽象,和動態代理,只有一對一的呼叫,不關心叢集的管理。
  • dubbo-cluster模組:將許多服務提供者偽裝成一個提供者,包括負載平衡,容錯,路由等。群集的地址列表可以是靜態的,也可以是登錄檔傳送的。
  • dubbo-registry模組:基於登錄檔傳送地址的叢集和各種註冊中心的抽象。
  • dubbo-monitor模組:服務呼叫時間統計,呼叫時間,呼叫鏈跟蹤服務。
  • dubbo-config模組:是Dubbo外部API,使用者使用Dubbo by Config,隱藏Dubbo的詳細資訊。
  • dubbo-container模組:是一個Standlone容器,只需使用Main方法載入Spring,因為通常服務不需要Tomcat / JBoss功能。

包層根據層結構劃分,與層劃分的區別:

  • 容器是服務容器,用於服務執行部署,未在映像中顯示。
  • 協議層和代理層都放在RPC模組中,它們是RPC模組的核心,當只有1個提供者時,可以使用這2層完整的RPC呼叫。
  • 傳輸層和交換層放置在遠端模組中,用於RPC呼叫基礎通訊。
  • 序列化層放在通用模組中,以便重用。

依賴關係

/dev-guide/images/dubbo-relation.jpg

圖片描述:

  • 影象,協議,群集,代理,服務,容器,登錄檔,監視器中的框表示層或模組,藍調錶示與業務互動,綠色表示僅與Dubbo的內部互動。
  • 影象,消費者,提供者,登錄檔,監視器中的背景框表示部署邏輯拓撲節點。
  • 呼叫影象中的藍色虛線進行初始化,為執行時非同步呼叫紅色虛線,併為執行時同步呼叫紅線。
  • 影象僅包含RPC層,不包括Remoting層,整個Remoting隱藏在Protocol層中。

呼叫鏈

展開整個設計地圖的紅色呼叫鏈:

/dev-guide/images/dubbo-extension.jpg

公開服務順序

展開服務提供者公開服務的初始化鏈,在整個設計圖的左側,序列圖如下所示:

/dev-guide/images/dubbo-export.jpg

參考服務序列

展開服務使用者參考服務的初始化鏈,在整個設計圖的右側,序列圖如下所示:

/dev-guide/images/dubbo-refer.jpg

領域模型

達博的核心領域模型:

  • 協議是服務域,它是Invoker暴露和參考的主要功能入口,它負責Invoker的生命週期管理。
  • Invoker是實體域,它是Dubbo的核心模型,所有其他模型都受到干擾,或轉換為它,它代表一個可執行檔案,你可以通過呼叫invoke來呼叫它,它可以是一個本地實現,一個遠端實現,或者叢集實現。
  • 呼叫是會話域,它在呼叫程序中儲存變數,例如方法名稱,引數等。

基本設計原則

  • 使用Microkernel + Plugin設計模式,Microkernel只負責組裝外掛,Dubbo的功能是通過擴充套件點實現的,這意味著Dubbo的所有功能都可以被使用者自定義擴充套件替換。
  • 使用URL作為配置資訊的startdard格式,所有擴充套件點都通過URL傳輸配置資訊。