1. 程式人生 > >Dubbo的負載均衡策略及使用

Dubbo的負載均衡策略及使用

  Dubbo本是阿里巴巴開發的一款高效能的分散式服務框架,雖然沉寂了一段時間,但是仍舊難斂其鋒芒,隨著微服務架構的盛行,Dubbo重新開始了維護,並且風生水起,現已捐贈給Apache,作為一款高效能Java RPC框架,服務於開源世界的碼農們。本文就來講解一下關於Dubbo負載均衡的那些事。

  講解技術,最好的方式去從原始碼發掘要點,負載均衡的英文是LoadBalance,無出其外,Dubbo中就定義了這樣一個介面,

要想知道Dubbo實現了哪幾種負載均衡,也就是Dubbo支援哪幾種負載均衡,我們從這個LoadBalance介面的實現就可以看出:

Dubbo一共實現了四種負載均衡,下面我們一一解釋:

1、ConsistentHashLoadBalance,稱為一致性Hash,相同引數的請求總是發到同一提供者,當某一臺提供者掛時,原本發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引起劇烈變動。(一致性Hash演算法可以自行學習學習)

2、LeastActiveLoadBalance,最小活躍呼叫數,相同活躍數的隨機,活躍數指呼叫前後計數差,使慢的提供者收到更少請求,因為越慢的提供者的呼叫前後計數差會越大。

3、RandomLoadBalance,隨機,按權重設定隨機概率,在一個截面上碰撞的概率高,但呼叫量越大分佈越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。此負載均衡是Dubbo的預設配置。

4、RoundRobinLoadBalance,輪詢,按公約後的權重設定輪詢比率,存在慢的提供者累積請求的問題,比如:第二臺機器很慢,但沒掛,當請求調到第二臺時就卡在那,久而久之,所有請求都卡在調到第二臺上。

對於這些負載均衡的配置,Dubbo也是提供了及其方便的基於xml或者基於註解的配置,可以配置在類上,也可以對類中的方法單獨配置:

服務端或者客戶端服務級別配置:

方法級別的配置就是添加了method標籤:

//服務端
<dubbo:service interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>

//客戶端
<dubbo:reference interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>

對於註解,就是直接在服務的介面上配置:

此外,Dubbo還可以自定義負載均衡,也是需要實現抽象類AbstractLoadBalance,然後將實現類放入Dubbo可發現的擴充套件點即可。