SpringCloud-Ribbon[负载均衡策略]

498 阅读3分钟

上篇文章我们介绍了Ribbon的入门案例,通过案例我们知道ribbon默认的负载均衡策略是轮询,本文我们来看下Ribbon的其他常用的负载均衡策略。

Ribbon负载均衡策略

ribbon提供的策略类

  ribbon依赖中提供的有相关的策略,具体如下

在这里插入图片描述

Ribbon 的常见负载均衡策略

策略名称策略对应的类名实现原理
轮询策略(默认)RoundRobinRule轮询策略表示每次都顺序取下一个 provider,比如一共有 5 个provider,第 1 次取第 1 个,第 2次取第 2 个,第 3 次取第 3 个,以此类推
权重轮询策略WeightedResponseTimeRule1.根据每个 provider 的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性越低。
2.原理:一开始为轮询策略,并开启一个计时器,每 30 秒收集一次每个 provider 的平均响应时间,当信息足够时,给每个 provider附上一个权重,并按权重随机选择provider,高权越重的 provider会被高概率选中。
随机策略RandomRule从 provider 列表中随机选择一个provider
最少并发数策略BestAvailableRule选择正在请求中的并发数最小的 provider,除非这个provider 在熔断中。
在“选定的负载均衡策略”基础上进行重试机制RetryRule1.“选定的负载均衡策略”这个策略是轮询策略RoundRobinRule
2.该重试策略先设定一个阈值时间段,如果在这个阈值时间段内当选择 provider 不成功,则一直尝试采用“选定的负载均衡策略:轮询策略”最后选择一个可用的provider
可用性敏感策略AvailabilityFilteringRule过滤性能差的 provider,有 2种:
第一种:过滤掉在 eureka 中处于一直连接失败 provider
第二种:过滤掉高并发的 provider
区域敏感性策略ZoneAvoidanceRule1.以一个区域为单位考察可用性,对于不可用的区域整个丢弃,从剩下区域中选可用的provider
2.如果这个 ip 区域内有一个或多个实例不可达或响应变慢,都会降低该 ip 区域内其他 ip 被选中的权重。

Ribbon 指定其他负载均衡策略

方式一:修改代码更换负载均衡策略

  在启动类中添加实例负载均衡的实例,则默认的轮询策略就会失效,具体如下:

@EnableEurekaClient
@SpringBootApplication
public class SpringcloudEurekaConsumerApplication {
    /**
     * 显示实例化 负载均衡的策略对象,那么默认的轮询策略就会失效
     * @return
     */
    @Bean
    public RandomRule createRule(){
        return new RandomRule();
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudEurekaConsumerApplication.class, args);
    }

}

启动consumer,访问测试

在这里插入图片描述

方式二:修改配置文件更换负载均衡策略

  第二种方式在application.properties中设置分配的策略

#设置负载均衡策略 eureka-ribbon-provider 为调用的服务的名称
eureka-ribbon-provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

'eureka-ribbon-provider’是调用的服务的名称,后面的组成部分是固定的。 同时注释掉方式一中的内容

在这里插入图片描述

Ribbon 的点对点直连

  我们在开发测试的时候有时会需要通过ribbon直连provider,而不经过Eureka注册中心,这种方式也可以实现,步骤如下

1.去掉 Eureka 的坐标添加 Ribbon 坐标

  此时项目中不需要Eureka的依赖了,但是同时也会去掉ribbon的依赖,我们需要单独的添加ribbon的依赖

<!-- ribbon 坐标 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2.修改配置文件

  修改配置文件去掉与 Eureka 相关的配置,添加新配置项,需要禁用掉eureka,同时指定服务清单

spring.application.name=eureka-consumer-LB
server.port=9091
#禁用 eureka
ribbon.eureka.enabled=false
#指定具体的服务实例清单
eureka-ribbon-provider.ribbon.listOfServers=192.168.70.137:9090

3.修改启动类

  去掉启动类中的eureka相关的注解

在这里插入图片描述

启动访问即可