截断的指数退避算法

截断的指数退避算法是适用于网络应用的标准错误处理策略,使用这种策略时,客户端会定期重试失败的请求,并不断增加各次请求之间的延迟时间。客户端应对所有发送到 Cloud Storage、并且返回 HTTP 5xx429 响应代码的请求使用截断的指数退避算法(包括数据或元数据的上传和下载请求)。

如果您要开展以下任务,则必须了解截断的指数退避算法的工作原理:

如果您使用的是 Google Cloud Platform Console,则 Console 会代表您向 Cloud Storage 发送一个请求,并处理任何必要的退避操作。

示例算法

指数退避算法以指数方式重试请求(不断增加各次重试之间的等待时间,直到达到最大退避时间)。示例如下:

  1. 向 Cloud Storage 发出请求。

  2. 如果请求失败,则等待 1 + random_number_milliseconds 秒,然后重试请求。

  3. 如果请求失败,则等待 2 + random_number_milliseconds 秒,然后重试请求。

  4. 如果请求失败,则等待 4 + random_number_milliseconds 秒,然后重试请求。

  5. 依此类推,最多可达到 maximum_backoff 的时间。

  6. 继续等待并重试,直到达到最大重试次数(但不增加各次重试之间的等待时间)。

其中:

  • 等待时间是 min(((2^n)+random_number_milliseconds), maximum_backoff),其中,n 在每次迭代(请求)后会增加 1。

  • random_number_milliseconds 是小于或等于 1000 的随机毫秒数。这有助于避免出现此类情况:许多客户端在某些情况下同步并且同时执行重试操作,从而按照同步的频率发送每一波请求。在每次重试请求后,将重新计算 random_number_milliseconds 的值。

  • maximum_backoff 通常为 32 或 64 秒。哪个值更为适当,这取决于用例。

达到 maximum_backoff 时间后,您仍然可以继续重试。之后执行的重试不需要继续增加退避时间。例如,如果客户端使用 64 秒的 maximum_backoff 时间,则在达到此值后,客户端可以每 64 秒重试一次。在某个时刻,应阻止客户端无限重试。

客户端在各次重试之间应等待的时长以及应重试的次数取决于您的用例和网络条件。例如,与桌面客户端相比,同一应用的移动客户端可能需要重试更多的次数和设置更长的时间间隔。

如果在超过 maximum_backoff 以及允许重试的任何额外时间之后,请求仍然失败,请使用支持和帮助下列出的其中一种方法报告或记录错误。

实现示例

用于 Cloud Storage 的截断指数退避算法的示例如下:

可以用于 Cloud Storage 的客户端库中实现的退避算法的示例如下:

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud Storage
需要帮助?请访问我们的支持页面