实用指南:介绍一下Ribbon

news/2025/11/24 22:31:16/文章来源:https://www.cnblogs.com/tlnshuju/p/19266088

实用指南:介绍一下Ribbon

2025-11-24 22:27  tlnshuju  阅读(0)  评论(0)    收藏  举报

文章目录

      • 一、核心定位
      • 二、与服务端负载均衡的区别
      • 三、核心功能
      • 四、工作原理
      • 五、负载均衡策略(核心)
      • 六、使用方式(传统集成)
        • 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 负载均衡@Configurationpublic class RestTemplateConfig {@Bean@LoadBalanced // 关键:让 RestTemplate 具备负载均衡能力public RestTemplate restTemplate() {return new RestTemplate();}}// 3. 业务中调用(URL 使用服务名,而非具体 IP:端口)@Servicepublic 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: 3000
ReadTimeout: 8000
NFLoadBalancerRuleClassName: 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.mzph.cn/news/975369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P27_完整的模型训练套路(二)

P27_完整的模型训练套路(二)如何辨别模型在训练过程中有没有训练好以及有没有达到我需要训练的需求? 不需要对模型进行调优了,直接利用现有的模型来进行一个测试: 9.测试步骤开始: 用with torch.no_grad():环境取…

洛谷 P1496:火烧赤壁 ← 离散化(数组 + sort + STL map)

​【题目来源】https://www.luogu.com.cn/problem/P1496【题目描述】曹操平定北方以后,公元 208 年,率领大军南下,进攻刘表。他的人马还没有到荆州,刘表已经病死。他的儿子刘琮听到曹军声势浩大,吓破了胆,先派人…

P28_完整的模型训练套路(三)

P28_完整的模型训练套路(三)本节进行训练细节总结 打开官网:torch.nn.Module,可以查看train mode 和eval mode .train()和.eval()只对特定层如Dropout和BatchNorm层起作用,但是最好还是加上; 即在训练开始前加上…

奶酪和机器人 非标准化的步数遍历

当有不超过几步的时候 我们的遍历是:遍历带点所有可达状态 1.奶酪 垂直水平的遍历 也可以用第二种 for(int i=0;i<4;i++){for(int step=1;step<=k;step++){int nx=x+dx[i]*step;int ny=y+dy[i]*step;int nw=sw+…

6个适合做 PoC 的开源无代码/低代码工具推荐

汇总了 6 个适合快速构建 PoC 的开源低代码/无代码工具,为你提供在不同验证场景下的选择指南。原文链接:https://www.nocobase.com/cn/blog/6-open-source-no-low-code-tools-for-building-poc 如果在几年前你问一位…

2025年度木门厂商推荐榜单与选择指南:一份基于行业专业数据的权威分析报告,整木/实木/原木门十大主流供应商解析

在家居装修中,一扇好门不仅是空间的分隔,更是安全、静音与美学的集合体。在2025年,随着消费升级和健康家居理念深入人心,人们对木门的材质、工艺、环保标准乃至智能化程度都提出了更高要求。如何在众多品牌中精准锁…

C# Quartz 定损执行 - microsoft

在 C# 中,如果你想要使用 Quartz.NET 库来安排一个任务每小时执行一次,你可以使用 StdSchedulerFactory 类来创建一个调度器(Scheduler),并配置一个 Cron 触发器(CronTrigger)。 步骤 1: 安装 Quartz.NETInstal…

2025美国本科申请中介深度解析:适配不同背景的梦校推手,谁能助你敲开美国名校门?

2025美国本科申请中介深度解析:适配不同背景的梦校推手,谁能助你敲开美国名校门?美国本科申请以其复杂的网申系统、多元的评估维度及多变的招生政策,成为留学申请中的“硬骨头”。专业的申请中介能凭借对院校偏好的…

Rokid AI眼镜开发 —— 戴上Rokid Glasses的你有多强

我们team——看看你有多强队在Rokid 杭州赛中做的一款应用是"战斗力识别",这款产品是基于Rokid AI glasses的 产品,其后台是在灵珠平台上搭建的工作流。先说下设计思路和主要规则: 主要分四大块功能 :1.眼…

机器人的记忆化搜索

dp[][]从这个点为起点的路径数量 终点的自己到自己算一种 使用递推f()=所有出去之和 #include <bits/stdc++.h> using namespace std; int n,m; int g[105][105];int visited[105][105]; int dp[105][105];//从这…

# 数据库对AI向量语义搜索的支持深度分析:PostgreSQL、MySQL、Elasticsearch技术选型指南

# 数据库对AI向量语义搜索的支持深度分析:PostgreSQL、MySQL、Elasticsearch技术选型指南Posted on 2025-11-24 22:19 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# 数据库对AI向量语义搜索的支持深度分析…

# 编程十四年感悟:复杂度管理与工程实践

# 编程十四年感悟:复杂度管理与工程实践Posted on 2025-11-24 22:19 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# 编程十四年感悟:复杂度管理与工程实践编程十四年感悟:复杂度管理与工程实践原文链接:…

Ai元人文:行为化不是放弃概念,而是通往概念的坚实阶梯

Ai元人文:行为化不是放弃概念,而是通往概念的坚实阶梯 主流路径的困境在于,它试图让AI从一个它无法企及的终点(抽象概念)开始学习。这就像让一个婴儿先理解“爱情”的哲学定义,再去学习如何爱。 而“行为化”之路…

基于RS485通讯及Modbus通讯协议的温湿度变送器

基于RS485通讯及Modbus通讯协议的温湿度变送器组成: 1.主控芯片STC12C5A60S2 STC12C5A60S2是增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051,指令执行速度是其8-12倍,响应更快。内置1KB的EEPROM(S…

小额支付系统:详细处理逻辑(底层)

小额支付系统:不止看懂还看透,细节里藏精华(附全流程步骤) 想了好久,决定还是写一下​小额批量支付系统​,尽管这块内容在各个平台被许多大佬普及了很多次了,或许你已经看腻了,或许你也了然于胸了,但是我觉得…

“大概率上涨”的推荐

基于提供的CSV文件数据,我整合并筛选了“大概率上涨”的推荐股票列表。筛选标准侧重于模型预测的一致性和出现频率(即上涨比例),同时考虑平均上涨概率和测试准确率。从数据中,我发现两只股票(sz.000798 和 sh.60…

Day1 Scrum冲刺博客

Day1 Scrum冲刺博客 1. 任务安排与感想成员 角色定位 主要负责任务 认领任务 明日任务 敏捷开发前的感想王韵清 算法开发 数据爬取、大模型调用与后端联调 1. 负责通知公告、学校系统等页面的爬虫开发。2. 实现后端 AP…

六、设备树与设备树插件

一、概述设备树主要文件:dts源文件,dtsi头文件,dtc编译工具、dts输出文件 dtc -I dts -O dtb 1.dts -o 1.dtb这是编译命令,dtc -I dtb -O dts 1.dtb -o 1.dts这是反编译命令 平台设备与驱动匹配的优先级:of_match…

【设计模式笔记06】:单一职责原则 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

102302124_严涛_作业3

作业1. (1)代码及结果截图: 单线程代码:点击查看代码 import requests from bs4 import BeautifulSoup import os import time from urllib.parse import urljoin, urlparseclass SingleThreadImageCrawler:def __…