Dubbo面試題18問恶阴!這些你都會嗎?

u=3006962537,227085071&fm=26&gp=0.jpg

dubbo是什么

dubbo是一個(gè)分布式框架豹障,遠(yuǎn)程服務(wù)調(diào)用的分布式框架冯事,其核心部分包含: 集群容錯(cuò):提供基于接口方法的透明遠(yuǎn)程過程調(diào)用,包括多協(xié)議支持血公,以及軟負(fù)載均衡昵仅,失敗容錯(cuò),地址路由累魔,動(dòng)態(tài)配置等集群支持摔笤。 遠(yuǎn)程通訊: 提供對多種基于長連接的NIO框架抽象封裝,包括多種線程模型垦写,序列化吕世,以及“請求-響應(yīng)”模式的信息交換方式。 自動(dòng)發(fā)現(xiàn):基于注冊中心目錄服務(wù)梯投,使服務(wù)消費(fèi)方能動(dòng)態(tài)的查找服務(wù)提供方命辖,使地址透明况毅,使服務(wù)提供方可以平滑增加或減少機(jī)器。

dubbo能做什么

透明化的遠(yuǎn)程方法調(diào)用尔艇,就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法尔许,只需簡單配置,沒有任何API侵入漓帚。 軟負(fù)載均衡及容錯(cuò)機(jī)制母债,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器,降低成本尝抖,減少單點(diǎn)毡们。 服務(wù)自動(dòng)注冊與發(fā)現(xiàn),不再需要寫死服務(wù)提供方地址昧辽,注冊中心基于接口名查詢服務(wù)提供者的IP地址衙熔,并且能夠平滑添加或刪除服務(wù)提供者。

1搅荞、默認(rèn)使用的是什么通信框架红氯,還有別的選擇嗎?

答:默認(rèn)也推薦使用 netty 框架,還有 mina咕痛。

2痢甘、服務(wù)調(diào)用是阻塞的嗎?

答:默認(rèn)是阻塞的茉贡,可以異步調(diào)用塞栅,沒有返回值的可以這么做。

3腔丧、一般使用什么注冊中心放椰?還有別的選擇嗎?

答:推薦使用 zookeeper 注冊中心愉粤,還有 Multicast注冊中心, Redis注冊中心, Simple注冊中心.

ZooKeeper的節(jié)點(diǎn)是通過像樹一樣的結(jié)構(gòu)來進(jìn)行維護(hù)的砾医,并且每一個(gè)節(jié)點(diǎn)通過路徑來標(biāo)示以及訪問。除此之外衣厘,每一個(gè)節(jié)點(diǎn)還擁有自身的一些信息如蚜,包括:數(shù)據(jù)、數(shù)據(jù)長度影暴、創(chuàng)建時(shí)間怖亭、修改時(shí)間等等。

4坤检、默認(rèn)使用什么序列化框架,你知道的還有哪些期吓?

答:默認(rèn)使用 Hessian 序列化早歇,還有 Duddo倾芝、FastJson、Java 自帶序列化箭跳。 hessian是一個(gè)采用二進(jìn)制格式傳輸?shù)姆?wù)框架晨另,相對傳統(tǒng)soap web service,更輕量谱姓,更快速借尿。

Hessian原理與協(xié)議簡析:

http的協(xié)議約定了數(shù)據(jù)傳輸?shù)姆绞剑琱essian也無法改變太多:

  1. hessian中client與server的交互屉来,基于http-post方式路翻。

  2. hessian將輔助信息,封裝在http header中茄靠,比如“授權(quán)token”等茂契,我們可以基于http-header來封裝關(guān)于“安全校驗(yàn)”“meta數(shù)據(jù)”等。hessian提供了簡單的”校驗(yàn)”機(jī)制慨绳。

  3. 對于hessian的交互核心數(shù)據(jù)掉冶,比如“調(diào)用的方法”和參數(shù)列表信息,將通過post請求的body體直接發(fā)送脐雪,格式為字節(jié)流厌小。

  4. 對于hessian的server端響應(yīng)數(shù)據(jù),將在response中通過字節(jié)流的方式直接輸出战秋。

