固定间隔重试,下游一抖就被整批请求打穿。
改成指数退避,每次把等待时间翻倍。
再叠随机抖动,避免所有实例同点重试。
必须同时设最大次数和总时限,否则一样卡死。
只对幂等操作重试,写接口要带幂等键。
# 指数退避 + 全抖动,base 取 100~200ms,上限别超 5s
import random, time
def with_retry(fn, tries=5, base=0.2, cap=5.0):
for i in range(tries):
try:
return fn()
except (TimeoutError, ConnectionError):
if i == tries - 1:
raise
delay = min(cap, base * (2 ** i))
time.sleep(random.uniform(0, delay)) # 抖动落在 0~delay
THE END






暂无评论内容