Dubbo面試題

Dubbo面試題

springcloud和Dobbo有什么區(qū)別

說(shuō)真的,這兩個(gè)東西沒(méi)有可比性,Dubbo最開(kāi)始是一個(gè)可擴(kuò)展的RPC調(diào)用框架,在Dubbo里一次調(diào)用涉及到的服

務(wù)路由、負(fù)載均衡、序列化機(jī)制、網(wǎng)絡(luò)傳輸協(xié)議等等都是可以擴(kuò)展的,具體的性能取決于所選用的組件,同樣

Spring Cloud也類似,所以我們不能站在性能的角度來(lái)對(duì)比兩個(gè)框架。

其次,作為框架,要對(duì)比我們也應(yīng)該對(duì)比這個(gè)框架的可擴(kuò)展性,Dubbo的可擴(kuò)展性是不要比Spring Cloud好的。

而Spring Cloud目前的優(yōu)勢(shì)是組件比較齊全,比如有服務(wù)網(wǎng)關(guān)、分布式配置中心、服務(wù)跟蹤等等,而這些Dubbo

暫時(shí)還沒(méi)有,但是在Dubbo生態(tài)里是準(zhǔn)備加上的。

Dubbo2.7有什么新功能

\1. 動(dòng)態(tài)配置中心(confifigcenter)

\2. 元數(shù)據(jù)中心

\3. 條件路由支持應(yīng)用

\4. 標(biāo)簽路由

Dubbo支持哪些通信協(xié)議,分別適用于哪些場(chǎng)景

\1. dubbo://,框架的默認(rèn)協(xié)議,采用單一長(zhǎng)連接和 NIO 異步通訊,適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用。

\2. http://,使用短連接同步傳輸,使用數(shù)據(jù)量不確定,并且需要在js或?yàn)g覽器中使用。

http長(zhǎng)連接和短連接

Http1.0,不支持長(zhǎng)連接

Http1.1,默認(rèn)為長(zhǎng)連接,Connection=keep-alive

但是,說(shuō)Http長(zhǎng)連接并不準(zhǔn)確,因?yàn)閔ttp是應(yīng)用層協(xié)議,tcp才是傳輸層協(xié)議,只有傳輸層才能說(shuō)建立連接與關(guān)閉

連接。

那么,長(zhǎng)連接有什么好處,長(zhǎng)連接就是可以保持連接,那當(dāng)我打開(kāi)一個(gè)網(wǎng)頁(yè)后,實(shí)際上我通常要過(guò)會(huì)才有可能去

請(qǐng)求其他東西,其實(shí)并不需要這個(gè)連接一直保持在這,從這個(gè)角度看,似乎使用短連接比較合適。

長(zhǎng)連接,實(shí)際上是指tcp長(zhǎng)連接,那么http可以在這個(gè)連接的基礎(chǔ)上發(fā)送多次http請(qǐng)求與接收多次http響應(yīng),實(shí)際

上當(dāng)我們打開(kāi)一個(gè)網(wǎng)頁(yè)時(shí),還需要請(qǐng)求很多js,css等資源,這個(gè)時(shí)候這些請(qǐng)求是可以復(fù)用tcp連接的,從而節(jié)省

了網(wǎng)絡(luò)資源。

那么,長(zhǎng)連接什么時(shí)候才關(guān)閉?有一個(gè)超時(shí)時(shí)間的,在header進(jìn)行設(shè)置,當(dāng)這段時(shí)間內(nèi)沒(méi)有任何http請(qǐng)求則超時(shí)

后自動(dòng)關(guān)閉。

Dubbo支持的集群容錯(cuò)方案

  1. Failover Cluster:失敗自動(dòng)切換,當(dāng)出現(xiàn)失敗,重試其它服務(wù)器。通常用于讀操作,但重試會(huì)帶來(lái)更長(zhǎng)延

遲。

\2. Failfast Cluster:快速失敗,只發(fā)起一次調(diào)用,失敗立即報(bào)錯(cuò)。通常用于非冪等性的寫(xiě)操作,比如新增記

錄。

\3. Failsafe Cluster:失敗安全,出現(xiàn)異常時(shí),直接忽略。通常用于寫(xiě)入審計(jì)日志等操作。

