Spring Cloud Ribbon負載均衡策略自定義配置


一,負載均衡算法種類

Ribbon的核心組件是IRule,是所有負載均衡算法的父接口,其子類有:

 

 

 

 

idea快速查看子類或實現類的快捷鍵:CTRL+ALT+B。
每一個類就是一種負載均衡算法

RoundRobinRule   輪詢
RandomRule         隨機
AvailabilityFilteringRule   會先過濾掉由於多次訪問故障而處於斷路器跳閘狀態的服務,還有並發的連接數超過閾值的服務,然后對剩余的服務列表進行輪詢
WeightedResponseTimeRule  權重    根據平均響應時間計算所有服務的權重,響應時間越快服務權重越大被選中的概率越高。剛啟動時,如果統計信息不足,則使用輪詢策略,等信息足夠,切換到 WeightedResponseTimeRule
RetryRule  重試    先按照輪詢策略獲取服務,如果獲取失敗則在指定時間內重試,獲取可用服務
BestAvailableRule   選過濾掉多次訪問故障而處於斷路器跳閘狀態的服務,然后選擇一個並發量最小的服務
ZoneAvoidanceRule  符合判斷server所在區域的性能和server的可用性選擇服務
 
二,自定義配置負載均衡算法
 
配置很簡單,在自定義配置類里面如下配置即可
@Configuration
public class ConfigBeans {

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    /**自定義配置ribbon負載均衡算法
     * @return
     */
    @Bean
    public IRule myRule(){
        //return new RoundRobinRule();//輪詢
        //return new RetryRule();//重試
        return new BestAvailableRule();
    }
}
很具業務需求選擇合適的算法即可,當然可以根據具體業務需求自己寫一個算法類
 
三,個性化定制不同微服務策略
如果要自定義Ribbon配置, 則需要把這個配置類放在@SpringBootApplication掃不到的包中(@ComponentScan),因為如果可以掃到自定義的Ribbon配置類的話,那么會對所有的Riboon都生效,也就是說這種情況下所有的微服務的負載均衡算法都是相同的。
 
3.1 配置類實現負載均衡策略
獨立新建包,創建配置類
//獨立的包,不在主啟動類的包及其子包里
package com.ribbon;

import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Configuration;

import com.baosight.config.MyConfiguration;

/**
 * 使用RibbonClient,為特定name的Ribbon Client自定義配置.
 * 使用@RibbonClient的configuration屬性,指定Ribbon的配置類.
 */
@Configuration
@RibbonClient(name = "springboot-eureka-clent", configuration = MyConfiguration.class)
public class ServiceProviderConfig {

}
3.2 使用配置文件實現負載均衡策略
創建配置類的方式雖然能夠實現個性化定義,但是當有大量這類配置的時候,對各個RibbonClient 的配置信息都將分散在這些配置類中,使得修改和管理都變得非常麻煩。在Camden版本中,Spring Cloud Ribbon對 RibbonClient 的個性化配置做了進一步優化,可以通過.ribbon.=的形式進行配置。配置如下
#注冊中心集群
eureka.client.service-url.defaultZone=http://10.25.25.92:8080/eureka/,http://10.25.25.24:8080/eureka/,http://10.25.25.39:8080/eureka/
server.port=8764
spring.application.name=service-ribbon
springboot-eureka-clent.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

ribbon配置優先級:Ribbon配置的優先級:屬性配置 > JAVA配置>Netflix Ribbon默認配置

四,不依賴eureka實現Ribbon負載均衡

前面實現的負載均衡都是依賴eureka實現的,當然ribbon可以脫離eureka實現負載均衡。配置如下

#取消Ribbon使用Eureka
ribbon.eureka.enabled=false

#配置Ribbon能訪問 的微服務節點,多個節點用逗號隔開
microservice-provider-user.ribbon.listOfServers=localhost:8001,localhost:8002

我這兒整理了比較全面的JAVA相關的面試資料,


需要領取面試資料的同學,請加群:473984645


免責聲明!

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



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