負載均衡策略
Ribbon的負載均衡規則是一個叫做IRule的接口來定義的,每一個子接口都是一種規則:

RoundRobinRule 簡單輪詢服務列表來選擇服務器
AvailabilityFilteringRule 對以下兩種服務器進行忽略
(1)在默認情況下,這台服務器如果3次連接失敗,這台服務器就會被設置為“短路”狀態。短路狀態將持續30秒,如果再次連接失敗,短路的持續時間就會幾何級地增加。
(2)並發數過高的服務器。如果一個服務器的並發連接數過高,配置了AvailabilityFilteringRule規則的客戶端也會將其忽略。並發連接數的上限,可以由客戶端的<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit屬性進行配置。
WeightedResponseTimeRule 根據權重值選擇服務器,需要為服務器賦予權重值。服務器響應時間越長,這個服務器的權重就越小。這個規則會隨機選擇服務器
ZoneAvoidanceRule 以區域可用的服務器為基礎進行服務器的選擇。使用Zone對服務器進行分類。對Zone內的多個服務做輪詢。(默認)
BestAvailableRule 忽略那些短路的服務器,並選擇並發數較低的服務器
RandomRule 隨機選擇一個可用的服務器
RetryRule 重試機制的選擇邏輯
指定負載均衡規則
方式一:服務消費者的代碼實現指定IRule的實現類
@Bean public IRule rule(){ return new RandomRule(); }
查看結果:

注意:此方式作用范圍是消費者中所有服務提供者
方式二:服務消費者的配置文件(application.yml)中配置負載均衡規則
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule # 負載均衡規則
查看結果:
注意:此方式作用范圍是針對消費者中單一的服務提供者
飢餓加載
Ribbon默認是采用懶加載,即第一次訪問時才會去創建LoadBalanceClient,請求時間會很長。

飢餓加載則會在項目啟動時創建,降低第一次訪問的耗時通過下面配置開啟飢餓加載:
ribbon: eager-load: enabled: true # 開啟飢餓加載 clients: userservice # 指定服務名為userservice的服務飢餓加載
查看結果

注意:

ribbon.eager-load.clients類型是List,yml文件中應該寫成
ribbon: eager-load: enabled: true # 開啟飢餓加載 clients: - userservice - userservice1
