2024.5.8 关于 SpringCloud —— Ribbon 的基本认知

目录

Ribbon 负载均衡原理

工作流程

 Ribbon 负载均衡规则

Ribbon 负载均衡自定义化

代码方式修改规则

配置文件方式修改规则

小总结

Ribbon 设定饥饿加载


Ribbon 负载均衡原理

工作流程

  1. order-service 使用 RestTemplate 发送请求,随后该请求将会被 Ribbon 所拦截
  2. Ribbon 从 url 中拿取服务名 userservice,并到 eureka-server 拉取属于该服务名的服务列表
  3. Ribbon 通过负载均衡算法从服务列表中拿取一个 ip + 端口
  4. Ribbon 将重新修改 url,并将该请求发送出去

  • 下图为底层工作流程

 Ribbon 负载均衡规则

  • Ribbon 的负载均衡规则是由 IRule 接口所定义的
  • IRule 的每一个子接口均可视为一种规则

  • IRule 接口的默认实现为 ZoneAvoidanceRule
  • 根据 zone 选择服务列表,然后轮询

验证 Ribbon 的默认负载均衡规则

  • 查看 user-service:8081 的日志信息,查询了用户id 1 和 3

  • 查看 user-service:8082 的日志信息,查询了用户id 2 和 4

  • 由此可以看出 order-service 发出的请求,以轮询的方式被接收

Ribbon 负载均衡自定义化

  • 通过定义 IRule 实现可以修改默认负载均衡规则

代码方式修改规则

  • 在 order-service 中的 OrderApplication 类中,定义一个新的 IRule
  • 此处我们将负载均衡规则修改为 随机规则

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

配置文件方式修改规则

  • 在 order-service 的 application.yml 文件中,添加新的配置也可以修改规则
  • 此处我们还是将负载均衡规则修改为 随机规则

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

小总结

  • 代码方式:配置更加灵活,但修改时需要重新打包发布
  • 配置方式:直观、方便,无需重新打包发布,但是无法做全局配置

Ribbon 设定饥饿加载

  • Ribbon 默认采取懒加载的方式,也就是只有第一次访问时才会去创建
  • 即第一次访问时才会去创建 LoadBalanceClient,请求时间会很长

设定饥饿加载

  • Ribbon 可以修改为饥饿加载
  • 饥饿加载会在项目启动时创建,降低第一次访问的耗时
  • 通过在 application.yml 文件中添加下方配置开启 Ribbon的饥饿加载
ribbon:
  eager-load:
    enabled: true # 开启饥饿加载 
    clients: # 指定饥饿加载的服务名称
      - userservice 
#      - xxservice 按照该格式指定多个服务名称

相关推荐

  1. 关于零拷贝认知

    2024-05-11 17:14:03       32 阅读
  2. 关于OpenAISora基本介绍

    2024-05-11 17:14:03       52 阅读
  3. rocketMQ基本认识

    2024-05-11 17:14:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 17:14:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 17:14:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 17:14:03       87 阅读
  4. Python语言-面向对象

    2024-05-11 17:14:03       96 阅读

热门阅读

  1. GO: 随机数

    2024-05-11 17:14:03       32 阅读
  2. 使用torch.nn.Sequential构建神经网络

    2024-05-11 17:14:03       31 阅读
  3. SpringBoot Mockito 依赖注入

    2024-05-11 17:14:03       36 阅读
  4. vue2中mixins的用法和需要注意的地方

    2024-05-11 17:14:03       31 阅读
  5. linux netstat 查看指定端口

    2024-05-11 17:14:03       34 阅读
  6. 【1分钟了解npm】

    2024-05-11 17:14:03       28 阅读
  7. 不使用EF框架实现数据库增删改查

    2024-05-11 17:14:03       33 阅读
  8. .NET_控制反转简述

    2024-05-11 17:14:03       38 阅读
  9. No signature found in package of version 2 or newer for package

    2024-05-11 17:14:03       26 阅读
  10. go-Expect-实验

    2024-05-11 17:14:03       36 阅读
  11. Linux 第二十六章

    2024-05-11 17:14:03       33 阅读
  12. vue3-seamless-scroll实现循环滚动

    2024-05-11 17:14:03       27 阅读
  13. 以太网网络变压器型号

    2024-05-11 17:14:03       29 阅读
  14. git 更换远程仓库地址三种方法总结

    2024-05-11 17:14:03       28 阅读