dubbo调用失败策略_面试官:dubbo负载均衡策略,集群容错策略,动态代理策略有哪些...
面試官心理分析
繼續(xù)深問吧,這些都是用 dubbo 必須知道的一些東西,你得知道基本原理,知道序列化是什么協(xié)議,還得知道具體用 dubbo 的時候,如何負載均衡,如何高可用,如何動態(tài)代理。
說白了,就是看你對 dubbo 熟悉不熟悉:
- dubbo 工作原理:服務注冊、注冊中心、消費者、代理通信、負載均衡;
- 網(wǎng)絡通信、序列化:dubbo 協(xié)議、長連接、NIO、hessian 序列化協(xié)議;
- 負載均衡策略、集群容錯策略、動態(tài)代理策略:dubbo 跑起來的時候一些功能是如何運轉(zhuǎn)的?怎么做負載均衡?怎么做集群容錯?怎么生成動態(tài)代理?
- dubbo SPI 機制:你了解不了解 dubbo 的 SPI 機制?如何基于 SPI 機制對 dubbo 進行擴展?
面試題剖析
dubbo 負載均衡策略
RandomLoadBalance
默認情況下,dubbo 是 RandomLoadBalance ,即隨機調(diào)用實現(xiàn)負載均衡,可以對 provider 不同實例設(shè)置不同的權(quán)重,會按照權(quán)重來負載均衡,權(quán)重越大分配流量越高,一般就用這個默認的就可以了。
RoundRobinLoadBalance
這個的話默認就是均勻地將流量打到各個機器上去,但是如果各個機器的性能不一樣,容易導致性能差的機器負載過高。所以此時需要調(diào)整權(quán)重,讓性能差的機器承載權(quán)重小一些,流量少一些。
舉個栗子。
跟運維同學申請機器,有的時候,我們運氣好,正好公司資源比較充足,剛剛有一批熱氣騰騰、剛剛做好的虛擬機新鮮出爐,配置都比較高:8 核 + 16G 機器,申請到 2 臺。過了一段時間,我們感覺 2 臺機器有點不太夠,我就去找運維同學說,“哥兒們,你能不能再給我一臺機器”,但是這時只剩下一臺 4 核 + 8G 的機器。我要還是得要。
這個時候,可以給兩臺 8 核 16G 的機器設(shè)置權(quán)重 4,給剩余 1 臺 4 核 8G 的機器設(shè)置權(quán)重 2。
LeastActiveLoadBalance
這個就是自動感知一下,如果某個機器性能越差,那么接收的請求越少,越不活躍,此時就會給不活躍的性能差的機器更少的請求。
ConsistentHashLoadBalance
一致性 Hash 算法,相同參數(shù)的請求一定分發(fā)到一個 provider 上去,provider 掛掉的時候,會基于虛擬節(jié)點均勻分配剩余的流量,抖動不會太大。如果你需要的不是隨機負載均衡,是要一類請求都到一個節(jié)點,那就走這個一致性 Hash 策略。
關(guān)于 dubbo 負載均衡策略更加詳細的描述,可以查看官網(wǎng) http://dubbo.apache.org/zh-cn/docs/source_code_guide/loadbalance.html 。
dubbo 集群容錯策略
Failover Cluster 模式
失敗自動切換,自動重試其他機器,默認就是這個,常見于讀操作。(失敗重試其它機器)
可以通過以下幾種方式配置重試次數(shù):
或者
或者
Failfast Cluster 模式
一次調(diào)用失敗就立即失敗,常見于非冪等性的寫操作,比如新增一條記錄(調(diào)用失敗就立即失敗)
Failsafe Cluster 模式
出現(xiàn)異常時忽略掉,常用于不重要的接口調(diào)用,比如記錄日志。
配置示例如下:
或者
Failback Cluster 模式
失敗了后臺自動記錄請求,然后定時重發(fā),比較適合于寫消息隊列這種。
Forking Cluster 模式
并行調(diào)用多個 provider,只要一個成功就立即返回。常用于實時性要求比較高的讀操作,但是會浪費更多的服務資源,可通過 forks="2" 來設(shè)置最大并行數(shù)。
Broadcast Cluster 模式
逐個調(diào)用所有的 provider。任何一個 provider 出錯則報錯(從 2.1.0 版本開始支持)。通常用于通知所有提供者更新緩存或日志等本地資源信息。
關(guān)于 dubbo 集群容錯策略更加詳細的描述,可以查看官網(wǎng) http://dubbo.apache.org/zh-cn/docs/source_code_guide/cluster.html 。
dubbo 動態(tài)代理策略
默認使用 javassist 動態(tài)字節(jié)碼生成,創(chuàng)建代理類。但是可以通過 spi 擴展機制配置自己的動態(tài)代理策略。
原文:https://github.com/doocs/advanced-java/blob/master/docs/distributed-system/dubbo-load-balancing.md
總結(jié)
以上是生活随笔為你收集整理的dubbo调用失败策略_面试官:dubbo负载均衡策略,集群容错策略,动态代理策略有哪些...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《最后的荣光》荀彧名将图鉴
- 下一篇: 奇安信cdn配置教程_PicGo+jsD