hessian的協(xié)議本身并不復(fù)雜璧亚,在此不再贅言;所謂協(xié)議(protocol)就是約束數(shù)據(jù)的格式获询,client按照協(xié)議將請求信息序列化成字節(jié)序列發(fā)送給server端涨岁,server端根據(jù)協(xié)議,將數(shù)據(jù)反序列化成“對象”吉嚣,然后執(zhí)行指定的方法梢薪,并將方法的返回值再次按照協(xié)議序列化成字節(jié)流,響應(yīng)給client尝哆,client按照協(xié)議將字節(jié)流反序列話成”對象”秉撇。

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

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

6、服務(wù)上線怎么不影響舊版本恒序?

答:采用多版本開發(fā)瘦麸,不影響舊版本。在配置中添加version來作為版本區(qū)分

7歧胁、如何解決服務(wù)調(diào)用鏈過長的問題滋饲?

答:可以結(jié)合 zipkin 實(shí)現(xiàn)分布式服務(wù)追蹤厉碟。

8、說說核心的配置有哪些屠缭?

核心配置有:

  1. dubbo:service/

  2. dubbo:reference/

  3. dubbo:protocol/

  4. dubbo:registry/

  5. dubbo:application/

  6. dubbo:provider/

  7. dubbo:consumer/

  8. dubbo:method/

9箍鼓、dubbo 推薦用什么協(xié)議?

答:默認(rèn)使用 dubbo 協(xié)議呵曹。

10款咖、同一個(gè)服務(wù)多個(gè)注冊的情況下可以直連某一個(gè)服務(wù)嗎?

答:可以直連奄喂,修改配置即可铐殃,也可以通過 telnet 直接某個(gè)服務(wù)。

11砍聊、dubbo 在安全機(jī)制方面如何解決的背稼?

dubbo 通過 token 令牌防止用戶繞過注冊中心直連,然后在注冊中心管理授權(quán)玻蝌,dubbo 提供了黑白名單蟹肘,控制服務(wù)所允許的調(diào)用方。

12俯树、集群容錯(cuò)怎么做帘腹?

答:讀操作建議使用 Failover 失敗自動(dòng)切換,默認(rèn)重試兩次其他服務(wù)器许饿。寫操作建議使用 Failfast 快速失敗阳欲,發(fā)一次調(diào)用失敗就立即報(bào)錯(cuò)。

13陋率、在使用過程中都遇到了些什么問題球化? 如何解決的?

1) 同時(shí)配置了 XML 和 properties 文件瓦糟,則 properties 中的配置無效

只有 XML 沒有配置時(shí)筒愚,properties 才生效。

2) dubbo 缺省會在啟動(dòng)時(shí)檢查依賴是否可用菩浙,不可用就拋出異常巢掺,阻止 spring 初始化完成,check 屬性默認(rèn)為 true劲蜻。

測試時(shí)有些服務(wù)不關(guān)心或者出現(xiàn)了循環(huán)依賴陆淀,將 check 設(shè)置為 false

3) 為了方便開發(fā)測試,線下有一個(gè)所有服務(wù)可用的注冊中心先嬉,這時(shí)轧苫,如果有一個(gè)正在開發(fā)中的服務(wù)提供者注冊,可能會影響消費(fèi)者不能正常運(yùn)行疫蔓。

解決:讓服務(wù)提供者開發(fā)方浸剩,只訂閱服務(wù)钾军,而不注冊正在開發(fā)的服務(wù),通過直連測試正在開發(fā)的服務(wù)绢要。設(shè)置 dubbo:registry 標(biāo)簽的 register 屬性為 false。

4) spring 2.x 初始化死鎖問題拗小。

在 spring 解析到 dubbo:service 時(shí)重罪,就已經(jīng)向外暴露了服務(wù),而 spring 還在接著初始化其他 bean哀九,如果這時(shí)有請求進(jìn)來剿配,并且服務(wù)的實(shí)現(xiàn)類里有調(diào)用 applicationContext.getBean() 的用法。getBean 線程和 spring 初始化線程的鎖的順序不一樣阅束,導(dǎo)致了線程死鎖呼胚,不能提供服務(wù),啟動(dòng)不了息裸。

