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

SpringCloud之Ribbon

SpringCloud之Ribbon

————————————————————————————————————

推荐文档: https://www.springcloud.cc/spring-cloud-dalston.html#spring-cloud-ribbon

1.什么是Ribbon

Ribbon 是 Spring Cloud 微服务架构中实现客户端负载均衡的核心组件,由 Netflix 开源并集成到 Spring Cloud 生态中。它通过动态分配请求到多个服务实例,提升系统的可用性和性能。


2. 客户端负载均衡

与服务端负载均衡的区别:

  • Nginx 属于服务端负载均衡(集中式),请求先经 Nginx 转发到后端服务。

  • Ribbon 将负载均衡逻辑嵌入服务消费者,直接从注册中心(如 Eureka)获取服务列表,在本地选择实例并调用。

优势:减少单点故障,降低网络跳转延迟,适应动态伸缩。

Ribbon与Nginx对比

特性Ribbon (客户端负载均衡)Nginx (服务端负载均衡)
部署位置集成在服务消费者进程内独立服务器或集群
服务发现动态从注册中心获取服务列表需手动配置或通过脚本更新
灵活性支持动态策略调整和深度定制配置相对静态,修改需重启
性能影响减少网络跳转,延迟更低增加额外网络跃点
典型用例微服务内部调用南北流量(客户端到网关)

3. 核心能力

动态服务发现:集成注册中心(如 Eureka),自动更新可用实例列表。

多种负载策略:支持轮询、随机、响应时间加权等算法。

故障容错:超时重试、服务熔断(常与 Hystrix 结合)。


4.工作流程

步骤 1:消费者从注册中心拉取服务实例列表,缓存在本地。

步骤 2:通过 IRule 策略(如轮询,随机,权重等)选择目标实例。

步骤 3:RestTemplate 发起请求(需添加 @LoadBalanced 注解)。

步骤 4:若请求失败,根据配置重试或切换实例。


5.核心组件

ILoadBalancer:负载均衡器,管理实例列表与选择逻辑。

IRule:定义负载策略(如 RandomRule 随机选择)。

ServerList:动态获取服务实例列表(与 Eureka 集成)。


6. IRule策略对比

策略名称实现类工作原理适用场景缺点
轮询策略RoundRobinRule按服务实例列表顺序依次选择(如 A→B→C→A)节点性能均匀的无状态服务(如静态API)无法感知节点实时负载
随机策略RandomRule完全随机选择实例节点性能相近的简单服务可能将流量引向高负载节点
权重响应时间策略WeightedResponseTimeRule根据实例历史响应时间动态分配权重(响应越快权重越高)节点性能差异大的集群(如混合部署新旧服务器)冷启动阶段可能分配不均
最小连接数策略BestAvailableRule选择当前并发请求数最少的实例高并发场景(如秒杀系统)需监控并发数,增加系统开销
可用性过滤策略AvailabilityFilteringRule过滤故障节点和高并发节点,剩余节点轮询选择高可用要求的服务(如支付系统)依赖健康检查机制
区域感知策略ZoneAvoidanceRule优先选择同区域实例,避开高延迟或故障区域跨机房/云区域部署(如全球业务)单区域部署时退化为轮询
重试策略RetryRule在指定时间窗内重试获取可用服务(默认基础策略为轮询)网络波动环境或服务临时不可用重试可能增加请求延迟
自定义策略继承 AbstractLoadBalancerRule按业务逻辑定制(如基于 IP 哈希的会话保持)会话保持的服务(如用户登录状态)需开发成本,扩展性需手动处理

7.适用场景

  • 微服务间调用(如通过 RestTemplate 或 Feign)。

  • 需灵活定制负载策略或深度集成 Spring Cloud 的场景。


8.总结:

Ribbon 作为微服务架构的“流量调度器”,通过客户端负载均衡显著提升系统弹性。其核心价值在于:

✅ 轻量集成:无需独立部署,与 Spring Cloud 生态无缝协作。

✅ 灵活扩展:支持策略定制和容错机制。

⚠️ 演进过渡:虽被 Spring Cloud LoadBalancer 取代,但理解其原理仍是掌握微服务治理的关键基础。

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

相关文章:

  • vue入门学习教程
  • Go语言中的组合式接口设计模式
  • Go·并发处理http请求实现
  • Python Day10
  • C语言初阶4-数组
  • UE5多人MOBA+GAS 18、用对象池来设置小兵的队伍的生成,为小兵设置一个目标从己方出生点攻打对方出生点,优化小兵的血条UI
  • Xavier公式的原理
  • 备案是联系主机商还是域名商
  • ESP32语音唤醒
  • 【B题解题思路】2025APMCM亚太杯中文赛B题解题思路+可运行代码参考(无偿分享)
  • 【内赠门票】GoGoGo!NetMarvel邀您出发ChinaJoy啦!
  • UniHttp中HttpApiProcessor生命周期钩子介绍以及公共参数填充-以百度天气接口为例
  • cocos游戏开发中,如何制作一个空气墙
  • WHIP 协商分析研究
  • 背包初步(0-1背包、完全背包)
  • PID 算法的原理与应用 (通俗易懂)
  • CSS 中px、em、rem、%、vw、vh、vm、rpx、fr 介绍和区别对比
  • 【高等数学】第三章 微分中值定理与导数的应用——第三节 泰勒公式
  • Lecture #18:TimeStamp Ordering Concurrency Control
  • “28项评测23项SOTA——GLM-4.1V-9B-Thinking本地部署教程:10B级视觉语言模型的性能天花板!
  • NetworkManager配置网桥(bridge)虚拟网络(vlan) 笔记250711
  • Visual Studio Code 的 settings.json 配置指南
  • 运筹说 第140期 | 从直觉到算法:这些奠基人如何塑造了启发式方法的科学根基?
  • I2C集成电路总线
  • 【机器学习应用】基于集成学习的电力负荷预测系统实战案例
  • Graph Adversarial Self-Supervised Learning 图对抗自监督学习
  • MySQL的使用
  • DPDK性能优化实践:系统级性能调优的方法论与实战(一套通用的方法论)
  • 国产LVDT信号调理芯片XJD698:高精度位移检测的国产化突破,完美替代AD698
  • 基于相似性引导的多视角功能性脑网络融合|文献速递-最新论文分享