天天看點

Ribbon負載均衡政策配置

在這裡吐槽一句:網上很多文章真是神坑,你不看還好,看了隻會問題越來越多,就連之前的問題都沒有解決!!!

不多說了,Ribbon作為後端負載均衡器,比Nginx更注重的是請求分發而不是承擔并發,可以直接感覺背景動态變化來指定分發政策。它一共提供了7種負載均衡政策:

政策名

政策聲明

政策描述

實作說明

BestAvailableRule

public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule

選擇一個最小的并發請求的server

逐個考察Server,如果Server被tripped了,則忽略,在選擇其中ActiveRequestsCount最小的server

AvailabilityFilteringRule

public class AvailabilityFilteringRule extends PredicateBasedRule

過濾掉那些因為一直連接配接失敗的被标記為circuit tripped的後端server,并過濾掉那些高并發的的後端server(active connections 超過配置的門檻值)

使用一個AvailabilityPredicate來包含過濾server的邏輯,其實就就是檢查status裡記錄的各個server的運作狀态

WeightedResponseTimeRule

public class WeightedResponseTimeRule extends RoundRobinRule

根據響應時間配置設定一個weight,響應時間越長,weight越小,被選中的可能性越低。

一個背景線程定期的從status裡面讀取評價響應時間,為每個server計算一個weight。Weight的計算也比較簡單responsetime 減去每個server自己平均的responsetime是server的權重。當剛開始運作,沒有形成status時,使用roubine政策選擇server。

RetryRule

public class RetryRule extends AbstractLoadBalancerRule

對標明的負載均衡政策機上重試機制。

在一個配置時間段内當選擇server不成功,則一直嘗試使用subRule的方式選擇一個可用的server

RoundRobinRule

public class RoundRobinRule extends AbstractLoadBalancerRule

roundRobin方式輪詢選擇server

輪詢index,選擇index對應位置的server

RandomRule

public class RandomRule extends AbstractLoadBalancerRule

随機選擇一個server

在index上随機,選擇index對應位置的server

ZoneAvoidanceRule

public class ZoneAvoidanceRule extends PredicateBasedRule

複合判斷server所在區域的性能和server的可用性選擇server

使用ZoneAvoidancePredicate和AvailabilityPredicate來判斷是否選擇某個server,前一個判斷判定一個zone的運作性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于過濾掉連接配接數過多的Server。

這裡以随機通路政策來舉個栗子:

1、ribbon配置檔案添加:

1

其中service-B是我注冊到Eureka的serviceID,一共起了3個示例。

2、main類注冊:

2

3

4

5

6

7

8

9

10

一定記得加第二個注冊,很多文章沒有。裡面配具體的政策。

3、Controller:

11

12

13

14

15

16

17

好了,打完收工。

http://blog.csdn.net/rickiyeat/article/details/64918756

繼續閱讀