Cloud微服务:Ribbon负载均衡

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~

个人主页:.29.的博客

学习社区:进去逛一逛~

Ribbon负载均衡


一、Ribbon - 负载均衡原理、流程

  • 服务消费者(order-service)根据服务名称发起请求,请求地址(url):http://userservice/user/1。
  • 请求被负载均衡拦截器:LoadBalancerInterceptor 拦截,给到了负载均衡客户端:RibbonLoadBalancerClient
  • 负载均衡客户端:RibbonLoadBalancerClient 获取url中的服务名称:userservice 并给到动态服务列表负载均衡器:DynamicServiceListLoadBalancer
  • 动态服务列表负载均衡器:DynamicServiceListLoadBalancer从EurekaServer中拉取服务提供者(user-service)的信息列表:localhost:8081、localhost:8082。
  • 动态服务列表负载均衡器:DynamicServiceListLoadBalancer 将得到的信息列表给到负载均衡规则器:IRule 进行负载均衡算法,选择一个服务信息,重新给到负载均衡客户端:RibbonLoadBalancerClient
  • 负载均衡客户端:RibbonLoadBalancerClient修改请求地址(url):http://userservice/user/1,变为:http://localhost:8081/user/1,进而在浏览器成功访问。

二、Ribbon - 负载均衡策略

Ribbon的负载均衡策略是一个叫做IRule的接口来定义的,每一个子接口都是一种规则。

1.常见的负载均衡规则

2.调整负载均衡规则

①代码方式

在微服务的服务消费者(order-service)中的启动类OrderApplication类内部,定义一个新的IRule

java 复制代码
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class)
public class OrderApplication {

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

    /**
     * 创建RestTemplate并注入Spring容器
     */
    @Bean
    @LoadBalanced//实现负载均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    //重新定义IRule,达到调整负载均衡规则的效果
    @Bean
    public IRule randomRule() {
        //默认是轮询规则,这里负载均衡策略调整成------随即规则
        return new RandomRule();//随机规则
    }
}
  • 此方式作用范围是全局的,配置后在此微服务中,无论调用哪一个其他的微服务,使用的都是此处配置的负载均衡规则。
②配置文件方式

这里在微服务的服务消费者(order-service)的配置文件application.yml中,添加新的配置也可以修改负载均衡规则,下述配置信息指定调用服务名称为:userservice的服务时,使用的负载均衡规则。

yaml 复制代码
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  # 负载均衡规则------随机规则
  • 此方式的作用范围仅针对当前微服务,因为配置文件中先指定了服务名称,再指定的负载均衡规则。

三、Ribbon - 饥饿加载

  • Ribbon加载策略
    • 懒加载:默认采用的加载方式,在第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
    • 饥饿加载:在项目启动时就将LoadBalanceClient加载好,降低第一次访问的耗时。

可通过在application.yml配置文件中添加配置相关信息,开启饥饿加载:

yaml 复制代码
ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients:
      - userservice  # 指定饥饿加载的服务名称,可加载多个

四、小结


相关推荐
千|寻2 分钟前
【画江湖】langchain4j - Java1.8下spring boot集成ollama调用本地大模型之问道系列(第一问)
java·spring boot·后端·langchain
保持学习ing29 分钟前
Spring注解开发
java·深度学习·spring·框架
techzhi30 分钟前
SeaweedFS S3 Spring Boot Starter
java·spring boot·后端
酷爱码33 分钟前
Spring Boot 整合 Apache Flink 的详细过程
spring boot·flink·apache
异常君1 小时前
Spring 中的 FactoryBean 与 BeanFactory:核心概念深度解析
java·spring·面试
cacyiol_Z1 小时前
在SpringBoot中使用AWS SDK实现邮箱验证码服务
java·spring boot·spring
吾日三省Java2 小时前
微服务体系下将环境流量路由到开发本机
微服务·系统架构·团队开发
hstar95273 小时前
三十五、面向对象底层逻辑-Spring MVC中AbstractXlsxStreamingView的设计
java·后端·spring·设计模式·架构·mvc
apprentice4 小时前
Spring AI使用MCP的简单流程
后端·spring
磊叔的技术博客4 小时前
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
spring·llm·openai