当前位置: 首页 > news >正文

介绍一下Ribbon

文章目录

      • 一、核心定位
      • 二、与服务端负载均衡的区别
      • 三、核心功能
      • 四、工作原理
      • 五、负载均衡策略(核心)
      • 六、使用方式(传统集成)
        • 1. 与 RestTemplate 集成
        • 2. 与 OpenFeign 集成(早期默认)
      • 七、核心配置(application.yml)
      • 八、现状与替代方案
      • 总结

Ribbon 是 Netflix 开发的一款 客户端负载均衡器,主要用于微服务架构中实现服务间调用的负载均衡。它是 Spring Cloud 早期生态的核心组件之一,可与 Eureka、Nacos 等服务注册中心配合,动态从注册中心获取服务实例列表,并基于预设策略选择其中一个实例发起请求,从而实现流量的分发和服务的高可用。

一、核心定位

Ribbon 的核心作用是客户端负载均衡

  • 负载均衡:将请求分发到多个服务实例,避免单实例过载,提高系统吞吐量。
  • 客户端:负载均衡逻辑在调用方(客户端)实现,而非独立的中间件(如 Nginx 是服务端负载均衡)。

二、与服务端负载均衡的区别

类型核心特点典型例子
客户端负载均衡(Ribbon)负载均衡逻辑在调用方(客户端),客户端需先获取服务实例列表,再自主选择实例。Ribbon、Spring Cloud LoadBalancer
服务端负载均衡(Nginx)负载均衡逻辑在独立的中间件(如 Nginx),客户端只需请求中间件,由中间件选择实例。Nginx、F5

三、核心功能

  1. 服务实例选择:从服务注册中心(如 Eureka)获取目标服务的所有实例列表(IP:端口)。
  2. 负载均衡策略:基于预设规则(如轮询、随机、权重等)从实例列表中选择一个实例。
  3. 重试机制:当请求失败时,可配置重试其他实例(需配合超时时间)。
  4. 超时配置:支持配置连接超时、读取超时,避免请求长期阻塞。

四、工作原理

Ribbon 的工作流程可概括为“获取列表 → 选择实例 → 发起请求”三步:

  1. 服务列表获取
    客户端启动时,Ribbon 会通过服务注册中心(如 Eureka Client)拉取目标服务的所有实例列表(如 user-service 的实例 192.168.1.100:8080192.168.1.101:8080),并定期更新(默认 30 秒)。

  2. 负载均衡策略执行
    当客户端发起调用时,Ribbon 会根据配置的负载均衡策略(如轮询)从实例列表中选择一个“健康”的实例(过滤掉已下线或故障的实例)。

  3. 请求发起与重试
    客户端通过选定的实例 IP:端口 发起 HTTP 请求;若请求失败(如超时、连接拒绝),Ribbon 可根据配置重试其他实例(需开启重试机制)。

五、负载均衡策略(核心)

Ribbon 内置多种负载均衡策略,默认使用 RoundRobinRule(轮询),可通过配置自定义。常见策略如下:

策略类名特点说明
RoundRobinRule轮询选择实例(默认),依次循环调用。
RandomRule随机选择一个实例。
WeightedResponseTimeRule基于实例响应时间动态分配权重(响应越快,权重越高,被选中概率越大)。
RetryRule先按轮询策略选择实例,若请求失败,在指定时间内重试其他实例。
BestAvailableRule优先选择并发量最低的实例(通过统计实例的活跃请求数)。
ZoneAvoidanceRule综合判断实例所在区域的性能和实例可用性,避免选择故障区域的实例(适合多区域部署)。

六、使用方式(传统集成)

Ribbon 通常与 RestTemplate 或 OpenFeign 配合使用(OpenFeign 早期默认集成 Ribbon)。

