Dubbo35個面試題,總會被問到!
點擊“程序員面試吧”,選擇“星標??”
“下拉至文末”查看更多
鏈接:https://blog.csdn.net/qq_14958051/article/details/106516664
1.什么是Dubbo?
Dubbo是基于Java的高性能輕量級的RPC分布式服務框架,現(xiàn)已成為 Apache 基金會孵化項目。
官網(wǎng):http://dubbo.apache.org/en-us/
2.為什么要使用Dubbo?
背景:
隨著互聯(lián)網(wǎng)的快速發(fā)展,Web應用程序的規(guī)模不斷擴大,最后我們發(fā)現(xiàn)傳統(tǒng)的垂直體系結(jié)構(gòu)(整體式)已無法解決。分布式服務體系結(jié)構(gòu)和流計算體系結(jié)構(gòu)勢在必行,迫切需要一個治理系統(tǒng)來確保體系結(jié)構(gòu)的有序發(fā)展。
開源免費 一些核心業(yè)務被提取并作為獨立的服務提供服務,逐漸形成一個穩(wěn)定的服務中心,這樣前端應用程序就可以更好地響應變化多端的市場需求 分布式框架能承受更大規(guī)模的流量 內(nèi)部基于netty性能高
3.Dubbo提供了哪3個關(guān)鍵功能?
基于接口的遠程調(diào)用
容錯和負載均衡
自動服務注冊和發(fā)現(xiàn)
4.你知道哪些機構(gòu)在用Dubbo嗎?

5.Dubbo服務的關(guān)鍵節(jié)點有哪些?

6.說一下Dubbo服務注冊流程?
服務容器負責啟動,加載,運行服務提供者。 服務提供者在啟動時,向注冊中心注冊自己提供的服務。 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者。 服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調(diào)用,如果調(diào)用失敗,再選另一臺調(diào)用。 服務消費者和提供者,在內(nèi)存中累計調(diào)用次數(shù)和調(diào)用時間,定時每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到監(jiān)控中心。
7.能畫一下服務注冊流程圖嗎?

8.Dubbo架構(gòu)的特點?
連通性、健壯性、伸縮性、以及向未來架構(gòu)的升級性。
9.對jdk的最小版本需求?
jdk1.6+
10.注冊中心的選擇?
一般來說選中Zookeeper更穩(wěn)定更合適。
除了Zookeeper還有Redis注冊中心、Multicast注冊中心、Simple注冊中心。
11.Dubbo的核心配置?用途?

12.配置優(yōu)先級規(guī)則?

優(yōu)先級從高到低:
JVM -D參數(shù),當你部署或者啟動應用時,它可以輕易地重寫配置,比如,改變dubbo協(xié)議端口; XML, XML中的當前配置會重寫dubbo.properties中的; Properties,默認配置,僅僅作用于以上兩者沒有配置時。
13.如何用代碼方式繞過注冊中心點對點直連?
…
ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此實例很重,封裝了與注冊中心的連接以及與提供者的連接,請自行緩存,否則可能造成內(nèi)存和連接泄漏
// 如果點對點直連,可以用reference.setUrl()指定目標地址,設置url后將繞過注冊中心,
// 其中,協(xié)議對應provider.setProtocol()的值,端口對應provider.setPort()的值,
// 路徑對應service.setPath()的值,如果未設置path,缺省path為接口名
reference.setUrl("dubbo://10.20.130.230:20880/com.xxx.XxxService");
…
14.Dubbo配置來源有幾種?分別是?
4種
JVM System Properties,-D參數(shù) Externalized Configuration,外部化配置 ServiceConfig、ReferenceConfig等編程接口采集的配置 本地配置文件dubbo.properties
15.如何禁用某個服務的啟動檢查?
<dubbo:reference interface = "com.foo.BarService" check = "false" />
16.Dubbo 負載均衡策略?默認是?
隨機負載平衡(默認)
RoundRobin負載平衡
最小活動負載平衡
一致的哈希負載平衡
17.上線兼容老版本?
多版本號(version)
18.開發(fā)測試環(huán)境,想繞過注冊中心如何配置?
xml
<dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />
-D
java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890.properties
java -Ddubbo.resolve.file=xxx.properties
com.alibaba.xxx.XxxService=dubbo://localhost:20890
19.集群容錯幾種方法?

20.Dubbo有幾種配置方式?
Spring Java API
21.Dubbo有哪些協(xié)議?推薦?
dubbo://(推薦) rmi:// hessian:// http:// webservice:// thrift:// memcached:// redis:// rest://
22.Dubbo使用什么通信框架?
dubbo使用netty。
23.dubbo協(xié)議默認端口號?http協(xié)議默認端口?hessian?rmi?
dubbo:20880 http:80 hessian:80 rmi:80
24.Dubbo默認序列化框架?其他的你還知道?
dubbo協(xié)議缺省為hessian2 rmi協(xié)議缺省為java http協(xié)議缺省為json
25.一個服務有多重實現(xiàn)時,如何處理?
可以用group分組,服務提供方和消費放都指定同一個group。
26.Dubbo服務調(diào)用默認是阻塞的?還有其他的?
默認是同步等待結(jié)果阻塞的,同時也支持異步調(diào)用。
Dubbo 是基于 NIO 的非阻塞實現(xiàn)并行調(diào)用,客戶端不需要啟動多線程即可完成并行調(diào)用多個遠程服務,相對多線程開銷較小,異步調(diào)用會返回一個 Future 對象。
27.Dubbo服務追蹤解決方案?
Zipkin Pinpoint SkyWalking
28.Dubbo不維護了嗎?Dubbo和Dubbox有什么區(qū)別?
現(xiàn)在進入了Apache,由apache維護。
Dubbox是當當?shù)臄U展項目。
29.Dubbox有什么新功能?
支持REST風格遠程調(diào)用(HTTP + JSON/XML)
支持基于Kryo和FST的Java高效序列化實現(xiàn)
支持基于嵌入式Tomcat的HTTP remoting體系
升級Spring
升級ZooKeeper客戶端
30.io線程池大小默認?
cpu個數(shù) + 1
31.dubbo://協(xié)議適合什么樣的服務調(diào)用?
采用單一長鏈接和NIO異步通訊,適用于小數(shù)量大并發(fā)的服務調(diào)用,以及服務消費者機器數(shù)遠大于服務提供者機器數(shù)的情況。
不適合傳送大數(shù)據(jù)量的服務,比如傳文件,傳視頻等,除非請求量很低。

32.自動剔除服務什么原理?
zookeeper臨時節(jié)點,會話保持原理。
33.從 2.0.5 版本開始,dubbo支持通過x命令來進行服務治理?
telnet
34.如何用命令查看服務列表?
telnet localhost 20880
進入命令行。然后執(zhí)行 ls相關(guān)命令:
ls: 顯示服務列表ls -l: 顯示服務詳細信息列表ls XxxService: 顯示服務的方法列表ls -l XxxService: 顯示服務的方法詳細信息列表
35.Dubbo框架設計是怎樣的?

各層說明:
「config 配置層」:對外配置接口,以 ServiceConfig,ReferenceConfig為中心,可以直接初始化配置類,也可以通過 spring 解析配置生成配置類「proxy 服務代理層」:服務接口透明代理,生成服務的客戶端 Stub 和服務器端 Skeleton, 以 ServiceProxy為中心,擴展接口為ProxyFactory「registry 注冊中心層」:封裝服務地址的注冊與發(fā)現(xiàn),以服務 URL 為中心,擴展接口為 RegistryFactory,Registry,RegistryService「cluster 路由層」:封裝多個提供者的路由及負載均衡,并橋接注冊中心,以 Invoker為中心,擴展接口為Cluster,Directory,Router,LoadBalance「monitor 監(jiān)控層」:RPC 調(diào)用次數(shù)和調(diào)用時間監(jiān)控,以 Statistics為中心,擴展接口為MonitorFactory,Monitor,MonitorService「protocol 遠程調(diào)用層」:封裝 RPC 調(diào)用,以 Invocation,Result為中心,擴展接口為Protocol,Invoker,Exporter「exchange 信息交換層」:封裝請求響應模式,同步轉(zhuǎn)異步,以 Request,Response為中心,擴展接口為Exchanger,ExchangeChannel,ExchangeClient,ExchangeServer「transport 網(wǎng)絡傳輸層」:抽象 mina 和 netty 為統(tǒng)一接口,以 Message為中心,擴展接口為Channel,Transporter,Client,Server,Codec「serialize 數(shù)據(jù)序列化層」:可復用的一些工具,擴展接口為 Serialization,ObjectInput,ObjectOutput,ThreadPool轉(zhuǎn)自:JAVA葵花寶典
