Ribbon是怎么做负载均衡的?

简介: Ribbon 是 Spring Cloud 中的客户端负载均衡器,通过注册中心(如 Nacos)获取服务列表并本地缓存,结合多种负载均衡策略(如轮询、随机、权重等)选择实例。它利用拦截器在请求时动态路由,支持动态刷新、重试、超时控制等机制,提升系统可用性与容错能力。

Ribbon 是一种客户端负载均衡的解决方案,它通常与 Spring Cloud 一起使用,以在微服务架构中实现负载均衡。

客户端负载均衡器的实现原理是通过注册中心,如 Nacos,将可用的服务列表拉取到本地(客户端),再通过客户端负载均衡器(设置的负载均衡策略)获取到某个服务器的具体 ip 和端口,然后再通过 Http 框架请求服务并得到结果。

image.png

Ribbon 通过在客户端中添加拦截器来实现负载均衡。当客户端发出请求时,拦截器会根据一组预定义的规则选择一个服务实例来处理请求。这些规则可以基于多个因素进行选择,包括服务实例的可用性、响应时间、负载等级等。


Ribbon 的核心是负载均衡算法,它决定了如何选择服务实例。Ribbon 提供了多种负载均衡算法,包括轮询、随机、加权随机、加权轮询、最少连接数等,他们的具体实现是实现了 IRule 接口,继承自 AbstractLoadBalanceRule 实现的:

image.png


  • 轮询策略:RoundRobinRule
  • 按照一定的顺序依次调用服务实例。比如一共有 3 个服务,依次调用服务 1、服务 2、服务 3
  • 权重策略:WeightedResponseTimeRule
  • 每个服务提供者的响应时间分配一个权重,响应时间越长,权重越小。它的实现原理是,刚开始使用轮询策略并开启一个计时器,每一段时间收集一次所有服务提供者的平均响应时间,然后再给每个服务提供者附上一个权重,权重越高被选中的概率也越大。
  • 随机策略:RandomRule
  • 这种实现很简单,从服务提供者的列表中随机选择一个服务实例。
  • 最小连接数策略:BestAvailableRule
  • 遍历服务提供者列表,选取连接数最小的一个服务实例。如果有相同的最小连接数,那么会调用轮询策略进行选取。
  • 重试策略:RetryRule
  • 按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null。
  • 可用敏感性策略:AvailabilityFilteringRule
  • 先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例。
  • 区域敏感策略:ZoneAvoidanceRule
  • 根据服务所在区域(zone)的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。


Ribbon 还提供了一些高级功能,如服务列表的动态刷新、失败重试、请求重试、请求超时控制等。这些功能可以帮助客户端更好地适应动态的服务拓扑,并提高系统的可用性和容错性。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
21天前
|
负载均衡 Java Spring
Feign 和 OpenFeign 有什么区别?
Feign是Netflix开发的声明式HTTP客户端,简化Web服务调用。OpenFeign是Spring Cloud对其的扩展,集成负载均衡、服务发现等组件,提供自动配置,更适用于Spring生态。
129 1
|
18天前
|
关系型数据库 MySQL Java
Java微服务连接同个MySQL实例报错“Too many connections”
多个微服务共享同一MySQL实例时,易因连接池配置不当导致“Too many connections”错误。需综合评估max_connections限制与各服务连接池大小,合理调整数据库配置与应用参数,避免连接耗尽。
93 6
|
21天前
|
人工智能 运维 监控
进阶指南:BrowserUse + AgentRun Sandbox 最佳实践
本文将深入讲解 BrowserUse 框架集成、提供类 Manus Agent 的代码示例、Sandbox 高级生命周期管理、性能优化与生产部署策略。涵盖连接池设计、安全控制、可观测性建设及成本优化方案,助力构建高效、稳定、可扩展的 AI 浏览器自动化系统。
408 47
|
消息中间件 存储 运维
Rabbitmq消息大量堆积怎么办?
该文讨论了一个系统架构问题,主要涉及RabbitMQ在处理订单消息时遇到的性能瓶颈。首先,系统使用RabbitMQ是为了解耦和提高性能,前端创建订单后通过RabbitMQ发送消息给订单履约系统消费并执行后续操作。当订单流量激增时,消息堆积导致服务器压力增加。 排查解决方案: 1. 增加消费者以提高消费速度,但发现即使增加消费者,消息堆积问题仍未解决。 2. 分析消费者逻辑,发现调用库存系统接口可能导致处理速度慢。库存系统压力大,接口响应慢,加剧问题。 3. 实施清空堆积消息的策略,新建消费者快速消费消息并存储在表中,减轻服务器压力。待库存服务恢复后,再将消息推回RabbitMQ处理。
1120 1
|
SQL 运维 关系型数据库
在OceanBase数据库中,你可以通过以下几个途径来查看慢SQL和等待事件
在OceanBase数据库中,你可以通过以下几个途径来查看慢SQL和等待事件
835 1
|
5天前
|
机器学习/深度学习 算法 安全
【2026年ESWA SCI1区TOP】动态双变异鲸鱼差分算法DLMWOADE附Matlab代码和性能实测
​ ✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:天天Matlab  👇 关注我领取海量matlab电子书和数学建模资料  🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍 在复杂工程优化领域,传统基于梯度的方法受限于非光滑问题的求解能力,而直接搜索技术虽具备普适性,却常面临收敛速度慢、精度不足的挑战。随着制造业向智能化转型,焊接梁设计、风电减速器优化等工程问题对优化算法的精度与效率提出了更高要求。在此背景下,动态双变异鲸鱼差分算法(DLMWOADE)
|
6天前
|
人工智能 供应链 算法
预测显示:智能体来了,智创未来经济增长加速 30%
2026年起,AI智能体商用将驱动全球TFP跃升,助推经济增长加速30%。它以零边际成本提供24/7专家级服务,重构供应链、催生新产业,并重塑全球财富分配。这不是优化存量,而是用“算法杠杆”做大经济蛋糕。(239字)
智能体来了,智创未来,人类命运将如何改写?
本文探讨智能体如何从底层重塑人类命运:它超越工具属性,成为“数字外壳”与共生伙伴;以超强算力破解气候、能源等全球危机;更推动人类从生存劳作转向意义追寻与创造。这不是替代,而是一场文明进化。(239字)
|
6天前
|
人工智能 自然语言处理 机器人
智能体来了,智创未来,让我们的憧憬照进现实
本文畅谈智能体(Agent)技术如何将科幻中的Jarvis变为现实:从被动应答到主动执行任务,从虚拟对话走向具身控制;赋能普通人创作、学习与工作,实现科技平权;更以自然语言为入口,消弭人机隔阂。智能体,是通向未来的数字阶梯。(239字)
|
21天前
|
消息中间件 运维 监控
Kafka 最佳实践:分区策略、重试、幂等生产者
Kafka 最佳实践:分区策略、重试、幂等生产者
111 3