SpringCloud ---(四)Ribbon负载均衡《2》(核心组件IRule及自定义Ribbon负载均衡策略)

本文详细介绍了SpringCloud中的Ribbon核心组件IRule,包括默认的7种负载均衡算法,并展示了如何自定义Ribbon负载均衡策略,通过在DeptConsumer_App类上添加自定义负载均衡类注解,以及创建自定义配置类MySelfRule,实现每次调用同一服务器5次的效果。
摘要由CSDN通过智能技术生成

一、Ribbon核心组件IRule

1、解析IRule自带的7中算法

IRule:根据特定算法从服务列表中选取一个要访问的服务。
在这里插入图片描述IRule实现类如下:
在这里插入图片描述

  • RandomRule:随机,使用Random对象从服务列表中随机选择一个服务

  • RoundRobinRule:轮训策略。默认策略,同时也是更高级rules的回退策略

  • RetryRule: 轮询 + 重试。
        先使用RoundRobinRule进行服务实例选择,如果选择服务实例失败,则在指定时间不断进行重试直至找到服务或超时

  • WeightedResponseTimeRule: 优先选择响应时间快
        此策略会根据每个实例的平均响应时间,计算出每个服务的权重,响应时间越快,服务权重越重、被选中的概率越高。此类有个DynamicServerWeightTask的定时任务,默认情况下每隔30秒会计算一次各个服务实例的权重。
        刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够,会切换WeightedResponseTimeRule。

  • BestAvailableRule: 优先选择并发请求最小的
        先过滤到断路器处于打开的服务,然后选择并发请求最小的服务实例来使用。
        刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够,会切换到BestAvailableRule。

  • PredicateBasedRule
        抽象类。 PredicateBasedRule是ClientConfigEnabledRoundRobinRule的一个子类,它先通过内部定义的一个过滤器过滤出一部分服务实例清单,然后再采用轮询的方式从过滤出来的结果中选取一个服务实例

  • AvailabilityFilteringRule: (默认实现)
    这个负载均衡器规则,会先过滤掉以下服务:
    a. 由于多次访问故障而处于断路器打开的服务
    b. 并发的连接数量超过阈值
    然后对剩余的服务列表按照RoundRobinRule策略进行访问
        如果RestClient最近3次连接服务实例都失败,则对应的服务的断路器打开。断路器打开的状态默认会持续30s,然后再关闭。如果再次连接又失败,则断路器又打开,并且等待的时间随着连续失败的次数,成指数值增加,但是等待的时间不能超过最长的等待时间

  • ZoneAvoidanceRule
    根据以下的规则过滤服务:

  1. 如果一个ZONE不可用,则丢弃这个zone里的所有服务实例
  2. 过滤以下服务实例:”由于多次访问故障而处于断路器打开的服务”和”并发的连接数量超过阈值”,然后再使用轮询从过滤后的服务列表中选择一个服务。

2、选择随机算法代替默认的轮询

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

//springboot中没有spring的applicationContext.xml  ----- @Configuration配置   ConfigBean = applicationContext.xml
@Configuration   //声明该类是配置类
public class ConfigBean {
   

    @Bean
    @LoadBalanced   // springcloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。(默认轮询)
    public RestTemplate getRestTemplate(){
   
        return new RestTemplate();
    }

    @Bean
    public IRule myRule(){
   
        return new RandomRule();//达到的目的,用我们重新选择的随机算法替代默认的轮询。
    }

}

二、自定义Ribbon负载均衡策略

以consumer - 80为例

1、DeptConsumer_App类上添加自定义负载均衡类注解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值