Hasty Briefsbeta

双语

How Uber Protects Against Retry Storms

4 hours ago
  • 重试风暴可能对业务和品牌造成重大损害,现有的缓解策略缺乏跨服务可见性和上下文感知能力。
  • 简单重试会放大深层依赖链中的故障;例如,每跳一次重试会使故障服务的请求负载呈指数级增长。
  • 重试预算有助于控制负载,但需手动配置,且当错误不独立(如过载时)可能降低用户感知的可用性。
  • Uber的解决方案引入了“错误所有权”——将错误归因于导致它们的服务,区分“原因”错误和下游传播的“症状”错误。
  • 重试中间件利用错误所有权,仅对真正拥有错误的服务进行重试,防止指数级放大的同时允许必要的重试。
  • 服务依赖分析通过关联入站和出站故障来建立错误所有权,即使在复杂场景(如偶发错误)中也能实现。
  • “至少一次重试”保证确保在重试有助于提升可用性的场景中不会损害可用性,同时防止风暴。
  • 生产环境中,在真实故障期间,错误所有权自动阻止了数百万次虚假请求,将最大重试风暴半径从25降至3,平均值从20降至2。
  • 该系统嵌入Uber共享的服务网格基础设施中,无需自定义代码即可为所有服务提供自动保护。