dubbo架構原理

什麼是Dubbo?
Dubbo是一個RPC遠程調用框架, 分佈式服務治理框架

什麼是Dubbo服務治理?
服務與服務之間會有很多個Url、依賴關係、負載均衡、容錯、降級、路由規則、自動註冊服務。

Dubbo架構
在這裏插入圖片描述

節點角色說明:

Provider: 暴露服務的服務提供方。 

Consumer: 調用遠程服務的服務消費方。 

Registry: 服務註冊與發現的註冊中心。

Container:服務器容器

Monitor: 統計服務的調用次調和調用時間的監控中心。

調用關係說明【重點】:
服務容器負責啓動,加載,運行服務提供者。
服務提供者在啓動時,向註冊中心註冊自己提供的服務。
服務消費者在啓動時,向註冊中心訂閱自己所需的服務。
註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

- 連通性:
註冊中心負責服務地址的註冊與查找,相當於目錄服務,服務提供者和消費者只在啓動時與註冊中心交互,註冊中心不轉發請求,壓力較小
監控中心負責統計各服務調用次數,調用時間等,統計先在內存彙總後每分鐘一次發送到監控中心服務器,並以報表展示
服務提供者向註冊中心註冊其提供的服務,並彙報調用時間到監控中心,此時間不包含網絡開銷
服務消費者向註冊中心獲取服務提供者地址列表,並根據負載算法直接調用提供者,同時彙報調用時間到監控中心,此時間包含網絡開銷
註冊中心,服務提供者,服務消費者三者之間均爲長連接,監控中心除外
註冊中心通過長連接感知服務提供者的存在,服務提供者宕機,註冊中心將立即推送事件通知消費者
註冊中心和監控中心全部宕機,不影響已運行的提供者和消費者,消費者在本地緩存了提供者列表
註冊中心和監控中心都是可選的,服務消費者可以直連服務提供者

Dubbo支持哪些協議?【重點】
Dubbo協議
  Dubbo缺省協議採用單一長連接和NIO異步通訊,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況。Dubbo缺省協議不適合傳送大數據量的服務,比如傳文件,傳視頻等,除非請求量很低。

Hessian協議
Hessian協議用於集成Hessian的服務,Hessian底層採用Http通訊,採用Servlet暴露服務,Dubbo缺省內嵌Jetty作爲服務器實現。Hessian是Caucho開源的一個RPC框架:http://hessian.caucho.com,其通訊效率高於WebService和Java自帶的序列化。

基於Hessian的遠程調用協議:

連接個數:多連接

連接方式:短連接

傳輸協議:HTTP

傳輸方式:同步傳輸

序列化:Hessian二進制序列化

適用範圍:傳入傳出參數數據包較大,提供者比消費者個數多,提供者壓力較大,可傳文件。

適用場景:頁面傳輸,文件傳輸,或與原生hessian服務互操作

HTTP協議
此協議採用spring 的HttpInvoker的功能實現,

連接個數:多個

連接方式:長連接

連接協議:HTTP

傳輸方式:同步傳輸

序列化:表單序列化

適用範圍:傳入傳出參數數據包大小混合,提供者比消費者個數多,可用瀏覽器查看,可用表單或URL傳入參數,暫不支持傳文件。

適用場景:需同時給應用程序和瀏覽器JS使用的服務。

RMI協議
採用JDK標準的java.rmi.*實現,採用阻塞式短連接和JDK標準序列化方式

Java標準的遠程調用協議:

連接個數:多連接

連接方式:短連接

傳輸協議:TCP

傳輸方式:同步傳輸

序列化:Java標準二進制序列化

適用範圍:傳入傳出參數數據包大小混合,消費者與提供者個數差不多,可傳文件。

適用場景:常規遠程服務方法調用,與原生RMI服務互操作

Dubbox與Dubbo區別?
Dubox使用http協議+rest風格傳入json或者xml格式進行遠程調用。

Dubbo使用Dubbo協議。

SpringCloud與Dubbo區別?
相同點:
dubbo與springcloud都可以實現RPC遠程調用。

dubbo與springcloud都可以使用分佈式、微服務場景下。

區別:
dubbo有比較強的背景,在國內有一定影響力。

dubbo使用zookeeper或redis作爲作爲註冊中心

springcloud使用eureka作爲註冊中心

dubbo支持多種協議,默認使用dubbo協議。

Springcloud只能支持http協議。

Springcloud支持zuul網關,支持分佈式配置中心,而dubbo都不支持

Springcloud是一套完整的微服務解決方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章