解決:不要在服務(wù)的實(shí)現(xiàn)類中使用 applicationContext.getBean(); 如果不想依賴配置順序蝇更,可以將 dubbo:provider 的 deplay 屬性設(shè)置為 - 1,使 dubbo 在容器初始化完成后再暴露服務(wù)呼盆。

5) 服務(wù)注冊不上

檢查 dubbo 的 jar 包有沒有在 classpath 中年扩,以及有沒有重復(fù)的 jar 包

檢查暴露服務(wù)的 spring 配置有沒有加載

在服務(wù)提供者機(jī)器上測試與注冊中心的網(wǎng)絡(luò)是否通

6) 出現(xiàn) RpcException: No provider available for remote service 異常

表示沒有可用的服務(wù)提供者,

a. 檢查連接的注冊中心是否正確

b. 到注冊中心查看相應(yīng)的服務(wù)提供者是否存在

c. 檢查服務(wù)提供者是否正常運(yùn)行

7) 出現(xiàn)” 消息發(fā)送失敗” 異常

通常是接口方法的傳入傳出參數(shù)未實(shí)現(xiàn) Serializable 接口访圃。

14厨幻、dubbo 和 dubbox 之間的區(qū)別?

答:dubbox 是當(dāng)當(dāng)網(wǎng)基于 dubbo 上做了一些擴(kuò)展腿时,如加了服務(wù)可 restful 調(diào)用况脆,更新了開源組件等。

15批糟、你還了解別的分布式框架嗎格了?

答:別的還有 spring 的 spring cloud,facebook 的 thrift跃赚,twitter 的 finagle 等笆搓。

16、Dubbo 支持哪些協(xié)議纬傲,每種協(xié)議的應(yīng)用場景满败,優(yōu)缺點(diǎn)?

dubbo: 單一長連接和 NIO 異步通訊叹括,適合大并發(fā)小數(shù)據(jù)量的服務(wù)調(diào)用算墨,以及消費(fèi)者遠(yuǎn)大于提供者。傳輸協(xié)議 TCP汁雷,異步净嘀,Hessian 序列化报咳;

rmi: 采用 JDK 標(biāo)準(zhǔn)的 rmi 協(xié)議實(shí)現(xiàn),傳輸參數(shù)和返回參數(shù)對象需要實(shí)現(xiàn) Serializable 接口挖藏,使用 java 標(biāo)準(zhǔn)序列化機(jī)制暑刃,使用阻塞式短連接,傳輸數(shù)據(jù)包大小混合膜眠,消費(fèi)者和提供者個(gè)數(shù)差不多岩臣,可傳文件,傳輸協(xié)議 TCP宵膨。 多個(gè)短連接架谎,TCP 協(xié)議傳輸,同步傳輸辟躏,適用常規(guī)的遠(yuǎn)程服務(wù)調(diào)用和 rmi 互操作谷扣。在依賴低版本的 Common-Collections 包,java 序列化存在安全漏洞捎琐;

webservice:基于 WebService 的遠(yuǎn)程調(diào)用協(xié)議会涎,集成 CXF 實(shí)現(xiàn),提供和原生 WebService 的互操作野哭。多個(gè)短連接在塔,基于 HTTP 傳輸,同步傳輸拨黔,適用系統(tǒng)集成和跨語言調(diào)用蛔溃;http: 基于 Http 表單提交的遠(yuǎn)程調(diào)用協(xié)議,使用 Spring 的 HttpInvoke 實(shí)現(xiàn)篱蝇。多個(gè)短連接贺待,傳輸協(xié)議 HTTP,傳入?yún)?shù)大小混合零截,提供者個(gè)數(shù)多于消費(fèi)者麸塞,需要給應(yīng)用程序和瀏覽器 JS 調(diào)用; hessian: 集成 Hessian 服務(wù)涧衙,基于 HTTP 通訊哪工,采用 Servlet 暴露服務(wù),Dubbo 內(nèi)嵌 Jetty 作為服務(wù)器時(shí)默認(rèn)實(shí)現(xiàn)弧哎,提供與 Hession 服務(wù)互操作雁比。多個(gè)短連接,同步 HTTP 傳輸撤嫩,Hessian 序列化偎捎,傳入?yún)?shù)較大,提供者大于消費(fèi)者,提供者壓力較大茴她,可傳文件寻拂;

