开始使用免费开始使用

实现带抖动的指数退避

您正在对接一个不稳定的第三方支付 API,偶尔会返回瞬时错误。为避免在服务本就吃紧时继续施压,您将实现一种重试策略:使用带完整抖动(full jitter)的指数退避,在每次尝试之间逐步增加等待时间,并加入随机性,避免大量客户端在同一时刻集中重试。

这里提供了一个 flaky_call(payload) 函数:它在前 3 次调用会因 TransientError 失败,第 4 次会成功。timerandomTransientError 已经加载。

本练习是课程的一部分

在 AWS 上开发应用

查看课程

练习说明

  • try 代码块内,用 payload 调用 flaky_call,并返回其结果。
  • 使用 base 和当前的 attempt 计数计算本次尝试的指数上限(cap)。
  • 通过 random.uniform()0cap 之间随机取值,应用完整抖动。

交互式实操练习

通过完成这段示例代码来试试这个练习。

def retry_with_backoff(payload, max_attempts=5, base=0.2):
    last_error = None
    for attempt in range(max_attempts):
        try:
            # Try the call
            return ____(payload)
        except TransientError as err:
            last_error = err
            # Cap grows exponentially with each attempt
            cap = ____ * (2 ** attempt)
            # Pick a random wait between 0 and cap (full jitter)
            wait = random.____(0, cap)
            time.sleep(wait)
    # All attempts failed; surface the last error
    raise last_error


result = retry_with_backoff({"order_id": 42})
print(result)
编辑并运行代码