3.dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?
作者:中華石杉
面試題
dubbo 負(fù)載均衡策略和集群容錯(cuò)策略都有哪些?動(dòng)態(tài)代理策略呢?
面試官心理分析
繼續(xù)深問(wèn)吧,這些都是用 dubbo 必須知道的一些東西,你得知道基本原理,知道序列化是什么協(xié)議,還得知道具體用 dubbo 的時(shí)候,如何負(fù)載均衡,如何高可用,如何動(dòng)態(tài)代理。
說(shuō)白了,就是看你對(duì) dubbo 熟悉不熟悉:
- dubbo 工作原理:服務(wù)注冊(cè)、注冊(cè)中心、消費(fèi)者、代理通信、負(fù)載均衡;
- 網(wǎng)絡(luò)通信、序列化:dubbo 協(xié)議、長(zhǎng)連接、NIO、hessian 序列化協(xié)議;
- 負(fù)載均衡策略、集群容錯(cuò)策略、動(dòng)態(tài)代理策略:dubbo 跑起來(lái)的時(shí)候一些功能是如何運(yùn)轉(zhuǎn)的?怎么做負(fù)載均衡?怎么做集群容錯(cuò)?怎么生成動(dòng)態(tài)代理?
- dubbo SPI 機(jī)制:你了解不了解 dubbo 的 SPI 機(jī)制?如何基于 SPI 機(jī)制對(duì) dubbo 進(jìn)行擴(kuò)展?
面試題剖析
dubbo 負(fù)載均衡策略
random loadbalance
默認(rèn)情況下,dubbo 是 random load balance ,即隨機(jī)調(diào)用實(shí)現(xiàn)負(fù)載均衡,可以對(duì) provider 不同實(shí)例設(shè)置不同的權(quán)重,會(huì)按照權(quán)重來(lái)負(fù)載均衡,權(quán)重越大分配流量越高,一般就用這個(gè)默認(rèn)的就可以了。
roundrobin loadbalance
這個(gè)的話默認(rèn)就是均勻地將流量打到各個(gè)機(jī)器上去,但是如果各個(gè)機(jī)器的性能不一樣,容易導(dǎo)致性能差的機(jī)器負(fù)載過(guò)高。所以此時(shí)需要調(diào)整權(quán)重,讓性能差的機(jī)器承載權(quán)重小一些,流量少一些。
舉個(gè)栗子。
跟運(yùn)維同學(xué)申請(qǐng)機(jī)器,有的時(shí)候,我們運(yùn)氣好,正好公司資源比較充足,剛剛有一批熱氣騰騰、剛剛做好的虛擬機(jī)新鮮出爐,配置都比較高:8 核 + 16G 機(jī)器,申請(qǐng)到 2 臺(tái)。過(guò)了一段時(shí)間,我們感覺(jué) 2 臺(tái)機(jī)器有點(diǎn)不太夠,我就去找運(yùn)維同學(xué)說(shuō),“哥兒們,你能不能再給我一臺(tái)機(jī)器”,但是這時(shí)只剩下一臺(tái) 4 核 + 8G 的機(jī)器。我要還是得要。
這個(gè)時(shí)候,可以給兩臺(tái) 8 核 16G 的機(jī)器設(shè)置權(quán)重 4,給剩余 1 臺(tái) 4 核 8G 的機(jī)器設(shè)置權(quán)重 2。
leastactive loadbalance
這個(gè)就是自動(dòng)感知一下,如果某個(gè)機(jī)器性能越差,那么接收的請(qǐng)求越少,越不活躍,此時(shí)就會(huì)給不活躍的性能差的機(jī)器更少的請(qǐng)求。
consistanthash loadbalance
一致性 Hash 算法,相同參數(shù)的請(qǐng)求一定分發(fā)到一個(gè) provider 上去,provider 掛掉的時(shí)候,會(huì)基于虛擬節(jié)點(diǎn)均勻分配剩余的流量,抖動(dòng)不會(huì)太大。如果你需要的不是隨機(jī)負(fù)載均衡,是要一類請(qǐng)求都到一個(gè)節(jié)點(diǎn),那就走這個(gè)一致性 Hash 策略。
dubbo 集群容錯(cuò)策略
failover cluster 模式
失敗自動(dòng)切換,自動(dòng)重試其他機(jī)器,默認(rèn)就是這個(gè),常見(jiàn)于讀操作。(失敗重試其它機(jī)器)
可以通過(guò)以下幾種方式配置重試次數(shù):
<dubbo:service retries="2" />
或者
<dubbo:reference retries="2" />
或者
<dubbo:reference>
<dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
failfast cluster 模式
一次調(diào)用失敗就立即失敗,常見(jiàn)于非冪等性的寫(xiě)操作,比如新增一條記錄(調(diào)用失敗就立即失敗)
failsafe cluster 模式
出現(xiàn)異常時(shí)忽略掉,常用于不重要的接口調(diào)用,比如記錄日志。
配置示例如下:
<dubbo:service cluster="failsafe" />
或者
<dubbo:reference cluster="failsafe" />
failback cluster 模式
失敗了后臺(tái)自動(dòng)記錄請(qǐng)求,然后定時(shí)重發(fā),比較適合于寫(xiě)消息隊(duì)列這種。
forking cluster 模式
并行調(diào)用多個(gè) provider,只要一個(gè)成功就立即返回。常用于實(shí)時(shí)性要求比較高的讀操作,但是會(huì)浪費(fèi)更多的服務(wù)資源,可通過(guò) forks="2" 來(lái)設(shè)置最大并行數(shù)。
broadcacst cluster
逐個(gè)調(diào)用所有的 provider。任何一個(gè) provider 出錯(cuò)則報(bào)錯(cuò)(從2.1.0 版本開(kāi)始支持)。通常用于通知所有提供者更新緩存或日志等本地資源信息。
dubbo動(dòng)態(tài)代理策略
默認(rèn)使用 javassist 動(dòng)態(tài)字節(jié)碼生成,創(chuàng)建代理類。但是可以通過(guò) spi 擴(kuò)展機(jī)制配置自己的動(dòng)態(tài)代理策略。
總結(jié)
以上是生活随笔為你收集整理的3.dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Unity如何更改精灵中心点
- 下一篇: Quartz安装包中的15个exampl