dubbo作為當(dāng)前國內(nèi)熱門的RPC框架鳞滨,其基本原理、配置調(diào)優(yōu)等是面試中會經(jīng)常問到的蟆淀,了解這些或者知道這些配置項的存在對工作也會事半功倍拯啦,遇到類似的問題可以不再去問那個廣告滿天飛的某度了。
1.Dubbo簡介
Dubbo |?d?b??|是一個由阿里巴巴開源的熔任、分布式的RPC(Remote Procedure Call Protocol-遠(yuǎn)程過程調(diào)用)和微服務(wù)框架褒链,現(xiàn)為Apache頂級項目。
Dubbo提供了三個關(guān)鍵功能:基于接口的遠(yuǎn)程調(diào)用疑苔,容錯與負(fù)載均衡甫匹,服務(wù)自動注冊與發(fā)現(xiàn)。
Dubbo使得調(diào)用遠(yuǎn)程服務(wù)就像調(diào)用本地java服務(wù)一樣簡單惦费。
下圖為Dubbo的結(jié)構(gòu)圖:
關(guān)于Dubbo的使用可以參考官方文檔http://dubbo.apache.org 兵迅,本文不作贅述。
2.Dubbo服務(wù)暴露與消費(fèi)過程
先來看下面問題:
1) Dubbo服務(wù)提供者發(fā)布服務(wù)的流程
2) Dubbo服務(wù)消費(fèi)者消費(fèi)服務(wù)的流程
3) 什么是本地暴露和遠(yuǎn)程暴露,他們的區(qū)別
Dubbo服務(wù)提供者發(fā)布服務(wù)過程:
先來看dubbo的啟動日志:
圖中從上到下框起來的日志分別是:
1) 暴露服務(wù)到本地
2) 暴露服務(wù)到遠(yuǎn)程
3) 啟動netty服務(wù)
4) 連接zookeeper
5) 注冊服務(wù)到zookeeper
6) 監(jiān)聽zookeeper中消費(fèi)服務(wù)
關(guān)于這個過程的實(shí)現(xiàn)細(xì)節(jié)可以參考Dubbo官方文檔->實(shí)現(xiàn)細(xì)節(jié)->遠(yuǎn)程調(diào)用細(xì)節(jié)->服務(wù)提供者暴露一個服務(wù)的詳細(xì)過程趁餐。截圖如下:
Dubbo服務(wù)消費(fèi)者消費(fèi)服務(wù)過程:
關(guān)于這個過程的實(shí)現(xiàn)細(xì)節(jié)可以參考Dubbo官方文檔->實(shí)現(xiàn)細(xì)節(jié)->遠(yuǎn)程調(diào)用細(xì)節(jié)->服務(wù)消費(fèi)者消費(fèi)一個服務(wù)的詳細(xì)過程喷兼。截圖如下:
下面來看本地暴露于遠(yuǎn)程暴露的區(qū)別:
本地暴露是暴露在本機(jī)JVM中,調(diào)用本地服務(wù)不需要網(wǎng)絡(luò)通信.
遠(yuǎn)程暴露是將ip,端口等信息暴露給遠(yuǎn)程客戶端,調(diào)用遠(yuǎn)程服務(wù)時需要網(wǎng)絡(luò)通信.
3.Dubbo相關(guān)協(xié)議
Dubbo 允許配置多協(xié)議,在不同服務(wù)上支持不同協(xié)議或者同一服務(wù)上同時支持多種協(xié)議后雷。
不同服務(wù)在性能上適用不同協(xié)議進(jìn)行傳輸季惯,比如大數(shù)據(jù)用短連接協(xié)議吠各,小數(shù)據(jù)大并發(fā)用長連接協(xié)議。
Dubbo支持的協(xié)議主要有:
dubbo:
Dubbo 缺省協(xié)議是dubbo協(xié)議勉抓,采用單一長連接和 NIO 異步通訊贾漏,適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及服務(wù)消費(fèi)者機(jī)器數(shù)遠(yuǎn)大于服務(wù)提供者機(jī)器數(shù)的情況藕筋。
反之纵散,Dubbo 缺省協(xié)議不適合傳送大數(shù)據(jù)量的服務(wù),比如傳文件隐圾,傳視頻等伍掀,除非請求量很低。rmi:
RMI協(xié)議采用阻塞式(同步)短連接和 JDK 標(biāo)準(zhǔn)序列化方式暇藏。適用范圍:傳入傳出參數(shù)數(shù)據(jù)包大小混合蜜笤,消費(fèi)者與提供者個數(shù)差不多,可傳文件盐碱。
hessian:
Hessian底層采用Http通訊(同步)把兔,采用Servlet暴露服務(wù)。適用于傳入傳出參數(shù)數(shù)據(jù)包較大瓮顽,提供者比消費(fèi)者個數(shù)多县好,提供者壓力較大,可傳文件暖混。
dubbo還支持的其他協(xié)議有:http, webservice, thrift, memcached, redis
4.Dubbo相關(guān)配置
先看下面問題:
Dubbo主要的配置項有哪些缕贡,作用是什么?
如果Dubbo的服務(wù)端未啟動儒恋,消費(fèi)端能起來嗎善绎?
Dubbo主要配置項:
配置應(yīng)用信息:
<dubbo:application name="appName-provider" />
配置注冊中心相關(guān)信息:
<dubbo:registryid="zk" protocol="zookeeper" address="127.0.0.1:2181" />
配置服務(wù)協(xié)議:
<dubbo:protocol name="dubbo" port="20880" threadpool="cached" threads="80" />
配置所有暴露服務(wù)缺省值:
<dubbo:provider registry="zk" protocol="dubbo" retries="0" version="1.0.0" timeout="3000" threadpool="cached" threads="4"/>
配置暴露服務(wù):
<dubbo:service interface="com.orgname.app.serviceX" ref="serviceX" />
配置所有引用服務(wù)缺省值:
<dubbo:consumer check="false" timeout="1000" version="1.0" retries="0" async="false" />
配置引用服務(wù):
備注:
a. 其中reference的check默認(rèn)=true,啟動時會檢查引用的服務(wù)是否已存在诫尽,不存在時報錯
b. 的配置是所有的缺省配置, 的配置會覆蓋的配置禀酱。同理是所有<dubbo:service>的缺省配置。
注解配置:
com.alibaba.dubbo.config.annotation.Service 配置暴露服務(wù)
com.alibaba.dubbo.config.annotation.Reference配置引用服務(wù)
好了牧嫉,如果覺得有收獲記得關(guān)注哦剂跟。
歡迎工作一到五年的Java工程師朋友們加入Java程序員開發(fā): 854393687
群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)酣藻、高性能及分布式曹洽、Jvm性能調(diào)優(yōu)、Spring源碼辽剧,MyBatis送淆,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時間來學(xué)習(xí)提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰怕轿!趁年輕偷崩,使勁拼辟拷,給未來的自己一個交代!