一、服務上線怎麼不影響舊版本?
採用多版本開發(dubbo:service配置version),不影響舊版本。
二、Dubbo如何做負載均衡?
<service>
<reference>
Dubbo內置了4種負載均衡策略:
1)RandomLoadBalance隨機負載均衡:是Dubbo的默認負載均衡策略。
2)RoundRobinLoadBalance輪詢負載均衡:輪詢依次。
3)LeastActiveLoadBalance最少活躍調用數:相同活躍數的隨機。活躍數指調用前後計數差。使慢的 Provider 收到更少請求,因為越慢的 Provider 的調用前後計數差會越大。
4)ConsistentHashLoadBalance一致性哈希負載均衡:相同參數的請求總是落在同一臺機器上。
二、Dubbo如何做限流降級?
1)dubbo提供了mock配置,可以很好的實現dubbo服務降級
<reference>
2)整合Sentinel
三、Dubbo如何優雅停機?
線上服務不要輕易的kill -9,可進行kill觸發應用的鉤子程序,做相關的資源清理,如果一直關閉不掉,最終可以通過kill -9執行。
Dubbo 可以通過 JDK 的 ShutdownHook 來完成優雅停機的,使用Kill pid命令幹掉進程。
四、Dubbo如何實現異步調用的?
1)api注入時添加異步調用標示
@Reference(interfaceClass=xxx.class, async-true)
2)啟動類開啟異步調用
@EnableAsycn
3)異步調用的接口添加異步調用代碼
RpcContext.getContext.future()
五、Dubbo 和 Spring Cloud 有什麼區別?
Dubbo底層是使用Netty的NIO框架,是基於TCP協議傳輸的,配合以Hession序列化完成RPC通信。
SpringCloud是基於Http協議+rest接口調用遠程過程的通信。
Http請求會有更大的報文,佔的帶寬也會更多。
REST相比RPC更為靈活,不存在代碼級別的強依賴。
DubboSpringCloud服務註冊中心Zookeeper Spring Cloud Netfix Eureka服務調用方式RPC REST API服務監控Dubbo-monitorSpring Boot Admin熔斷器不完善Spring Cloud Netflix Hystrix服務網關無Spring Cloud Netflix Zuul分佈式配置無Spring Cloud Config服務跟蹤無Spring Cloud Sleuth數據流無Spring Cloud Stream批量任務無Spring Cloud Task信息總線無Spring Cloud Bus
六、dubbo都支持什麼協議,推薦用哪種?
dubbo(推薦):單一長連接、NIO 異步通訊,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況
hessian:短連接,http,適合於頁面傳輸,文件傳輸,或與原生hessian服務互操作
Http:適用於需同時給應用程序和瀏覽器 JS 使用的服務
WebService:適用於系統集成,跨語言調用
RMI 協議:適用於常規遠程服務方法調用,與原生RMI服務互操作
七、Dubbo需要 Web 容器嗎?
不需要,dubbo服務容器是一個standalone的啟動程序,因為後臺服務不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加載服務提供方,增加複雜性,也浪費資源。
八、Dubbo內置了哪幾種服務容器?
Spring Container Jetty Container Log4j Container
九、Dubbo裡面有哪些角色?
registry:註冊中心
consumer:消費者
provider:服務提供者
container:容器
monitor:監控
十、Dubbo默認使用什麼註冊中心,還有別的選擇嗎?
zookeeper,還有 Redis、Multicast、Simple 註冊中心,但不推薦
十一、在 Provider 上可以配置的 Consumer 端的屬性有哪些?
1)timeout:調用超時
2)retries:失敗重試次數(默認重試 2 次 )
3)loadbalance:負載均衡算法,默認隨機
4)actives 消費者端,最大併發調用限制
十二、Dubbo啟動時如果依賴的服務不可用會怎樣?
Dubbo 缺省會在啟動時檢查依賴的服務是否可用,不可用時會拋出異常,阻止 Spring 初始化完成,默認 check="true",可以通過 check="false" 關閉檢查。
十三、Dubbo推薦使用什麼序列化框架,你知道的還有哪些?
推薦使用Hessian,還有Duddo、FastJson、Java自帶序列化。
十四、Dubbo默認使用的是什麼通信框架,還有別的選擇嗎?
Dubbo 默認使用 Netty 框架(推薦),另外內容還集成有Mina、Grizzly
十五、Dubbo有哪幾種集群容錯方案,默認是哪種?
1)Failover Cluster默認
失敗自動切換,當出現失敗,重試其它服務器(retries 重試次數)。通常用於讀操作,但重試會帶來更長延遲。
2)Failfast Cluster
快速失敗,只發起一次調用,失敗立即報錯,通常用於寫操作。
3)Failsafe Cluster
失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作。
4)Failback Cluster
失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於消息通知操作。
5)Forking Cluster
並行調用多個服務器,只要一個成功即返回。通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。可通過 forks="2" 來設置最大並行數。
6)Broadcast Cluster
廣播調用所有提供者,逐個調用,任意一臺報錯則報錯 [2]。通常用於通知所有提供者更新緩存或日誌等本地資源信息。
十六、Dubbo可以對結果進行緩存嗎?
<reference>
十七、Dubbo服務之間的調用是阻塞的嗎?
默認是阻塞的,可以異步調用。
十八、Dubbo的管理控制檯能做什麼?
路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡,等管理功能。
十九、說說 Dubbo 服務暴露的過程
Dubbo 會在 Spring 實例化完 bean 之後,在刷新容器最後一步發佈 ContextRefreshEvent 事件的時候,通知實現了 ApplicationListener 的 ServiceBean 類進行回調 onApplicationEvent 事件方法。Dubbo 會在這個方法中調用 ServiceBean 父類 ServiceConfig 的 export 方法,而該方法真正實現了服務的發佈。
二十、同一個服務多個註冊的情況下可以直連某一個服務嗎?
可以通過修改配置點對點直連,也可以通過 telnet 直接某個服務。
閱讀更多 加班狗的微博 的文章