Spring Cloud LoadBalancer 开发随笔

LoadBalance 与 Ribbon 的关系

  • 架构对比

    • Ribbon 的架构

      • Ribbon 本质上是一个 SDK,在调用时做负载均衡,内部深度绑定 Netflix 生态(Eureka)。
      • Ribbon 的核心接口:
        • IRule:负载均衡策略接口(轮询、随机、加权等)。
        • ServerList:获取服务实例列表。
        • ZoneAwareLoadBalancer:核心类,包含实例缓存和规则执行。
      • Ribbon 的使用问题:
        • 与 Eureka 耦合严重,难以扩展。
        • 不支持响应式调用(只支持同步)。
        • 代码庞大,维护停滞。
    • LoadBalancer 的架构

      • LoadBalancer 将负载均衡逻辑抽象出来,并与具体注册中心解耦。
      • LoadBalancer 的核心接口:
        • ServiceInstanceListSupplier
          • 抽象层,负责提供服务实例列表。
          • 可接入任意注册中心,默认实现支持 Eureka、Nacos、Consul 等注册中心。
        • ReactorServiceInstanceLoadBalancer
          • 负责从列表中选择一个实例,默认实现提供了轮询和随机。
      • LoadBalancer 的使用特点:
        • 抽象层:与上层调用方完全解耦,Feign / RestTemplate 只依赖接口,不关心具体的实现细节。
        • 可插拔:用户可以自由替换实例获取逻辑或自定义负载均衡策略。
        • 支持响应式:原生支持响应式,适配 WebFlux、Reactor 等现代框架。
  • 定位对比

特性 RibbonSpring Cloud LoadBalancer
定义 Netflix 开源的客户端负载均衡库 Spring 官方新一代负载均衡框架
本质具体实现,直接提供完整的负载均衡能力抽象层 + 默认实现,类似一个框架,内置简单策略
核心目标在客户端做服务发现 + 负载均衡统一负载均衡接口,解耦上层调用方(Feign、RestTemplate)与底层策略
状态 Netflix 已停止维护,Spring Cloud 已废弃 Spring 官方持续维护,用于替代 Ribbon
默认策略轮询(Round Robin)轮询(RoundRobinLoadBalancer)
  • 总结对比
维度 RibbonSpring Cloud LoadBalancer
定位具体实现抽象框架 + 默认实现
设计理念强绑定 Eureka,单体设计模块化、解耦、可插拔
负载均衡策略扩展实现 IRule 接口或继承 AbstractLoadBalancerRule实现接口,扩展简单
同步 / 响应式支持仅支持同步调用同步 + 异步 + 响应式全支持
默认策略轮询、随机、加权、可用性过滤等轮询、随机,其他策略需用户自定义
维护状态已废弃,停止维护官方持续维护,推荐使用
上层默认集成 Spring Cloud Hoxton 及以前版本,OpenFeign 默认集成 Spring Cloud 2020+ OpenFeign 默认集成