负载均衡分为服务端负载均衡和客户端负载均衡,SpringCloud Ribbon是基于客户端的负载均衡工具。
客户端负载均衡和服务端负载均衡的区别在于客户端要维护一份服务列表,Ribbon从Eureka server中获取服务列表,根据负载均衡算法直接请求到具体的微服务,中间省去了负载均衡服务。如图:
:
Ribbon负载均衡算法:
随机 :RandomRule
轮询 :RoundRobinRule
最小并发:BestAvailableRule
过滤:AvailabilityFilteringRule
响应时间:WeightedResponseTimeRule
轮询重试:RetryRule
性能可用性:ZoneAvoidanceRule
默认是轮询算法。
如何修改?
一、编码修改模式
1、在消费者模块编写配置类,设置负载均衡规则
@Configuration
public class MyRule {
@Bean
public IRule rule(){
return new RandomRule();
}
}
2、在消费者模块启动类上添加注解
/*
配置Ribbon的负载均衡策略 name
* name:设置 服务提供方的 应用名称
* configuration:设置负载均衡Bean
*/
@RibbonClient(name="EUREKA-PROVIDER",configuration = MyRule.class)
二、yml配置修改模式
# 配置的方式设置Ribbon的负载均衡策略
EUREKA-PROVIDER: # 设置的服务提供方的 应用名称
ribbon:
NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 策略类