Ribbon概念及简单使用

Ribbon

Spring cloud Ribbon 是基于Netflix Ribbon实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置,如连接超时,重试等。简单说就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮你基于某种规则去连接这些机器。同时我们可以很容易的使用Ribbon实现自定义的负载均衡算法。

Load Balance

目前主流的LB分为两类:

  1. 集中式LB
    在服务消费方和提供方之间使用独立的LB设施(例如硬件F5,软件nginx)由该设施负责把访问请求通过某种策略转发至服务提供方。
  2. 进程内LB
    将LB逻辑集成到消费方,消费方从服务注册中心获取服务消费提供方列表,然后自己从这些列表中根据某种规则选择一个合适的服务提供者。

客户端负载均衡

客户端负载均衡是属于进程内LB的方法,即在客户端(服务消费者)有一个可用的服务器提供者列表,然后通过负载均衡算法选择一个服务提供者进行请求。名称就很见民之意,在客户端就进行负载均衡算法分配。

在这里插入图片描述

服务端负载均衡

服务端负载均衡是属于集中式LB的方法。也就是在服务消费者和服务提供者之间架设设施(软件或者硬件)进行负载均衡的算法,在多个服务器之间选择一个进行访问。

常见的负载均衡算法

  • RoundRobinRule 轮询
    可用服务列表中的服务进行循环选择
  • RandomRule 随机
    随机获取一个服务进行访问
  • RetryRule 重试
    如果获取服务失败则在指定时间内会进行重试获取
  • WeightedResponseTimeRule 权重
    对轮询的扩展,响应平均速度越快的服务选择的权重越大,越容易被选择
  • BestAvailableRule 最空闲策略
    选择一个最小的并发请求的服务
  • ZoneAvoidanceRule 默认规则
    优先选择同一个区域的服务器

修改默认负载均衡策略

配置类的方式

编写配置类

注意:这里的配置类要写在@ComponetScan扫描不到的地方,否则这个策略就是所有的RibbonClients所共享,对所有的调用服务生效。

@SpringbootApplication注解里面包含了@ComponentScan注解,要写在启动类的外面。

@Configuration
public class RibbonRandomRuleConfig {
    
    

    @Bean
    public IRule iRule(){
    
    
        return new RandomRule();
    }

}

使用配置类

在启动类上添加@RibbonClients注解

@SpringBootApplication
@EnableDiscoveryClient
//配置类的方式实现客户端负载均衡
@RibbonClients(value = {
    
    
        @RibbonClient(name = "stock-service", configuration = RibbonRandomRuleConfig.class)
})
public class OrderApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(OrderApplication.class,args);
    }
}

使用yml的方式(推荐)

在配置文件中添加客户端负载均衡的配置即可

# 配置的方式配置客户端负载均衡算法
stock-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
ribbon:
  # 开启ribbon饥饿加载
  eager-load:
    enabled: true
    # 配置使用饥饿加载的服务名称,多个服务使用逗号分开
    clients: stock-service

自定义负载均衡器

实现AbstractLoadBalancerRule,里面的核心方法是choose,自定义实现的时候要注意并发编程的问题。一般还是使用市面上比较稳定成熟的比较好。不建议自定义实现。

猜你喜欢

转载自blog.csdn.net/weixin_45340300/article/details/128660236