dubbo面試題、基本原理、核心配置

Java菜分享發表於2018-11-27

dubbo作為當前國內熱門的RPC框架,其基本原理、配置調優等是面試中會經常問到的,瞭解這些或者知道這些配置項的存在對工作也會事半功倍,遇到類似的問題可以不再去問那個廣告滿天飛的某度了。

1.Dubbo簡介

Dubbo |ˈdʌbəʊ|是一個由阿里巴巴開源的、分散式的RPC(Remote Procedure Call Protocol-遠端過程呼叫)和微服務框架,現為Apache頂級專案。

Dubbo提供了三個關鍵功能:基於介面的遠端呼叫,容錯與負載均衡,服務自動註冊與發現。

Dubbo使得呼叫遠端服務就像呼叫本地java服務一樣簡單。

下圖為Dubbo的結構圖:

dubbo面試題、基本原理、核心配置

關於Dubbo的使用可以參考官方文件http://dubbo.apache.org ,本文不作贅述。

2.Dubbo服務暴露與消費過程

先來看下面問題:

  1. Dubbo服務提供者釋出服務的流程

  2. Dubbo服務消費者消費服務的流程

  3. 什麼是本地暴露和遠端暴露,他們的區別

Dubbo服務提供者釋出服務過程:

先來看dubbo的啟動日誌:

dubbo面試題、基本原理、核心配置

圖中從上到下框起來的日誌分別是:

  1. 暴露服務到本地

  2. 暴露服務到遠端

  3. 啟動netty服務

  4. 連線zookeeper

  5. 註冊服務到zookeeper

  6. 監聽zookeeper中消費服務

關於這個過程的實現細節可以參考Dubbo官方文件->實現細節->遠端呼叫細節->服務提供者暴露一個服務的詳細過程。截圖如下:

dubbo面試題、基本原理、核心配置

Dubbo服務消費者消費服務過程:

關於這個過程的實現細節可以參考Dubbo官方文件->實現細節->遠端呼叫細節->服務消費者消費一個服務的詳細過程。截圖如下:

dubbo面試題、基本原理、核心配置

下面來看本地暴露於遠端暴露的區別:

本地暴露是暴露在本機JVM中,呼叫本地服務不需要網路通訊.

遠端暴露是將ip,埠等資訊暴露給遠端客戶端,呼叫遠端服務時需要網路通訊.

3.Dubbo相關協議

Dubbo 允許配置多協議,在不同服務上支援不同協議或者同一服務上同時支援多種協議。

不同服務在效能上適用不同協議進行傳輸,比如大資料用短連線協議,小資料大併發用長連線協議。

Dubbo支援的協議主要有:

dubbo:

Dubbo 預設協議是dubbo協議,採用單一長連線和 NIO 非同步通訊,適合於小資料量大併發的服務呼叫,以及服務消費者機器數遠大於服務提供者機器數的情況。

反之,Dubbo 預設協議不適合傳送大資料量的服務,比如傳檔案,傳視訊等,除非請求量很低。rmi:

RMI協議採用阻塞式(同步)短連線和 JDK 標準序列化方式。適用範圍:傳入傳出引數資料包大小混合,消費者與提供者個數差不多,可傳檔案。

hessian:

Hessian底層採用Http通訊(同步),採用Servlet暴露服務。適用於傳入傳出引數資料包較大,提供者比消費者個數多,提供者壓力較大,可傳檔案。

dubbo還支援的其他協議有:http, webservice, thrift, memcached, redis

4.Dubbo相關配置

先看下面問題:

Dubbo主要的配置項有哪些,作用是什麼?

如果Dubbo的服務端未啟動,消費端能起來嗎?

Dubbo主要配置項:

配置應用資訊:

<dubbo:application name="appName-provider" />

配置註冊中心相關資訊:

<dubbo:registryid="zk" protocol="zookeeper" address="127.0.0.1:2181" />

配置服務協議:

<dubbo:protocol name="dubbo" port="20880" threadpool="cached" threads="80" />

配置所有暴露服務預設值:

<dubbo:provider registry="zk" protocol="dubbo" retries="0" version="1.0.0" timeout="3000" threadpool="cached" threads="4"/>

配置暴露服務:

<dubbo:service interface="com.orgname.app.serviceX" ref="serviceX" />

配置所有引用服務預設值:

<dubbo:consumer check="false" timeout="1000" version="1.0" retries="0" async="false" />

配置引用服務:

備註:

a. 其中reference的check預設=true,啟動時會檢查引用的服務是否已存在,不存在時報錯

b. 的配置是所有的預設配置, 的配置會覆蓋的配置。同理是所有dubbo:service的預設配置。

註解配置:

com.alibaba.dubbo.config.annotation.Service 配置暴露服務

com.alibaba.dubbo.config.annotation.Reference配置引用服務

好了,如果覺得有收穫記得關注哦。 歡迎工作一到五年的Java工程師朋友們加入Java程式設計師開發: 854393687 群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

相關文章