常見dubbo面試題及答案

一、服務上線怎麼不影響舊版本?

採用多版本開發(dubbo:service配置version),不影響舊版本。

二、Dubbo如何做負載均衡?

<service>

<reference>

Dubbo內置了4種負載均衡策略:

1)RandomLoadBalance隨機負載均衡:是Dubbo的默認負載均衡策略。

2)RoundRobinLoadBalance輪詢負載均衡:輪詢依次。

3)LeastActiveLoadBalance最少活躍調用數:相同活躍數的隨機。活躍數指調用前後計數差。使慢的 Provider 收到更少請求,因為越慢的 Provider 的調用前後計數差會越大。

4)ConsistentHashLoadBalance一致性哈希負載均衡:相同參數的請求總是落在同一臺機器上。

二、Dubbo如何做限流降級?

1)dubbo提供了mock配置,可以很好的實現dubbo服務降級

<reference>

2)整合Sentinel

三、Dubbo如何優雅停機?

線上服務不要輕易的kill -9,可進行kill觸發應用的鉤子程序,做相關的資源清理,如果一直關閉不掉,最終可以通過kill -9執行。

Dubbo 可以通過 JDK 的 ShutdownHook 來完成優雅停機的,使用Kill pid命令幹掉進程。

四、Dubbo如何實現異步調用的?

1)api注入時添加異步調用標示

@Reference(interfaceClass=xxx.class, async-true)

2)啟動類開啟異步調用

@EnableAsycn

3)異步調用的接口添加異步調用代碼

RpcContext.getContext.future()

五、Dubbo 和 Spring Cloud 有什麼區別?

Dubbo底層是使用Netty的NIO框架,是基於TCP協議傳輸的,配合以Hession序列化完成RPC通信。

SpringCloud是基於Http協議+rest接口調用遠程過程的通信。

Http請求會有更大的報文,佔的帶寬也會更多。

REST相比RPC更為靈活,不存在代碼級別的強依賴。


DubboSpringCloud服務註冊中心Zookeeper Spring Cloud Netfix Eureka服務調用方式RPC REST API服務監控Dubbo-monitorSpring Boot Admin熔斷器不完善Spring Cloud Netflix Hystrix服務網關無Spring Cloud Netflix Zuul分佈式配置無Spring Cloud Config服務跟蹤無Spring Cloud Sleuth數據流無Spring Cloud Stream批量任務無Spring Cloud Task信息總線無Spring Cloud Bus

六、dubbo都支持什麼協議,推薦用哪種?

dubbo(推薦):單一長連接、NIO 異步通訊,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況

hessian:短連接,http,適合於頁面傳輸,文件傳輸,或與原生hessian服務互操作

Http:適用於需同時給應用程序和瀏覽器 JS 使用的服務

WebService:適用於系統集成,跨語言調用

RMI 協議:適用於常規遠程服務方法調用,與原生RMI服務互操作

七、Dubbo需要 Web 容器嗎?

不需要,dubbo服務容器是一個standalone的啟動程序,因為後臺服務不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加載服務提供方,增加複雜性,也浪費資源。

八、Dubbo內置了哪幾種服務容器?

Spring Container Jetty Container Log4j Container

九、Dubbo裡面有哪些角色?

registry:註冊中心

consumer:消費者

provider:服務提供者

container:容器

monitor:監控

十、Dubbo默認使用什麼註冊中心,還有別的選擇嗎?

zookeeper,還有 Redis、Multicast、Simple 註冊中心,但不推薦

十一、在 Provider 上可以配置的 Consumer 端的屬性有哪些?

1)timeout:調用超時

2)retries:失敗重試次數(默認重試 2 次 )

3)loadbalance:負載均衡算法,默認隨機

4)actives 消費者端,最大併發調用限制

十二、Dubbo啟動時如果依賴的服務不可用會怎樣?

Dubbo 缺省會在啟動時檢查依賴的服務是否可用,不可用時會拋出異常,阻止 Spring 初始化完成,默認 check="true",可以通過 check="false" 關閉檢查。

十三、Dubbo推薦使用什麼序列化框架,你知道的還有哪些?

推薦使用Hessian,還有Duddo、FastJson、Java自帶序列化。

十四、Dubbo默認使用的是什麼通信框架,還有別的選擇嗎?

Dubbo 默認使用 Netty 框架(推薦),另外內容還集成有Mina、Grizzly

十五、Dubbo有哪幾種集群容錯方案,默認是哪種?

1)Failover Cluster默認

失敗自動切換,當出現失敗,重試其它服務器(retries 重試次數)。通常用於讀操作,但重試會帶來更長延遲。

2)Failfast Cluster

快速失敗,只發起一次調用,失敗立即報錯,通常用於寫操作。

3)Failsafe Cluster

失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作。

4)Failback Cluster

失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於消息通知操作。

5)Forking Cluster

並行調用多個服務器,只要一個成功即返回。通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。可通過 forks="2" 來設置最大並行數。

6)Broadcast Cluster

廣播調用所有提供者,逐個調用,任意一臺報錯則報錯 [2]。通常用於通知所有提供者更新緩存或日誌等本地資源信息。

十六、Dubbo可以對結果進行緩存嗎?

<reference>

十七、Dubbo服務之間的調用是阻塞的嗎?

默認是阻塞的,可以異步調用。

十八、Dubbo的管理控制檯能做什麼?

路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡,等管理功能。

十九、說說 Dubbo 服務暴露的過程

Dubbo 會在 Spring 實例化完 bean 之後,在刷新容器最後一步發佈 ContextRefreshEvent 事件的時候,通知實現了 ApplicationListener 的 ServiceBean 類進行回調 onApplicationEvent 事件方法。Dubbo 會在這個方法中調用 ServiceBean 父類 ServiceConfig 的 export 方法,而該方法真正實現了服務的發佈。

二十、同一個服務多個註冊的情況下可以直連某一個服務嗎?

可以通過修改配置點對點直連,也可以通過 telnet 直接某個服務。


常見dubbo面試題及答案


分享到:


相關文章: