首页 >后端开发 >Golang >Google Pub/Sub 的带有指数退避的 RetryPolicy 如何处理最小、最大退避和随机化?

Google Pub/Sub 的带有指数退避的 RetryPolicy 如何处理最小、最大退避和随机化?

DDD
DDD原创
2024-10-30 17:28:02462浏览

How does Google Pub/Sub's RetryPolicy with Exponential Backoff handle minimum, maximum backoff and randomization?

Google Pub/Sub 的 RetryPolicy 中的指数退避如何工作

Google Pub/Sub 最近引入了 RetryPolicy 功能来增强服务器中的错误处理端操作。此策略的配置选项包括MinimumBackoff 和MaximumBackoff 参数。

MinimumBackoff 和MaximumBackoff 配置

MinimumBackoff 参数指定第一次重试之前的初始等待时间。 MaximumBackoff 参数定义后续重试之间允许的最长时间。这些参数对应于 github.com/cenkalti/backoff 中实现的指数退避算法中的 InitialInterval 和 MaxInterval。

指数退避算法

在指数退避中,每个随机间隔使用以下公式计算:

retryInterval = InitialInterval * (random value in range [1 - RandomizationFactor, 1 + RandomizationFactor])

其中InitialInterval 是MinimumBackoff,随机值在重试延迟中引入随机化。 retryInterval 由 MaximumBackoff 限制。

示例程序

提供的程序演示了具有不同的 MaximumBackoff 和 MaximumBackoff 值的指数退避算法的行为。

程序输出的观察结果

  • 默认退避:将MinimumBackoff设置为5s,MaximumBackoff设置为60s,重试之间的时间逐渐增加,平均间隔大约10秒。这表明 RandomizationFactor 接近 1。
  • 较小的退避: 将 MaximumBackoff 和 MaximumBackoff 分别设置为 1 秒和 2 秒,重试之间的时间始终约为 3 秒。这表明在这种情况下,MaximumBackoff 限制优先。

随机化和乘数

RetryPolicy 使用的指数退避算法包括随机化,以确保重试并不总是在相同的时间间隔内进行。但是,提供的程序的输出并未显示重试间隔呈指数增长的清晰模式,这表明未使用 Multiplier 参数(该参数会使每次迭代的重试间隔加倍)。

MaxElapsedTime

与 github.com/cenkalti/backoff 中的指数退避实现不同,RetryPolicy 没有等效的 MaxElapsedTime 参数。这意味着如果服务器不可用,重试将无限期地继续,除非应用程序独立处理和限制重试。

以上是Google Pub/Sub 的带有指数退避的 RetryPolicy 如何处理最小、最大退避和随机化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn