Dubbo原理和面试问题
今天來說一說dubbo的原理,首先我們要知道dubbo到底是什么,都能提供些什么服務?
一、dubbo是什么?
dubbo是?個分布式服務框架,提供?性能和透明化的RPC遠程服務調??案,以及SOA服務治理方案。說白了其實dubbo就是一個遠程調用的分布式框架。
二、dubbo的核心服務是什么?
1.遠程通訊: 提供對多種基于長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
2.集群容錯: 提供基于接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持。
3.自動發現: 基于注冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。
三、dubbo能做什么?
采用spring的配置方式進行配置,完全透明化的接入應用,對應用沒有任何入侵,只需要spring加載dubbo的配置就可以了。
四、dubbo架構圖
我們解釋以下這個架構圖:
Consumer服務消費者,Provider服務提供者。Container服務容器。消費當然是invoke提供者了,invoke這條實線按照圖上的說明當然同步的意思了。但是在實際調用過程中,Provider的位置對于Consumer來說是透明的,上一次調用服務的位置(IP地址)和下一次調用服務的位置,是不確定的。這個地方就需要使用注冊中心來實現軟負載。
Register
服務提供者先啟動start,然后注冊register服務。消費訂閱subscribe服務,如果沒有訂閱到自己想獲得的服務,它會不斷的嘗試訂閱。新的服務注冊到注冊中心以后,注冊中心會將這些服務通過notify到消費者。
Monitor
這是一個監控,圖中虛線表明Consumer 和Provider通過異步的方式發送消息至Monitor,Consumer和Provider會將信息存放在本地磁盤,平均1min會發送一次信息。Monitor在整個架構中是可選的(圖中的虛線并不是可選的意思),Monitor功能需要單獨配置,不配置或者配置以后,Monitor掛掉并不會影響服務的調用。
五、本地暴露與遠程暴露的區別
本地暴露是暴露在本機JVM中,調用本地服務不需要網絡通信。
遠程暴露是將ip,端口等信息暴露給遠程客戶端,調用遠程服務時需要網絡通信。
六、什么情況下適用dubbo協議,什么時候適用rmi協議?
Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多種協議,但是dubbo協議是官網推薦使用的,dubbo 缺省協議是dubbo協議,采用單一長連接和 NIO 異步通訊,適合于小數據量大并發的服務調用,以及服務消費者機器數遠大于服務提供者機器數的情況。反之,Dubbo 缺省協議不適合傳送大數據量的服務,比如傳文件,傳視頻等,除非請求量很低。RMI協議采用阻塞式(同步)短連接和 JDK 標準序列化方式。適用范圍:傳入傳出參數數據包大小混合,消費者與提供者個數差不多,可傳文件。后面會對其他幾種協議詳細介紹,這里就不贅述了。
七、Dubbo主要的配置項有哪些,作用是什么?
provider配置
<!-- 提供方應用信息,用于計算依賴關系 --><dubbo:application name="hello-world-app" /><!-- 使用multicast廣播注冊中心暴露服務地址 --><dubbo:registry address="multicast://224.5.6.7:1234" /><!-- 用dubbo協議在20880端口暴露服務 --><dubbo:protocol name="dubbo" port="20880" /><!-- 聲明需要暴露的服務接口 --><dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />consumer配置
<!-- 消費方應用名,用于計算依賴關系,不是匹配條件,不要與提供方一樣 --><dubbo:application name="consumer-of-helloworld-app" /><!-- 使用multicast廣播注冊中心暴露發現服務地址 --><dubbo:registry address="multicast://224.5.6.7:1234" /><!-- 生成遠程服務代理,可以和本地bean一樣使用demoService --><dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />八、Dubbo有幾種容錯機制
什么是容錯機制?容錯機制指的是某中系統控制在一定范圍的一種允許或包容犯錯情況的發生,舉個簡單的例子,我們在電腦上運行一個程序,有時候會出現無響應的情況,然后系統回彈出一個提示框讓我們選擇,是立即結束還是繼續等待,然后根據我們的選擇執行對應的操作,這就是“容錯”。
在分布式架構下,網絡,硬件,應用都可以發生故障,由于各個服務之間可能存在依賴關系,如果一條鏈路中的某一個節點出現故障,將會導致雪崩效應。為了減少某一個節點故障的影響范圍,所以我們才需要去構建容錯服務,來優雅的處理這種中斷的響應結果
1.failsafe 失敗安全,可以認為是把錯誤吞掉(記錄日志)
2.failover(默認) 重試其他服務器;retries(2)重試的次數,默認為2次
3.failback 失敗后自動恢復
4.forking forks. 設置并行數
5.Broadcast 廣播,任意一臺報錯,則執行的方法報錯,通過cluster方式,配置制定的容錯方案
九、dubbo的服務降級
降級的目的是為了保證核心服務可用
降級可以有幾個層面的分類:自動降級,人工降級;按照功能可以分為:讀服務降級和寫服務降級;
1.對一些非核心服務進行人工降級,在大促之前通過降級開關關閉那些推薦內容,評價等對主流程序沒有影響的功能
2.故障降級,比如調用的遠程服務掛了,網絡故障,或者RPC服務返回異常。那么可以直接降級,降級的方案比如設置默認值,采用兜底數據(系統推薦的行為廣告掛了,可以提前準備靜態頁面做返回)等等
3.限流降級,在秒殺這種流量比較集中并且流量特別大的情況下,因為突發訪問量特別大可能導致系統支撐不了。這個時候可以采用限流來限制訪問量。當達到閾值時,后續的請求被降級,比如進入排隊頁面,比如跳轉到錯誤頁面(活動火爆,請稍后重試)
Dubbo的降級方式:Mock
實現步驟
1.在client端創建一個testmock類,實現對應的IGphello的接口(需要對哪個接口進行mock,就實現哪個)名稱必須以mock結尾
2.在client端的xml配置文件中,添加如下配置,增加一個mock屬性指向創建的testmock
3.模擬錯誤(設置timeout)模擬超時異常,運行測試代碼即可訪問到testmock這個類,當服務端故障解除以后,調用過程將恢復正常
十、dubbo的優先級配置
配置優先級別
1.以timeout為例,顯示了配置的查找順序,其他retries,loadbalance等類似。
(1)方法級優先,接口級次之,全局配置在次之
(2)如果級別一樣,則消費方優先,提供方次之
(3)其中,服務提供方配置,通過URL經由注冊中心傳遞給消費方
2.建議由服務提供方設置超時,因為一個方法需要執行多長時間,服務提供方更清楚,如果一個消費方同時引用多個服務,就不需要關心每個服務的超時設置。
總結
以上是生活随笔為你收集整理的Dubbo原理和面试问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java马士兵笔记_马士兵java教程笔
- 下一篇: 服务器开机显示0x000000ca,使用