• Cloud微服务:Ribbon负载均衡


    在这里插入图片描述

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

    在这里插入图片描述



    一、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

    @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();//随机规则
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 此方式作用范围是全局的,配置后在此微服务中,无论调用哪一个其他的微服务,使用的都是此处配置的负载均衡规则。

    ②配置文件方式

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

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



    三、Ribbon - 饥饿加载

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

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

    ribbon:
      eager-load:
        enabled: true # 开启饥饿加载
        clients:
          - userservice  # 指定饥饿加载的服务名称,可加载多个
    
    • 1
    • 2
    • 3
    • 4
    • 5



    四、小结

    在这里插入图片描述



    在这里插入图片描述

  • 相关阅读:
    EXCEL地图 | 制作民生银行网点地图
    【打卡】【sysfs相关API详解】21天学习挑战赛—RK3399平台开发入门到精通-Day21
    QT串口ui设计和解决显示中文乱码
    python机器学习基础教程01-环境搭建
    golang如何生成zip压缩文件
    solana上使用Rust进行合约开发
    天选之子Linux是如何发展起来的?为何对全球IT行业的影响如此之大?
    学习:DDR3基础知识(1)
    Flink 基础 -- 应用开发(Table API & SQL) Table API
    NumPy数值计算基础实训
  • 原文地址:https://blog.csdn.net/ebb29bbe/article/details/138082419