一,負載均衡算法種類
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