1. 与 RestTemplate 集成
// 1. 引入依赖(Spring Cloud 早期版本,如 Hoxton)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>// 2. 配置 RestTemplate,添加 @LoadBalanced 开启 Ribbon 负载均衡
@Configuration
public class RestTemplateConfig {@Bean@LoadBalanced // 关键:让 RestTemplate 具备负载均衡能力public RestTemplate restTemplate() {return new RestTemplate();}
}// 3. 业务中调用(URL 使用服务名,而非具体 IP:端口)
@Service
public class OrderService {@Autowiredprivate RestTemplate restTemplate;public UserDTO getUser(Long id) {// "user-service" 是目标服务在注册中心的名称,Ribbon 会自动替换为具体实例的 IP:端口String url = "http://user-service/users/" + id;return restTemplate.getForObject(url, UserDTO.class);}
}
2. 与 OpenFeign 集成(早期默认)

OpenFeign 早期版本(如 Spring Cloud Hoxton 及之前)默认集成 Ribbon,无需额外配置,只需在 @FeignClient 中指定服务名,Ribbon 会自动实现负载均衡。

七、核心配置(application.yml)

可配置全局策略或针对特定服务的策略,以及超时、重试等参数。

# 1. 全局配置(对所有服务生效)
ribbon:ConnectTimeout: 5000  # 连接超时时间(毫秒)ReadTimeout: 10000    # 读取超时时间(毫秒)MaxAutoRetries: 1     # 同一实例的重试次数(默认 0)MaxAutoRetriesNextServer: 2  # 切换实例的重试次数(默认 1)OkToRetryOnAllOperations: true  # 是否对所有请求类型重试(默认仅 GET 请求)NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  # 全局负载均衡策略(随机)# 2. 针对特定服务配置(优先级高于全局,如对 user-service 单独配置)
user-service:ribbon:ConnectTimeout: 3000ReadTimeout: 8000NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule  # 权重策略

八、现状与替代方案

  • 现状:Ribbon 自 2019 年后停止更新,Spring Cloud 在 2020.0.x 版本后将其标记为“过时”(maintenance mode),不再推荐新项目使用。
  • 替代方案:Spring Cloud 官方推出 Spring Cloud LoadBalancer 作为新一代客户端负载均衡器,支持响应式编程,与 Spring Cloud 新生态(如 Spring Cloud Gateway)更兼容。

总结

Ribbon 是早期微服务架构中客户端负载均衡的核心组件,通过“客户端自主选择实例”的方式实现流量分发,支持多种负载均衡策略和灵活配置。但由于停止维护,目前已逐步被 Spring Cloud LoadBalancer 替代。了解 Ribbon 的原理和使用,有助于理解微服务负载均衡的核心思想。

http://www.dtcms.com/a/536208.html

相关文章:

  • 潍坊有哪些网站旅行社网站规划与建设的流程图
  • (项目管理系列课程)项目规划阶段:项目进度管理-估算活动持续时间
  • STM32定时器的输入捕获模式(测量PWM的周期与占空比)
  • 智慧校园数字孪生选型指南:选对平台做好交付,从平台适配到交付落地的全流程解决方案
  • php招生网站开发标准网站建设价格
  • 【NestJS】在 nest.js 项目中,如何使用 Postgresql 来做缓存?
  • 解决由于没有远程桌面授权服务器可以提供许可证,远程会话被中断.的方法
  • 初始化服务器
  • 玉林建设信息网站帮别做网站
  • 【C++ 内存管理、模板初阶与 STL 简介】:打通高效编程的关键链路
  • web开发,在线%高校舆情分析%系统demo,基于python,flaskweb,echart,nlp,ida,tf-idf,多爬虫源,数据库mysql
  • 安装双系统
  • AI研究-113 DeepSeek-OCR 原理与架构全解|视觉压缩长文本 SAM-base 16×下采样 CLIP-L 3B-MoE
  • R语言绘制复杂加权数据(nhanes数据)生存分析决策曲线
  • 常州溧阳建设工程管理中心网站做网站平台的公司
  • 政务领域应用:国密 SSL 证书如何守护 “一网通办” 的数据安全?
  • LM实现教程:基于 nanochat项目 从零开始理解大语言模型
  • 【南京大学主办】第三届数学与机器学习国际学术会议(ICMML 2025)
  • 淮北市建设局网站福建省住房和城乡建设局网站
  • 无锡企业网站龙岩kk网最新招聘
  • 告别纸张,迎接更加高效的文档管理——Paperless-ngx介绍
  • 题解:P14309 【MX-S8-T2】配对
  • SQL之表的增删
  • 【计算机网络核心】TCP/IP模型与网页解析全流程详解
  • HTML 理论系统笔记2
  • 微软Copilot被用于窃取OAuth令牌,AI Agent成为攻击者帮凶
  • 免费网站建站w海口企业自助建站
  • 全球 PyTorch 大会与 Triton 大会释放强信号:算子语言繁荣和分化背后,编译器核心地位日益凸显
  • PyCharm 快速运行 django project
  • 自己动手制作网站外呼电销系统