您好,登錄后才能下訂單哦!
這篇文章主要介紹“java Dubbo架構整體設計方法是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“java Dubbo架構整體設計方法是什么”文章能幫助大家解決問題。
在這里主要由四部分組成:
● Provider: 暴露服務的服務提供方
Protocol:負責提供者和消費者之間的協議交互數據
Service:真實的業務服務信息,可以理解成接口和實現
Container:Dubbo的運行環境
● Consumer:調用遠程服務的服務消費方
Protocol:負責提供者和消費者之間的協議交互數據
Cluster:感知提供者端的列表信息
Proxy:可以理解成提供者的服務調用代理,由它接管Consumer中的接口調用邏輯
● Register:注冊中心,用于作為服務發現和路由配置等工作,提供者和消費者都會在這里進行注冊
● Monitor:用于提供者和消費者中的數據統計,比如調用頻次、成功失敗次數等信息
● 提供者端啟動,容器負責把Service信息加載,并通過Protocol注冊到注冊中心;
● 消費者端啟動,通過監聽提供者列表來感知提供者信息,并在提供者發生改變時,通過 注冊中心及時通知消費端
● 消費方通過Proxy模塊發起請求;
● 消費者端利用Cluster模塊選擇真實的要調用的提供者;
● 消費者利用Consumer中的Protocol將信息發送給提供者;
● 提供者通過Protocol模塊來處理消費者信息;
● 最后由提供者的Service來進行處理
說明:淡綠色代表服務生產者的范圍,淡藍色代表服務消費者的范圍,紅色箭頭代表調用的方向:業務邏輯層 -> RPC層(遠程過程調用)-> Remoting(遠程數據傳輸)
整體調用流程如下:
● 消費者通過Interface進行方法調用,統一交由消費者端的Proxy,通過ProxyFactory來進行代理對象的創建,這里使用jdk的javassist技術
● 交給Filter模塊做統一的過濾請求
● 接下來就是最主要的Invoker調用邏輯了
○ 通過Directory去配置中讀取信息,最終通過list方法獲取所有的Invoker
○ 通過Cluster模塊,根據選擇的具體路由規則來選取Invoker列表
○ 通過LoadBalance模塊,根據負載均衡策略選擇一個具體的Invoker來處理請求
○ 如果執行中出現錯誤,并且Consumer階段配置了重試機制,則會重新嘗試執行
● 繼續經過Filter進行執行功能的前后封裝,Invoker選擇具體的執行協議
● 客戶端進行編碼和序列化,然后發送數據
● 達到Provider中的Server層進行反編碼和發序列化接收到的數據
● 使用Exporter選擇執行器
● 交由Filter進行一個提供者端的過濾,到達Invoker執行器
● 通過Invoker調用接口的具體實現,然后返回結果
圖例說明:
● 圖中左邊淡藍背景的為服務消費方使用的接口,右邊淡綠色背景的為服務提供方使用的接口,位于中軸線上的為雙方都用到的接口。
● 圖中從上往下分為十層,各層為單向依賴,右邊的黑色箭頭代表層之間的依賴關系,每一層都可以剝離上層被復用,其中Service和Config層為API,其他各層均為SPI
● 圖中綠色的小塊為擴展接口,藍色小塊為實現類,圖中只顯示用于關聯各層的實現類
● 圖中藍色虛線為初始化過程,即啟動時組裝鏈,紅色實線為方法調用過程,即運行時調用鏈,紫色箭頭為繼承,可以把子類看做父類的同一個節點,線上的文字為調用的方法。
Dubbo源碼整體設計與調用鏈路十分相似。只不過這里可以看到接口的一些具體實現以及左側也有更為詳細的層次劃分,我們在后面的源碼解析時也會著重介紹其中比較重要的模塊實現。
接下來分層進行介紹
1、Business業務邏輯層
● Service業務層:包括業務代碼比如接口和實現類
2、RPC層:遠程過程調用層
● config配置層,對外提供配置,以ServiceConfig、ReferenceConfig為核心,可以直接初始化配置類,也可解析配置文件
● Proxy服務代理層,無論是生產者還是消費者,框架都會產生一個代理類,整個過程對上層透明,業務層對遠程調用無感
● Register注冊中心層,封裝服務地址的注冊與發現,以服務的URL位中心
● Cluster路由層(集群容錯層),提供了多個提供者的路由和負載均衡,并且它橋接注冊中心以Invoker為中心
● Monitor監控層,RPC調用相關的信息,如調用次數、失敗情況、調用時間等統計信息都會在這一層完成統計
● Protocol遠程調用層,封裝RPC調用,無論是服務的暴露還是服務的引用,都是在Protocol中作為主功能入口負責Invoker的整個生命周期,Dubbo中的所有模型都向Invoker靠攏
3、Rmoting層:遠程數據傳輸層
● Exchange信息交換層,封裝請求和響應的模式,把請求由同步轉為異步
● Transport網絡傳輸層,統一網絡傳輸的接口,比如Netty和mina統一為一個網絡傳輸接口
● Serialize數據序列化層,負責管理整個框架中的數據傳輸的序列化和反序列化
關于“java Dubbo架構整體設計方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。