负载均衡

负载均衡

起男 961 2021-08-22

负载均衡

负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行操作

根据负载均衡发生位置的不同,一般分为服务端负载均衡客户端负载均衡

服务端负载均衡指的是发生在服务提供者一方,比如nginx

客户端负载均衡指的是发生在服务消费的一方,也就是在发送请求之前已经选好了由哪个实例处理请求

微服务中一般会选择:客户端负载均衡

ribbon

ribbon是spring cloud的一个组件,它可用让我们使用一个注解就能轻松搞定负载均衡

使用

  1. 在RestTemplate的生成方法上添加注解

    	@Bean
        @LoadBalanced
        public RestTemplate restTemplate () {
            return new RestTemplate();
        }
    
  2. 修改RestTemplate的调用方式

    restTemplate.getForObject("http://服务名称", Object.class)
    

默认负载均衡策略:轮询

负载均衡策略

ribbon内置了多种负载均衡策略,内部负载均衡的顶级接口为com.netflix.loadbalancer.IRule

具体策略

策略名策略描述
BestAvailableRule选择一个最小的并发请求的server
AvailabilityFilteringRule过滤掉那些因为一直连接失败被标记为circuit tripped的后端server,并过滤掉那些高并发的后端server(active connections 超过配置的阈值)
WeightedResponseTimeRule根据相应时间分配一个weiht,相应时间越长,weight越小,被选中的可能性越低
RetryRule对选定的负载均衡策略上重试机制
RoundRobinRule轮询方式轮询选择server,默认使用
RandomRule随机选择一个server
ZoneAvoidanceRule符合判断server所在区域的性能和server的可用性选择server

修改策略

方式一

修改配置文件

被调用服务名称:
  ribbon:
    NFLoadBalancerRuleClassName: 策略类全类名

方式二

  1. 编写自定义配置类

    /**
     * 必须使用@Configuration
     * 不能在在应用程序扫描包路径下
     */
    @Configuration
    public class MyRibbonConfig {
    
        @Bean
        public IRule ribbonRule(){
            return new RandomRule(); //具体策略
        }
    }
    
  2. 在启动类上添加注解

    //如果有多个可以使用@RibbonClients
    @RibbonClient(name = "被调用服务名",configuration = MyRibbonConfig.class)