日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dubbo原理和面试问题

發(fā)布時間:2023/12/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dubbo原理和面试问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天來說一說dubbo的原理,首先我們要知道dubbo到底是什么,都能提供些什么服務(wù)?

一、dubbo是什么?

dubbo是?個分布式服務(wù)框架,提供?性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)??案,以及SOA服務(wù)治理方案。說白了其實(shí)dubbo就是一個遠(yuǎn)程調(diào)用的分布式框架。

二、dubbo的核心服務(wù)是什么?

1.遠(yuǎn)程通訊: 提供對多種基于長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應(yīng)”模式的信息交換方式。

2.集群容錯: 提供基于接口方法的透明遠(yuǎn)程過程調(diào)用,包括多協(xié)議支持,以及軟負(fù)載均衡,失敗容錯,地址路由,動態(tài)配置等集群支持。

3.自動發(fā)現(xiàn): 基于注冊中心目錄服務(wù),使服務(wù)消費(fèi)方能動態(tài)的查找服務(wù)提供方,使地址透明,使服務(wù)提供方可以平滑增加或減少機(jī)器。

三、dubbo能做什么?

  • 透明化的遠(yuǎn)程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法,只需簡單配置,沒有任何API侵入。
  • 軟負(fù)載均衡及容錯機(jī)制,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器,降低成本,減少單點(diǎn)。
  • 服務(wù)自動注冊與發(fā)現(xiàn),不再需要寫死服務(wù)提供方地址,注冊中心基于接口名查詢服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者。
  • 采用spring的配置方式進(jìn)行配置,完全透明化的接入應(yīng)用,對應(yīng)用沒有任何入侵,只需要spring加載dubbo的配置就可以了。

    四、dubbo架構(gòu)圖

    我們解釋以下這個架構(gòu)圖:
    Consumer服務(wù)消費(fèi)者,Provider服務(wù)提供者。Container服務(wù)容器。消費(fèi)當(dāng)然是invoke提供者了,invoke這條實(shí)線按照圖上的說明當(dāng)然同步的意思了。但是在實(shí)際調(diào)用過程中,Provider的位置對于Consumer來說是透明的,上一次調(diào)用服務(wù)的位置(IP地址)和下一次調(diào)用服務(wù)的位置,是不確定的。這個地方就需要使用注冊中心來實(shí)現(xiàn)軟負(fù)載。
    Register
    服務(wù)提供者先啟動start,然后注冊register服務(wù)。消費(fèi)訂閱subscribe服務(wù),如果沒有訂閱到自己想獲得的服務(wù),它會不斷的嘗試訂閱。新的服務(wù)注冊到注冊中心以后,注冊中心會將這些服務(wù)通過notify到消費(fèi)者。
    Monitor
    這是一個監(jiān)控,圖中虛線表明Consumer 和Provider通過異步的方式發(fā)送消息至Monitor,Consumer和Provider會將信息存放在本地磁盤,平均1min會發(fā)送一次信息。Monitor在整個架構(gòu)中是可選的(圖中的虛線并不是可選的意思),Monitor功能需要單獨(dú)配置,不配置或者配置以后,Monitor掛掉并不會影響服務(wù)的調(diào)用。

    五、本地暴露與遠(yuǎn)程暴露的區(qū)別

    本地暴露是暴露在本機(jī)JVM中,調(diào)用本地服務(wù)不需要網(wǎng)絡(luò)通信。
    遠(yuǎn)程暴露是將ip,端口等信息暴露給遠(yuǎn)程客戶端,調(diào)用遠(yuǎn)程服務(wù)時需要網(wǎng)絡(luò)通信。

    六、什么情況下適用dubbo協(xié)議,什么時候適用rmi協(xié)議?

    Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多種協(xié)議,但是dubbo協(xié)議是官網(wǎng)推薦使用的,dubbo 缺省協(xié)議是dubbo協(xié)議,采用單一長連接和 NIO 異步通訊,適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及服務(wù)消費(fèi)者機(jī)器數(shù)遠(yuǎn)大于服務(wù)提供者機(jī)器數(shù)的情況。反之,Dubbo 缺省協(xié)議不適合傳送大數(shù)據(jù)量的服務(wù),比如傳文件,傳視頻等,除非請求量很低。RMI協(xié)議采用阻塞式(同步)短連接和 JDK 標(biāo)準(zhǔn)序列化方式。適用范圍:傳入傳出參數(shù)數(shù)據(jù)包大小混合,消費(fèi)者與提供者個數(shù)差不多,可傳文件。后面會對其他幾種協(xié)議詳細(xì)介紹,這里就不贅述了。

    七、Dubbo主要的配置項(xiàng)有哪些,作用是什么?

    provider配置

    <!-- 提供方應(yīng)用信息,用于計(jì)算依賴關(guān)系 --><dubbo:application name="hello-world-app" /><!-- 使用multicast廣播注冊中心暴露服務(wù)地址 --><dubbo:registry address="multicast://224.5.6.7:1234" /><!-- 用dubbo協(xié)議在20880端口暴露服務(wù) --><dubbo:protocol name="dubbo" port="20880" /><!-- 聲明需要暴露的服務(wù)接口 --><dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />

    consumer配置

    <!-- 消費(fèi)方應(yīng)用名,用于計(jì)算依賴關(guān)系,不是匹配條件,不要與提供方一樣 --><dubbo:application name="consumer-of-helloworld-app" /><!-- 使用multicast廣播注冊中心暴露發(fā)現(xiàn)服務(wù)地址 --><dubbo:registry address="multicast://224.5.6.7:1234" /><!-- 生成遠(yuǎn)程服務(wù)代理,可以和本地bean一樣使用demoService --><dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />

    八、Dubbo有幾種容錯機(jī)制

    什么是容錯機(jī)制?容錯機(jī)制指的是某中系統(tǒng)控制在一定范圍的一種允許或包容犯錯情況的發(fā)生,舉個簡單的例子,我們在電腦上運(yùn)行一個程序,有時候會出現(xiàn)無響應(yīng)的情況,然后系統(tǒng)回彈出一個提示框讓我們選擇,是立即結(jié)束還是繼續(xù)等待,然后根據(jù)我們的選擇執(zhí)行對應(yīng)的操作,這就是“容錯”。

    在分布式架構(gòu)下,網(wǎng)絡(luò),硬件,應(yīng)用都可以發(fā)生故障,由于各個服務(wù)之間可能存在依賴關(guān)系,如果一條鏈路中的某一個節(jié)點(diǎn)出現(xiàn)故障,將會導(dǎo)致雪崩效應(yīng)。為了減少某一個節(jié)點(diǎn)故障的影響范圍,所以我們才需要去構(gòu)建容錯服務(wù),來優(yōu)雅的處理這種中斷的響應(yīng)結(jié)果

    1.failsafe 失敗安全,可以認(rèn)為是把錯誤吞掉(記錄日志)

    2.failover(默認(rèn)) 重試其他服務(wù)器;retries(2)重試的次數(shù),默認(rèn)為2次

    3.failback 失敗后自動恢復(fù)

    4.forking forks. 設(shè)置并行數(shù)

    5.Broadcast 廣播,任意一臺報錯,則執(zhí)行的方法報錯,通過cluster方式,配置制定的容錯方案

    九、dubbo的服務(wù)降級

    降級的目的是為了保證核心服務(wù)可用

    降級可以有幾個層面的分類:自動降級,人工降級;按照功能可以分為:讀服務(wù)降級和寫服務(wù)降級;

    1.對一些非核心服務(wù)進(jìn)行人工降級,在大促之前通過降級開關(guān)關(guān)閉那些推薦內(nèi)容,評價等對主流程序沒有影響的功能

    2.故障降級,比如調(diào)用的遠(yuǎn)程服務(wù)掛了,網(wǎng)絡(luò)故障,或者RPC服務(wù)返回異常。那么可以直接降級,降級的方案比如設(shè)置默認(rèn)值,采用兜底數(shù)據(jù)(系統(tǒng)推薦的行為廣告掛了,可以提前準(zhǔn)備靜態(tài)頁面做返回)等等

    3.限流降級,在秒殺這種流量比較集中并且流量特別大的情況下,因?yàn)橥话l(fā)訪問量特別大可能導(dǎo)致系統(tǒng)支撐不了。這個時候可以采用限流來限制訪問量。當(dāng)達(dá)到閾值時,后續(xù)的請求被降級,比如進(jìn)入排隊(duì)頁面,比如跳轉(zhuǎn)到錯誤頁面(活動火爆,請稍后重試)

    Dubbo的降級方式:Mock

    實(shí)現(xiàn)步驟

    1.在client端創(chuàng)建一個testmock類,實(shí)現(xiàn)對應(yīng)的IGphello的接口(需要對哪個接口進(jìn)行mock,就實(shí)現(xiàn)哪個)名稱必須以mock結(jié)尾

    2.在client端的xml配置文件中,添加如下配置,增加一個mock屬性指向創(chuàng)建的testmock

    3.模擬錯誤(設(shè)置timeout)模擬超時異常,運(yùn)行測試代碼即可訪問到testmock這個類,當(dāng)服務(wù)端故障解除以后,調(diào)用過程將恢復(fù)正常

    十、dubbo的優(yōu)先級配置

    配置優(yōu)先級別

    1.以timeout為例,顯示了配置的查找順序,其他retries,loadbalance等類似。

    (1)方法級優(yōu)先,接口級次之,全局配置在次之

    (2)如果級別一樣,則消費(fèi)方優(yōu)先,提供方次之

    (3)其中,服務(wù)提供方配置,通過URL經(jīng)由注冊中心傳遞給消費(fèi)方

    2.建議由服務(wù)提供方設(shè)置超時,因?yàn)橐粋€方法需要執(zhí)行多長時間,服務(wù)提供方更清楚,如果一個消費(fèi)方同時引用多個服務(wù),就不需要關(guān)心每個服務(wù)的超時設(shè)置。

    總結(jié)

    以上是生活随笔為你收集整理的Dubbo原理和面试问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。