memcache: 基于 memcached 實(shí)現(xiàn)的 RPC 協(xié)議 redis: 基于 redis 實(shí)現(xiàn)的 RPC 協(xié)議

17、Dubbo 集群的負(fù)載均衡有哪些策略

Dubbo 提供了常見的集群策略實(shí)現(xiàn)丈牢,并預(yù)擴(kuò)展點(diǎn)予以自行實(shí)現(xiàn)祭钉。

Random LoadBalance: 隨機(jī)選取提供者策略,有利于動(dòng)態(tài)調(diào)整提供者權(quán)重赡麦。截面碰撞率高朴皆,調(diào)用次數(shù)越多,分布越均勻泛粹;

RoundRobin LoadBalance: 輪循選取提供者策略,平均分布肮疗,但是存在請求累積的問題晶姊;

LeastActive LoadBalance: 最少活躍調(diào)用策略,解決慢提供者接收更少的請求伪货; ConstantHash LoadBalance: 一致性 Hash 策略们衙,使相同參數(shù)請求總是發(fā)到同一提供者,一臺機(jī)器宕機(jī)碱呼,可以基于虛擬節(jié)點(diǎn)蒙挑,分?jǐn)傊疗渌峁┱撸苊庖鹛峁┱叩膭×易儎?dòng)愚臀;

18忆蚀、服務(wù)調(diào)用超時(shí)問題怎么解決

dubbo在調(diào)用服務(wù)不成功時(shí),默認(rèn)是會重試兩次的姑裂。這樣在服務(wù)端的處理時(shí)間超過了設(shè)定的超時(shí)時(shí)間時(shí)馋袜,就會有重復(fù)請求,比如在發(fā)郵件時(shí)舶斧,可能就會發(fā)出多份重復(fù)郵件欣鳖,執(zhí)行注冊請求時(shí),就會插入多條重復(fù)的注冊數(shù)據(jù)茴厉,那么怎么解決超時(shí)問題呢泽台?如下

對于核心的服務(wù)中心,去除dubbo超時(shí)重試機(jī)制矾缓,并重新評估設(shè)置超時(shí)時(shí)間怀酷。 業(yè)務(wù)處理代碼必須放在服務(wù)端,客戶端只做參數(shù)驗(yàn)證和服務(wù)調(diào)用而账,不涉及業(yè)務(wù)流程處理 全局配置實(shí)例

image

當(dāng)然Dubbo的重試機(jī)制其實(shí)是非常好的QOS保證胰坟,它的路由機(jī)制,是會幫你把超時(shí)的請求路由到其他機(jī)器上,而不是本機(jī)嘗試笔横,所以 dubbo的重試機(jī)器也能一定程度的保證服務(wù)的質(zhì)量竞滓。但是請一定要綜合線上的訪問情況,給出綜合的評估吹缔。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末商佑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子厢塘,更是在濱河造成了極大的恐慌茶没,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晚碾,死亡現(xiàn)場離奇詭異抓半,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)格嘁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門笛求,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糕簿,你說我怎么就攤上這事探入。” “怎么了懂诗?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵蜂嗽,是天一觀的道長。 經(jīng)常有香客問我殃恒,道長植旧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任芋类,我火速辦了婚禮隆嗅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侯繁。我一直安慰自己胖喳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布贮竟。 她就那樣靜靜地躺著丽焊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咕别。 梳的紋絲不亂的頭發(fā)上技健,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音惰拱,去河邊找鬼雌贱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的欣孤。 我是一名探鬼主播馋没,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼降传!你這毒婦竟也來了篷朵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤婆排,失蹤者是張志新(化名)和其女友劉穎声旺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體段只,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腮猖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赞枕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缚够。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鹦赎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情误堡,我是刑警寧澤古话,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站锁施,受9級特大地震影響陪踩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悉抵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一肩狂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姥饰,春花似錦傻谁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岂座,卻和暖如春态蒂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背费什。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工钾恢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓瘩蚪,卻偏偏與公主長得像泉懦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子募舟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容