\4. Failback Cluster:失敗自動(dòng)恢復(fù),后臺(tái)記錄失敗請(qǐng)求,定時(shí)重發(fā)。通常用于消息通知操作。

\5. Forking Cluster:并行調(diào)用多個(gè)服務(wù)器,只要一個(gè)成功即返回。通常用于實(shí)時(shí)性要求較高的讀操作,但需

要浪費(fèi)更多服務(wù)資源

\6. Broadcast Cluster:廣播調(diào)用所有提供者,逐個(gè)調(diào)用,任意一臺(tái)報(bào)錯(cuò)則報(bào)錯(cuò)。通常用于通知所有提供者更

新緩存或日志等本地資源信息。

Dubbo支持的負(fù)載均衡策略

\1. Random LoadBalance:隨機(jī)

\2. RoundRobin LoadBalance:輪詢

\3. LeastActive LoadBalance:最少活躍調(diào)用數(shù)

\4. ConsistentHash LoadBalance:一致性 Hash,相同參數(shù)的請(qǐng)求總是發(fā)到同一提供者。

Dubbo服務(wù)降級(jí)實(shí)現(xiàn)

Dubbo中的服務(wù)降級(jí)實(shí)際上使用的就是Dubbo中的Mock機(jī)制,比如當(dāng)調(diào)用某個(gè)服務(wù)失敗后,可以設(shè)置

mock=fail:return+null表示調(diào)用服務(wù)失敗后返回null。

服務(wù)提供者實(shí)現(xiàn)失效踢出是什么原理

服務(wù)失效踢出基于 Zookeeper 的臨時(shí)節(jié)點(diǎn)原理。

Dubbo服務(wù)暴露的過(guò)程

首先Dubbo會(huì)通過(guò)DubboNamespanceHandler解析dubbo:service/標(biāo)簽,并且Spring會(huì)完成Bean的實(shí)例化,隨后

發(fā)布ContextRefreshEvent事件,會(huì)調(diào)用ServiceBean中的export方法,以這個(gè)方法為入口然后進(jìn)行服務(wù)暴露。實(shí)

際上,我們應(yīng)該叫服務(wù)導(dǎo)出,因?yàn)榉?wù)導(dǎo)出包括服務(wù)注冊(cè)和服務(wù)暴露,導(dǎo)出順序也是先進(jìn)行服務(wù)注冊(cè)在進(jìn)行服務(wù)

暴露,服務(wù)注冊(cè)就是將服務(wù)信息(包括接口名以及對(duì)于的協(xié)議等信息)注冊(cè)到注冊(cè)中心,然后進(jìn)行服務(wù)信息監(jiān)聽(tīng)

器綁定,然后進(jìn)行服務(wù)暴露(其實(shí)就是啟動(dòng)tomcat或nettyserver)。

Dubbo服務(wù)引入的過(guò)程

首先Dubbo會(huì)通過(guò)DubboNamespanceHandler解析dubbo:reference/標(biāo)簽,并且Spring會(huì)完成Bean的實(shí)例化,在

引入該Bean的時(shí)候,會(huì)調(diào)用ReferenceBean的getObject方法,以這個(gè)方法為入口然后進(jìn)行服務(wù)引入,服務(wù)引入

的步驟為:先根據(jù)服務(wù)名從注冊(cè)中心找到所有的服務(wù)提供者并且封裝到服務(wù)目錄中,然后進(jìn)行服務(wù)路由的初始

化,然后進(jìn)行監(jiān)聽(tīng)器綁定,然后將服務(wù)目錄封裝為Cluster,最后生成代理類。實(shí)際上服務(wù)引入是相當(dāng)復(fù)雜的,這

里只能面試大概的步驟。

Dubbo服務(wù)調(diào)用的過(guò)程

消費(fèi)者:

\1. Mock機(jī)制

\2. 服務(wù)路由

\3. 負(fù)載均衡

\4. Filter過(guò)濾

\5. 發(fā)送請(qǐng)求

服務(wù)者:

\1. 接收請(qǐng)求

\2. Filter過(guò)濾

\3. 執(zhí)行具體的實(shí)現(xiàn)類

\4. 返回結(jié)果

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容