Dubbo35個必知必會的點,面試總問到!

Dubbo作爲一個微服務主流框架,相信不管是工作和學習很少人能繞開發。今天我給大家準備了一些Dubbo必知必會的知識點,同時面試中也經常問到,建議小夥伴收藏起來。

1.什麼是Dubbo?

Dubbo是基於Java的高性能輕量級的RPC分佈式服務框架,現已成爲 Apache 基金會孵化項目。

官網:http://dubbo.apache.org/en-us/

2.爲什麼要使用Dubbo?

背景:

隨着互聯網的快速發展,Web應用程序的規模不斷擴大,最後我們發現傳統的垂直體系結構(整體式)已無法解決。分佈式服務體系結構和流計算體系結構勢在必行,迫切需要一個治理系統來確保體系結構的有序發展。

  • 開源免費
  • 一些核心業務被提取並作爲獨立的服務提供服務,逐漸形成一個穩定的服務中心,這樣前端應用程序就可以更好地響應變化多端的市場需求
  • 分佈式框架能承受更大規模的流量
  • 內部基於netty性能高

3.Dubbo提供了哪3個關鍵功能?

基於接口的遠程調用

容錯和負載均衡

自動服務註冊和發現

4.你知道哪些機構在用Dubbo嗎?

image-20200423105332840

5.Dubbo服務的關鍵節點有哪些?

image-20200423105925624

6.說一下Dubbo服務註冊流程?

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

7.能畫一下服務註冊流程圖嗎?

image-20200423110344448

8.Dubbo架構的特點?

連通性、健壯性、伸縮性、以及向未來架構的升級性。

9.對jdk的最小版本需求?

jdk1.6+

10.註冊中心的選擇?

一般來說選中Zookeeper更穩定更合適。

除了Zookeeper還有Redis註冊中心、Multicast註冊中心、Simple註冊中心。

11.Dubbo的核心配置?用途?

image-20200423111538534

12.配置優先級規則?

image-20200423112118958

優先級從高到低:

  • JVM -D參數,當你部署或者啓動應用時,它可以輕易地重寫配置,比如,改變dubbo協議端口;
  • XML, XML中的當前配置會重寫dubbo.properties中的;
  • Properties,默認配置,僅僅作用於以上兩者沒有配置時。

13.如何用代碼方式繞過註冊中心點對點直連?

…
 
ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此實例很重,封裝了與註冊中心的連接以及與提供者的連接,請自行緩存,否則可能造成內存和連接泄漏
// 如果點對點直連,可以用reference.setUrl()指定目標地址,設置url後將繞過註冊中心,
// 其中,協議對應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參數
  • Externalized Configuration,外部化配置
  • ServiceConfig、ReferenceConfig等編程接口採集的配置
  • 本地配置文件dubbo.properties

15.如何禁用某個服務的啓動檢查?

<dubbo:reference interface = "com.foo.BarService" check = "false" />

16.Dubbo 負載均衡策略?默認是?

  • 隨機負載平衡(默認)

  • RoundRobin負載平衡

  • 最小活動負載平衡

  • 一致的哈希負載平衡

17.上線兼容老版本?

多版本號(version)

18.開發測試環境,想繞過註冊中心如何配置?

  • 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.集羣容錯幾種方法?

image-20200423121735540

20.Dubbo有幾種配置方式?

  1. Spring
  2. Java API

21.Dubbo有哪些協議?推薦?

  • dubbo://(推薦)
  • rmi://
  • hessian://
  • http://
  • webservice://
  • thrift://
  • memcached://
  • redis://
  • rest://

22.Dubbo使用什麼通信框架?

dubbo使用netty。

23.dubbo協議默認端口號?http協議默認端口?hessian?rmi?

  • dubbo:20880
  • http:80
  • hessian:80
  • rmi:80

24.Dubbo默認序列化框架?其他的你還知道?

  • dubbo協議缺省爲hessian2
  • rmi協議缺省爲java
  • http協議缺省爲json

25.一個服務有多重實現時,如何處理?

可以用group分組,服務提供方和消費放都指定同一個group。

26.Dubbo服務調用默認是阻塞的?還有其他的?

默認是同步等待結果阻塞的,同時也支持異步調用。

Dubbo 是基於 NIO 的非阻塞實現並行調用,客戶端不需要啓動多線程即可完成並行調用多個遠程服務,相對多線程開銷較小,異步調用會返回一個 Future 對象。

27.Dubbo服務追蹤解決方案?

  • Zipkin
  • Pinpoint
  • SkyWalking

28.Dubbo不維護了嗎?Dubbo和Dubbox有什麼區別?

現在進入了Apache,由apache維護。

Dubbox是噹噹的擴展項目。

29.Dubbox有什麼新功能?

  • 支持REST風格遠程調用(HTTP + JSON/XML)

  • 支持基於Kryo和FST的Java高效序列化實現

  • 支持基於嵌入式Tomcat的HTTP remoting體系

  • 升級Spring

  • 升級ZooKeeper客戶端

30.io線程池大小默認?

cpu個數 + 1

31.dubbo://協議適合什麼樣的服務調用?

採用單一長鏈接和NIO異步通訊,適用於小數量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況。

不適合傳送大數據量的服務,比如傳文件,傳視頻等,除非請求量很低。

image-20200423154308365

32.自動剔除服務什麼原理?

zookeeper臨時節點,會話保持原理。

33.從 2.0.5 版本開始,dubbo支持通過x命令來進行服務治理?

telnet

34.如何用命令查看服務列表?

telnet localhost 20880

進入命令行。然後執行 ls相關命令:

  • ls: 顯示服務列表
  • ls -l: 顯示服務詳細信息列表
  • ls XxxService: 顯示服務的方法列表
  • ls -l XxxService: 顯示服務的方法詳細信息列表

35.Dubbo框架設計是怎樣的?

在這裏插入圖片描述

各層說明:

  • config 配置層:對外配置接口,以 ServiceConfig, ReferenceConfig 爲中心,可以直接初始化配置類,也可以通過 spring 解析配置生成配置類
  • proxy 服務代理層:服務接口透明代理,生成服務的客戶端 Stub 和服務器端 Skeleton, 以 ServiceProxy 爲中心,擴展接口爲 ProxyFactory
  • registry 註冊中心層:封裝服務地址的註冊與發現,以服務 URL 爲中心,擴展接口爲 RegistryFactory, Registry, RegistryService
  • cluster 路由層:封裝多個提供者的路由及負載均衡,並橋接註冊中心,以 Invoker 爲中心,擴展接口爲 Cluster, Directory, Router, LoadBalance
  • monitor 監控層:RPC 調用次數和調用時間監控,以 Statistics 爲中心,擴展接口爲 MonitorFactory, Monitor, MonitorService
  • protocol 遠程調用層:封裝 RPC 調用,以 Invocation, Result 爲中心,擴展接口爲 Protocol, Invoker, Exporter
  • exchange 信息交換層:封裝請求響應模式,同步轉異步,以 Request, Response 爲中心,擴展接口爲 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
  • transport 網絡傳輸層:抽象 mina 和 netty 爲統一接口,以 Message 爲中心,擴展接口爲 Channel, Transporter, Client, Server, Codec
  • serialize 數據序列化層:可複用的一些工具,擴展接口爲 Serialization, ObjectInput, ObjectOutput, ThreadPool

參考:http://dubbo.apache.org/en-us/

文章持續更新中,⛽️。另外 博主整理 + 原創 15萬字面試題,包括17個專題。歡迎大家關注“Java小咖秀”回覆“面試”即可獲得Java小咖秀面試筆記.pdf

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