官方文件: Dubbo 框架設計、模組說明、依賴關係
阿新 • • 發佈:2018-12-11
以下內容全文轉自 apache 官方 dubbo文件:http://dubbo.apache.org/en-us/docs/dev/design.html
框架設計
圖片描述:
- 淺藍色背景的左側區域顯示服務使用者介面,淺綠色背景的右側區域顯示服務提供者介面,中心區域顯示兩個側面介面。
- 影象從底部到頂部分為10層,這些層是單向依賴的。右側的黑色箭頭表示層之間的依賴關係,每層可以從上層剝離以重複使用,Service和Config層是API,其他層是SPI。
- 綠框是擴充套件介面,藍框是實現類,影象僅顯示關聯層的實現類。
- 藍色虛線是初始化過程,啟動時為裝配鏈,方法呼叫過程為紅線,執行時呼叫鏈,繼承紫色三角箭頭,可將子類視為父類的同一節點,文字為lines是方法呼叫。
圖層描述
- config層:外部配置介面,
ServiceConfig
並且ReferenceConfig
是圖層的中心,可以直接初始化配置類,也可以通過spring生成配置類。 - 代理層:服務介面的透明代理,生成客戶端Stub服務和伺服器Skeletion of service,
ServiceProxy
是中心,擴充套件介面是ProxyFactory
。 - 登錄檔層:服務登錄檔和發現的封裝,服務URL是中心,擴充套件介面是
RegistryFactory
,Registry
和RegistryService
。 - 簇層:muliple提供商和負載平衡,和橋接登記中心的簇的封裝,
Invoker
Cluster
,Directory
,Router
,LoadBalance
。 - 監控層:的RPC呼叫倍顯示器和呼叫執行時間,
Statistics
是中心,擴充套件介面是MonitorFactory
,Monitor
,MonitorService
- 協議層:RPC的封裝,
Invocation
並且Result
是中心,擴充套件介面是Protocol
,Invoker
,Exporter
- 交換層:的請求和響應,同步傳輸非同步封裝,
Request
並且Response
是中心,擴充套件介面是Exchanger
,ExchangeChannel
,ExchangeClient
,ExchangeServer
- 傳輸層:米娜和網狀的抽象,
Message
是中心,擴充套件介面是Channel
,Transporter
,Client
,Server
,Codec
- 序列化層:可重複使用的工具,擴充套件介面
Serialization
,ObjectInput
,ObjectOutput
,ThreadPool
關係描述
- 在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不在同一層,它們是獨立的節點,只是為了全域性檢視而一層一層地繪製它們。
模組包裝
模組說明:
- 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呼叫基礎通訊。
- 序列化層放在通用模組中,以便重用。
依賴關係
圖片描述:
- 影象,協議,群集,代理,服務,容器,登錄檔,監視器中的框表示層或模組,藍調錶示與業務互動,綠色表示僅與Dubbo的內部互動。
- 影象,消費者,提供者,登錄檔,監視器中的背景框表示部署邏輯拓撲節點。
- 呼叫影象中的藍色虛線進行初始化,為執行時非同步呼叫紅色虛線,併為執行時同步呼叫紅線。
- 影象僅包含RPC層,不包括Remoting層,整個Remoting隱藏在Protocol層中。
呼叫鏈
展開整個設計地圖的紅色呼叫鏈:
公開服務順序
展開服務提供者公開服務的初始化鏈,在整個設計圖的左側,序列圖如下所示:
參考服務序列
展開服務使用者參考服務的初始化鏈,在整個設計圖的右側,序列圖如下所示:
領域模型
達博的核心領域模型:
- 協議是服務域,它是Invoker暴露和參考的主要功能入口,它負責Invoker的生命週期管理。
- Invoker是實體域,它是Dubbo的核心模型,所有其他模型都受到干擾,或轉換為它,它代表一個可執行檔案,你可以通過呼叫invoke來呼叫它,它可以是一個本地實現,一個遠端實現,或者叢集實現。
- 呼叫是會話域,它在呼叫程序中儲存變數,例如方法名稱,引數等。
基本設計原則
- 使用Microkernel + Plugin設計模式,Microkernel只負責組裝外掛,Dubbo的功能是通過擴充套件點實現的,這意味著Dubbo的所有功能都可以被使用者自定義擴充套件替換。
- 使用URL作為配置資訊的startdard格式,所有擴充套件點都通過URL傳輸配置資訊。