1、Dubbo是什麼?
Dubbo是阿里巴巴開源的基於 Java 的高性能 RPC(一種遠程調用) 分佈式服務框架(SOA),致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。
2、爲何要用Dubbo?
由於是阿里開源項目,國內不少互聯網公司都在用,已經通過不少線上考驗。內部使用了 Netty、Zookeeper,保證了高性能高可用性。前端
一、使用Dubbo能夠將核心業務抽取出來,做爲獨立的服務,逐漸造成穩定的服務中心,可用於提升業務複用 靈活擴展,使前端應用能更快速的響應多變的市場需求。 二、分佈式架構能夠承受更大規模的併發流量。
3、Dubbo 和 Spring Cloud 有什麼區別?java
一、通訊方式不一樣:Dubbo 使用的是 RPC 通訊,而Spring Cloud 使用的是HTTP RESTFul 方式。 二、組成不同: dubbo的服務註冊中心爲Zookeerper,服務監控中心爲dubbo-monitor,無消息總線,服務跟蹤、批量任務等組件; spring-cloud的服務註冊中心爲spring-cloud netflix enruka,服務監控中心爲spring-boot admin,有消息總線,數據流、服務跟蹤、批量任務等組件;
4、Dubbo須要 Web 容器嗎?
不須要,若是硬要用Web 容器,只會增長複雜性,也浪費資源。
5、Dubbo內置了哪幾種服務容器?web
三種服務容器: 一、Spring Container 二、Jetty Container 三、Log4j Container
Dubbo 的服務容器只是一個簡單的 Main 方法,並加載一個簡單的 Spring 容器,用於暴露服務。
6、dubbo都支持什麼協議,推薦用哪一種?redis
一、dubbo://(推薦)二、http://三、rest://四、redis://五、memcached://
7、Dubbo裏面有哪幾種節點角色?算法
一、provide:暴露服務的服務提供方 二、consumer:調用遠程服務的服務消費方 三、registry:服務註冊於發現的註冊中心 四、monitor:統計服務調用次數和調用時間的監控中心 五、container:服務運行容器
8、dubbo服務註冊與發現的流程圖spring
dubbo服務註冊與發現的流程圖swift
9、Dubbo默認使用什麼註冊中心,還有別的選擇嗎?
推薦使用zookeeper做爲註冊中心,還有redis、multicast、simple註冊中心。
10、Dubbo 核心的配置有哪些?bash
Dubbo 核心的配置多線程
11、在 Provider 上能夠配置的 Consumer 端的屬性有哪些?架構
一、timeout:方法調用超時 二、retries:失敗重試次數,默認重試 2 次 三、loadbalance:負載均衡算法,默認隨機 四、actives 消費者端,最大併發調用限制
12、Dubbo有哪幾種負載均衡策略,默認是哪一種?
一、random loadbalance:安權重設置隨機機率(默認); 二、roundrobin loadbalance:輪尋,按照公約後權重設置輪訓比例; 三、lastactive loadbalance:最少活躍調用數,若相同則隨機; 四、consistenthash loadbalance:一致性hash,相同參數的請求老是發送到同一提供者。
十3、Dubbo啓動時若是依賴的服務不可用會怎樣?
Dubbo缺省會在啓動時檢查依賴的服務是否可用,不可用時會拋出異常,阻止 Spring 初始化完成,默認
check="true",能夠經過 check="false" 關閉檢查。
十4、Dubbo推薦使用什麼序列化框架,你知道的還有哪些?
推薦使用Hessian序列化,還有Duddo、FastJson、Java自帶序列化;
十5、Dubbo默認使用的是什麼通訊框架,還有別的選擇嗎?
Dubbo 默認使用 Netty 框架,也是推薦的選擇,另外內容還集成有Mina、Grizzly。
十6、Dubbo有哪幾種集羣容錯方案,默認是哪一種?
Dubbo集羣容錯方案
十7、服務提供者能實現失效踢出是什麼原理?
服務失效踢出基於zookeeper的臨時節點原理。
十8、Dubbo服務之間的調用是阻塞的嗎?
默認是同步等待結果阻塞的,支持異步調用。 Dubbo 是基於 NIO 的非阻塞實現並行調用,客戶端不須要啓動多線程便可完成並行調用多個遠程服務,相對 多線程開銷較小,異步調用會返回一個 Future 對象。
Dubbo暫時不支持分佈式事務。
十9、Dubbo的管理控制檯能作什麼?
管理控制檯主要包含:路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡,等管理功能。 注:dubbo源碼中的dubbo-admin模塊打成war包,發佈運行便可獲得dubbo控制管理界面。
二10、Dubbo 服務暴露的過程
Dubbo 會在 Spring 實例化完 bean 以後,在刷新容器最後一步發佈 ContextRefreshEvent 事件的時候,通知 實現了 ApplicationListener 的 ServiceBean 類進行回調 onApplicationEvent 事件方法,Dubbo 會在這個方法 中調用 ServiceBean 父類 ServiceConfig 的 export 方法,而該方法真正實現了服務的(異步或者非異步)發 布。
二11、當一個服務接口有多種實現時怎麼作?
當一個接口有多種實現時,能夠用 group 屬性來分組,服務提供方和消費方都指定同一個 group 便可。
二11、服務上線怎麼兼容舊版本?
能夠用版本號(version)過渡,多個不一樣版本的服務註冊到註冊中心,版本號不一樣的服務相互間不引用。這
個和服務分組的概念有一點相似。
二12、Dubbo 和 Dubbox 有什麼區別?
Dubbox 是繼 Dubbo 中止維護後,噹噹網基於 Dubbo 作的一個擴展項目,如加了服務可 Restful 調用,更新了開源組件等。
二十3、你以爲用 Dubbo 好仍是 Spring Cloud 好?
擴展性的問題,沒有好壞,只有適合不適合,我更傾向於使用 Dubbo, Spring Cloud 版本升級太快,組件更新替換太頻繁,配置太繁瑣。
二十4、出現調用超時com.alibaba.dubbo.remoting.TimeoutException異常怎麼辦?
一般是業務處理太慢,可在服務提供方執行:jstack PID > jstack.log 分析線程都卡在哪一個方法調用上,這裏就是慢的緣由。 若是不能調優性能,請將timeout設大。
二十5、出現java.util.concurrent.RejectedExecutionException或者Thread pool exhausted怎麼辦?
一、RejectedExecutionException表示線程池已經達到最大值,而且沒有空閒連,拒絕執行了一些任務。 二、Thread pool exhausted一般是min和max不同大時,表示當前已建立的鏈接用完,進行了一次擴充,建立了新線程,但不影響運行。 緣由多是鏈接池不夠用,請調整dubbo.properites中的:// 設成同樣大,減小線程池收縮開銷 dubbo.service.min.thread.pool.size=200 dubbo.service.max.thread.pool.size=200
連接:https://www.jianshu.com/p/3090d63e9cb3來源:簡書