超时设计

为每一次跨进程调用设置超时,让失败尽快暴露;阈值应覆盖调用链正常耗时并留余量,上游超时要大于下游预算,避免级联截断。

原则每个网络调用都要有超时,含连接与读写阶段
预算按端到端预算逐层扣减,而非各层等值设置
姿势超时后不再等待结果,同时要处理迟到响应

端到端预算拆分示例

端到端预算拆分示例
总预算 800ms(用户可接受)
├─ 网关与鉴权 50ms
├─ 订单处理 300ms
│   ├─ 库存查询 100ms
│   ├─ 支付预授权 150ms
│   └─ 校验与本地计算 50ms
├─ 其他下游调用 350ms
└─ 缓冲 100ms
规则:下游超时设置小于上游剩余预算
连接池等待时间也要计入超时预算;只设读超时仍可能在取连接阶段长时间排队。

易错点

  • 超时值取自平均耗时而非高分位,高峰期大面积超时
  • 上游超时小于下游处理时间,正常请求被提前取消

数据来源与参考

  • Google SRE Book:Addressing Cascading Failures
  • gRPC 文档:Deadlines
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