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  # 指定饥饿加载的服务名称,可加载多个

四、小结


相关推荐
一勺菠萝丶15 分钟前
Spring Boot + MyBatis/MyBatis Plus:XML中循环处理List参数的终极指南
xml·spring boot·mybatis
llwszx16 分钟前
Spring中DelayQueue深度解析:从原理到实战(附结构图解析)
java·后端·spring·delayqueue·延迟任务
述雾学java30 分钟前
Spring Cloud Feign 整合 Sentinel 实现服务降级与熔断保护
java·spring cloud·sentinel
RainbowSea2 小时前
问题:后端由于字符内容过长,前端展示精度丢失修复
java·spring boot·后端
C182981825752 小时前
OOM电商系统订单缓存泄漏,这是泄漏还是溢出
java·spring·缓存
风象南2 小时前
SpringBoot 控制器的动态注册与卸载
java·spring boot·后端
我是一只代码狗2 小时前
springboot中使用线程池
java·spring boot·后端
hello早上好3 小时前
JDK 代理原理
java·spring boot·spring
PanZonghui3 小时前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
沉着的码农3 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式