dubbo作為當前國內熱門的RPC框架,其基本原理、配置調優等是面試中會經常問到的,瞭解這些或者知道這些配置項的存在對工作也會事半功倍,遇到類似的問題可以不再去問那個廣告滿天飛的某度了。
1. <strong>Dubbo簡介
Dubbo |ˈdʌbəʊ|是一個由阿里巴巴開源的、分佈式的RPC(Remote Procedure Call Protocol-遠程過程調用)和微服務框架,現為Apache頂級項目。
Dubbo提供了三個關鍵功能:基於接口的遠程調用,容錯與負載均衡,服務自動註冊與發現。
Dubbo使得調用遠程服務就像調用本地java服務一樣簡單。
下圖為Dubbo的結構圖:
關於Dubbo的使用可以參考官方文檔http://dubbo.apache.org ,本文不作贅述。
2. <strong>Dubbo服務暴露與消費過程
先來看下面問題:
1) Dubbo服務提供者發佈服務的流程
2) Dubbo服務消費者消費服務的流程
3) 什麼是本地暴露和遠程暴露,他們的區別
Dubbo服務提供者發佈服務過程:
先來看dubbo的啟動日誌:
圖中從上到下框起來的日誌分別是:
1) 暴露服務到本地
2) 暴露服務到遠程
3) 啟動netty服務
4) 連接zookeeper
5) 註冊服務到zookeeper
6) 監聽zookeeper中消費服務
關於這個過程的實現細節可以參考Dubbo官方文檔->實現細節->遠程調用細節->服務提供者暴露一個服務的詳細過程。截圖如下:
Dubbo服務消費者消費服務過程:
關於這個過程的實現細節可以參考Dubbo官方文檔->實現細節->遠程調用細節->服務消費者消費一個服務的詳細過程。截圖如下:
下面來看本地暴露於遠程暴露的區別:
本地暴露是暴露在本機JVM中,調用本地服務不需要網絡通信.
遠程暴露是將ip,端口等信息暴露給遠程客戶端,調用遠程服務時需要網絡通信.
3. <strong>Dubbo相關協議
Dubbo 允許配置多協議,在不同服務上支持不同協議或者同一服務上同時支持多種協議。
不同服務在性能上適用不同協議進行傳輸,比如大數據用短連接協議,小數據大併發用長連接協議。
Dubbo支持的協議主要有:
dubbo:
Dubbo 缺省協議是dubbo協議,採用單一長連接和 NIO 異步通訊,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況。
反之,Dubbo 缺省協議不適合傳送大數據量的服務,比如傳文件,傳視頻等,除非請求量很低。rmi:
RMI協議採用阻塞式(同步)短連接和 JDK 標準序列化方式。適用範圍:傳入傳出參數數據包大小混合,消費者與提供者個數差不多,可傳文件。
hessian:
Hessian底層採用Http通訊(同步),採用Servlet暴露服務。適用於傳入傳出參數數據包較大,提供者比消費者個數多,提供者壓力較大,可傳文件。
dubbo還支持的其他協議有:http, webservice, thrift, memcached, redis
4. <strong>Dubbo相關配置
先看下面問題:
Dubbo主要的配置項有哪些,作用是什麼?
如果Dubbo的服務端未啟動,消費端能起來嗎?
Dubbo主要配置項:
配置應用信息:
配置註冊中心相關信息:
配置服務協議:
配置所有暴露服務缺省值:
配置暴露服務:
配置所有引用服務缺省值:
配置引用服務:
備註:其中reference的check默認=true,啟動時會檢查引用的服務是否已存在,不存在時報錯
註解配置:
com.alibaba.dubbo.config.annotation.Service 配置暴露服務
com.alibaba.dubbo.config.annotation.Reference配置引用服務
好了,如果覺得有收穫記得關注哦。
閱讀更多 高級JAVA指南 的文章