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应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
2月前
|
负载均衡 Java Spring
Feign 和 OpenFeign 有什么区别?
Feign是Netflix开发的声明式HTTP客户端,简化Web服务调用。OpenFeign是Spring Cloud对其的扩展,集成负载均衡、服务发现等组件,提供自动配置,更适用于Spring生态。
226 1
|
2月前
|
关系型数据库 MySQL Java
Java微服务连接同个MySQL实例报错“Too many connections”
多个微服务共享同一MySQL实例时,易因连接池配置不当导致“Too many connections”错误。需综合评估max_connections限制与各服务连接池大小,合理调整数据库配置与应用参数,避免连接耗尽。
122 6
|
SQL 运维 关系型数据库
在OceanBase数据库中,你可以通过以下几个途径来查看慢SQL和等待事件
在OceanBase数据库中,你可以通过以下几个途径来查看慢SQL和等待事件
855 1
|
2月前
|
消息中间件 运维 监控
Kafka 最佳实践:分区策略、重试、幂等生产者
Kafka 最佳实践:分区策略、重试、幂等生产者
185 3
|
2月前
|
人工智能 NoSQL Java
你的 AI Agent 为什么总是“失忆”?揭秘 Spring AI 中的记忆管理陷阱与破局之道
Spring AI Agent常“失忆”?根源在于:1)HTTP无状态导致上下文丢失;2)未显式配置ConversationMemory;3)工具结果未回写记忆。本文剖析三大原因,提供Redis分布式记忆、sessionId绑定、工具结果自动注入等实战方案,并介绍滑动窗口、摘要压缩等高级技巧,助你打造真正连贯、可信的智能体。(239字)
317 2
|
3月前
|
前端开发 Java API
吃透 Spring 体系结构
本文深入剖析Spring框架的体系结构,围绕IOC(控制反转)和AOP(面向切面编程)两大核心思想,系统讲解了核心容器、AOP、数据访问与Web模块的原理及实战应用,并辨析了常见技术点差异,助力开发者掌握其设计精髓。
152 2
|
3月前
|
监控 网络安全 iOS开发
|
NoSQL 前端开发 MongoDB
[保姆级教程]Windows安装MongoDB教程
【6月更文挑战第4天】该内容是关于MongoDB的安装包下载及安装步骤指南。首先,访问网址 <a href="https://www.mongodb.com/try" target="_blank">https://www.mongodb.com/try</a> 进入官网,选择MongoDB Community Edition(社区版)。接着,挑选合适的版本和系统平台,推荐下载zip压缩包。下载后,进行安装,依次点击“Next”同意协议,选择自定义安装路径,然后继续安装直至完成。
1696 0
|
easyexcel
EasyExcel写入内容匹配不上解决方法
EasyExcel写入内容匹配不上解决方法
588 0
|
负载均衡 Java 应用服务中间件
2w字Spring Cloud最全面试题整理,全是硬货
2w字Spring Cloud最全面试题整理,全是硬货
582 1

热门文章

最新文章