W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Dubbo 提供的集群負載均衡策略
在集群負載均衡時,Dubbo 提供了多種均衡策略,缺省為 random 隨機調(diào)用。
具體實現(xiàn)上,Dubbo 提供的是客戶端負載均衡,即由 Consumer 通過負載均衡算法得出需要將請求提交到哪個 Provider 實例。
可以自行擴展負載均衡策略,參見:負載均衡擴展
目前 Dubbo 內(nèi)置了如下負載均衡算法,用戶可直接配置使用:
算法 | 特性 | 備注 |
---|---|---|
RandomLoadBalance | 加權(quán)隨機 | 默認算法,默認權(quán)重相同 |
RoundRobinLoadBalance | 加權(quán)輪詢 | 借鑒于 Nginx 的平滑加權(quán)輪詢算法,默認權(quán)重相同, |
LeastActiveLoadBalance | 最少活躍優(yōu)先 + 加權(quán)隨機 | 背后是能者多勞的思想 |
ShortestResponseLoadBalance | 最短響應(yīng)優(yōu)先 + 加權(quán)隨機 | 更加關(guān)注響應(yīng)速度 |
ConsistentHashLoadBalance | 一致性 Hash | 確定的入?yún)?,確定的提供者,適用于有狀態(tài)請求 |
加權(quán)輪詢過程過程中,如果某節(jié)點權(quán)重過大,會存在某段時間內(nèi)調(diào)用過于集中的問題。例如 ABC 三節(jié)點有如下權(quán)重:?{A: 3, B: 2, C: 1}
?那么按照最原始的輪詢算法,調(diào)用過程將變成:?A A A B B C
?
對此,Dubbo 借鑒 Nginx 的平滑加權(quán)輪詢算法,對此做了優(yōu)化,調(diào)用過程可抽象成下表:
輪前加和權(quán)重 | 本輪勝者 | 合計權(quán)重 | 輪后權(quán)重(勝者減去合計權(quán)重) |
---|---|---|---|
起始輪 | \ | \ | A(0), B(0), C(0) |
A(3), B(2), C(1) | A | 6 | A(-3), B(2), C(1) |
A(0), B(4), C(2) | B | 6 | A(0), B(-2), C(2) |
A(3), B(0), C(3) | A | 6 | A(-3), B(0), C(3) |
A(0), B(2), C(4) | C | 6 | A(0), B(2), C(-2) |
A(3), B(4), C(-1) | B | 6 | A(3), B(-2), C(-1) |
A(6), B(0), C(0) | A | 6 | A(0), B(0), C(0) |
我們發(fā)現(xiàn)經(jīng)過合計權(quán)重(3+2+1)輪次后,循環(huán)又回到了起點,整個過程中節(jié)點流量是平滑的,且哪怕在很短的時間周期內(nèi),概率都是按期望分布的。
如果用戶有加權(quán)輪詢的需求,可放心使用該算法。
這里的響應(yīng)時間 = 某個提供者在窗口時間內(nèi)的平均響應(yīng)時間,窗口時間默認是 30s。
<dubbo:parameter key="hash.arguments" value="0,1" />
?<dubbo:parameter key="hash.nodes" value="320" />
?<dubbo:service interface="..." loadbalance="roundrobin" />
<dubbo:reference interface="..." loadbalance="roundrobin" />
<dubbo:service interface="...">
<dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>
<dubbo:reference interface="...">
<dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: