Dubbo 容错机制

某团队在使用 Dubbo 调用第三方支付服务时,第三方服务频繁超时。

使用默认的 Failover(失败自动切换)策略后,Dubbo 会自动重试其他实例,但由于第三方支付只有 1 个实例,重试反而导致了更多的超时请求。

最终改用 Failsafe(失败安全返回)策略,在第三方服务不可用时返回默认响应,避免了大量超时请求的堆积。

【架构权衡】 容错策略的选择取决于服务的特性和业务需求。幂等服务可以用 Failover,非幂等服务用 Failfast,第三方服务用 Failsafe。


一、核心问题 🔴

1.1 七种容错策略

策略行为适用场景
Failover失败自动切换到其他实例幂等操作
Failfast失败立即报错非幂等操作
Failsafe失败返回默认值日志、监控
Failback失败记录到队列,定时重试非实时需求
Forking并行调用多个实例,返回最快结果对实时性要求高
Broadcast调用所有实例数据同步
Mock返回 Mock 数据测试/降级

1.2 策略配置

dubbo:
  references:
    order-service:
      cluster: failover
      retries: 2
      timeout: 3000

    payment-service:
      cluster: failsafe  # 第三方服务用失败安全

    inventory-service:
      cluster: forking
      forks: 3
      timeout: 1000

二、落地 Checklist

  • 服务分类:区分幂等和非幂等服务
  • 策略配置:为不同服务配置合适的容错策略
  • 超时配置:合理设置超时时间
  • 重试限制:设置重试次数,避免雪崩