GCP PubSub 重试退避时间

GCP PubSub retry backoff timing

我为我的 Google Pub/Sub 订阅配置了一个死信策略:

...
  dead_letter_policy {
    dead_letter_topic = foobar
    max_delivery_attempts = x
  }

  {
    "minimumBackoff": y,
    "maximumBackoff": z
  }
...

插入各种值,我没有看到重试发生在我期望的时间。例如

max_delivery_attempts: 5 最小退避: 10 秒 最大退避: 300 秒

重试间隔秒数: 15 17 20 29

max_delivery_attempts: 30 最小退避: 5 秒 最大退避: 600 秒

重试间隔秒数: 12 9 9 14 15 18 24 24 45 44 58 81 82 120 ...,等等。

从这个测试来看,您似乎需要较高的最大尝试值才能获得实际的指数退避?对于我的第一个数据集,我预计我最后两次尝试之间的时间会接近 300。从我的第二个数据集中,似乎只有将最大尝试次数设置为最大值 100 时才会出现这种情况. 这个假设正确吗?

(另外,这是一个请求订阅)

谢谢

相关回答:

基于minimum_backoff和maximum_backoff的指数退避大致遵循上述问题中提到的等式(具有随机因子)。与您的问题相关的因素是

  1. 推导退避间隔时,最大退避不是计算的一部分。最大退避设置用于确保我们退避的次数不会超过配置,即使退避间隔计算得出这样的答案也是如此。从您的测试中可以看出,间隔持续时间的增长率仍会随着重试而增加。
  2. 导致退避间隔增长的倍增因子是系统内部细节,客户端不应依赖于它。

如果您希望最大退避在死信事件发生之前发生,我建议从更高的最小退避配置开始。