WMX · 随记
·AI· 3 分钟阅读

重试预算:次数、等待和请求超时要一起算

每次请求超时后重试三次,整体耗时可能远超用户愿意等待的时间。重试策略需要受总截止时间约束。

AI 系列概览:模型机制、系统边界与效果评估
AI 系列概览:模型机制、系统边界与效果评估 点击图片查看大图 ↗

问题从哪里出现

每次请求超时后重试三次,整体耗时可能远超用户愿意等待的时间。重试策略需要受总截止时间约束。

理解核心机制

先计算每次尝试预算与退避等待之和,再决定允许的最大尝试次数。下面只做时间账本,不真的等待或调用远程服务。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。

Python12 行 · 可横向滚动
deadline = 10.0
attempt_timeout = 2.0
backoffs = [0.5, 1.0, 2.0]
used, attempts = 0.0, 0
for attempt in range(4):
    delay = 0 if attempt == 0 else backoffs[attempt - 1]
    if used + delay + attempt_timeout > deadline:
        break
    used += delay + attempt_timeout
    attempts += 1
assert used <= deadline and attempts == 3
print(attempts, used)

适用边界与常见误区

真实实现应使用单调时钟,并考虑取消、Retry-After 和抖动。只有适合重试的错误才重试,有副作用请求需要幂等机制,防止重复执行。

继续练习

把总预算减少到五秒,比较固定单次超时与按剩余时间动态分配;再区分限流、认证失败和暂时网络故障。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档