
退避是一次请求失败后,不马上以同样节奏重试,而是先等待,并常让后续等待逐步变长。它不是放弃,也不是判断故障已经结束;它为依赖服务留下恢复时间,同时减少重试本身造成的新压力。
例如票务服务短暂过载,几千个客户端若立即连续重试,原来的拥堵会被放大。采用退避后,请求被摊到较长时段;再加入少量随机差异,还能避免大家在同一时刻重新涌入。中心问题不是“能否再试”,而是“什么时候再试、多少人一起再试”。
退避与超时相连,却不相同:超时结束本次等待,退避安排下一次尝试。限流预先限制速度,熔断则在连续失败后暂时停止调用。退避真正控制的是失败之后行动重新进入系统的节奏。
https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/
https://cloud.google.com/storage/docs/retry-strategy
了解 Geoffrey Chen 的更多信息
订阅后即可通过电子邮件收到最新文章。