spring Cloud負載均衡Ribbon


Ribbon飢餓加載

默認情況下Ribbon是懶加載的。當服務啟動好之后,第一次請求是非常慢的,第二次之后就快很多。

解決方式:開啟飢餓加載

ribbon:
eager-load:
enabled: true #開啟飢餓加載
clients: server-1,server-2,server-3 #為哪些服務的名稱開啟飢餓加載,多個用逗號分隔

Ribbon負載均衡的八種算法,其中ResponseTimeWeightedRule已廢除

規則名稱 特點
AvailabilityFilteringRule 過濾掉一直連接失敗的被標記為circuit tripped(電路跳閘)的后端Service,並過濾掉那些高並發的后端Server或者使用一個AvailabilityPredicate來包含過濾Server的邏輯,其實就是檢查status的記錄的各個Server的運行狀態
BestAvailableRule 選擇一個最小的並發請求的Server,逐個考察Server,如果Server被tripped了,則跳過
RandomRule 隨機選擇一個Server
ResponseTimeWeightedRule 已廢棄,作用同WeightedResponseTimeRule
RetryRule 對選定的負責均衡策略機上充值機制,在一個配置時間段內當選擇Server不成功,則一直嘗試使用subRule的方式選擇一個可用的Server
RoundRobinRule 輪詢選擇,輪詢index,選擇index對應位置Server
WeightedResponseTimeRule 根據相應時間加權,相應時間越長,權重越小,被選中的可能性越低
ZoneAvoidanceRule (默認是這個)負責判斷Server所Zone的性能和Server的可用性選擇Server,在沒有Zone的環境下,類似於輪詢(RoundRobinRule

 

java文件配置Ribbon負載均衡規則:

package com.springcloud.demo.client.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: yzp
 * @Date: 2020-6-5 9:33
 * @description
 */
@Configuration
public class RibbonConfig {

    /**
     * @return 負載均衡規則
     */
    @Bean
    public IRule iRule() {
        return new RandomRule();
    }

}

配置文件配置Ribbon負載均衡規則:

# 服務名稱 Service-ID
demo-user:
ribbon:
# 屬性配置方式【推薦】配置文件配置負載均衡算法-這里使用的是自定義的Ribbon的負載均衡算法,默認
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

 

配置屬性方式

<clientName>:
ribbon:
NFLoadBalancerClassName: #ILoadBalancer該接口實現類
NFLoadBalancerRuleClassName: #IRule該接口實現類
NFLoadBalancerPingClassName: #Iping該接口實現類
NIWSServerListClassName: #ServerList該接口實現類
NIWSServerListFilterClassName: #ServiceListFilter該接口實現類

在這些屬性中定義的類優先於使用@RibbonClient(configuration=RibbonConfig.class)Spring 定義的bean 以及由Spring Cloud Netflix提供的默認值。描述:配置文件中定義ribbon優先代碼定義

 

配置方式 優點 缺點
代碼配置 基於代碼,更加靈活 有坑(父子上下文)
線上修改得重新打包,發布
屬性配置 易上手 配置更加直觀 
線上修改無需重新打包,發布 
優先級更高
極端場景下沒有配置配置方式靈活

 

實現負載均衡<全局>配置-隨機

方式一:Ribbon的配置類定義在主類下

讓ComponentScan上下文重疊(強烈不建議使用

方式二:

@Configuration
@RibbonClients(defaultConfiguration = RibbonConfig.class)//Ribbon負載均衡全局粒度配置(所有服務都按照這個配置)
public class RibbonConfig {
}

 

Ribbon核心功能之IPing

1、IPing是Ribbon保證服務可用的基石

2、IPing常見實現:NIWSDiscoveryPing、PingUrl

 

 

IPing算法 算法描述
NIWSDiscoveryPing 不執行Ping操作,根據Eureka Clien反饋判斷存活
PingUrl 使用HttpClient操作對服務進行Ping操作

DummyPing “人性本善”流算法,默認返回true
NoOpPing 永遠返回true

 

Ribbon參數配置:

# Max number of retries on the same server (excluding the first try)
ribbon.MaxAutoRetries=1

# Max number of next servers to retry (excluding the first server)
ribbon.MaxAutoRetriesNextServer=1

# Whether all operations can be retried for this client
ribbon.OkToRetryOnAllOperations=true

# Interval to refresh the server list from the source
ribbon.ServerListRefreshInterval=2000

# Connect timeout used by Apache HttpClient
ribbon.ConnectTimeout=3000

# Read timeout used by Apache HttpClient
ribbon.ReadTimeout=3000

# Initial list of servers, can be changed via Archaius dynamic property at runtime
ribbon.listOfServers=www.baidu.com:80,www.jd.com:80

Ribbon參數可用在DefaultClientConfigImpl、CommonClientConfigKey文件查看。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM