Google应用引擎中“队列桶大小”是什么意思?

24

谷歌应用引擎任务队列的配置如下(示例)

  <queue>
    <name>mail-queue</name>
    <rate>5/m</rate>
    <bucket-size>10</bucket-size>
  </queue>

这里的“bucket-size”是什么意思?我在Google App Engine文档中找不到详细的说明。

将其指定为10是否意味着如果在某一时刻排队了100个任务,只有其中的10个会被放入队列,其余的将被忽略?

1个回答

36

在此链接中详细描述了 bucket-size:

限制队列处理的突发性,即更高的 bucket size 允许队列执行速率的更大波动。例如,考虑一个速率为5/s并且 bucket size 为10的队列。如果该队列已经长时间处于非活动状态(允许其“令牌桶”填满)并且有20个任务突然入队,则它将立即执行10个任务。但在下一秒钟,只能执行5个任务,因为“令牌桶”已被耗尽并以每秒5个的指定速率重新填充。

如果未为队列指定 bucket_size,则默认值为5。

对于您的情况,这意味着,如果排队了100条消息,则只有10条直接被执行,每隔一分钟才会执行另外5条。您不会失去任何消息,但如果您的 bucket-size 和速率过低,则它们将排队等待执行。


太棒了!而且很奇怪,'java'任务队列文档没有这个信息,而'python'文档有!我一直以为Java和Python的文档内容会相似。因为我在Java中没有找到这个东西,所以我就假设它在Python中也不会有!感谢您指出这一点。 - Gopi
啊,我在Java中也找到了它。但是它不像Python那样全面。http://code.google.com/intl/en/appengine/docs/java/config/queue.html - Gopi
这是一个最新的链接: https://developers.google.com/appengine/docs/java/config/queue#Queue_Definitions - Lior
最大处理速率为500,但最大桶大小仅为100。在这种情况下它是如何工作的?如果突发流量小于处理速率,这有点奇怪,我是否有什么误解? - marcadian
更新链接,提供与@halfdan发布的类似信息的官方信息:https://cloud.google.com/appengine/docs/python/config/queue?hl=zh-cn - hamx0r
嗨@halfdan,在您最后的示例中,“每隔一分钟再多5个”,即使每个请求需要超过10分钟(例如),这也会发生吗? 因为在这种情况下,桶不会为空,请求仍在处理中。 或者,桶只有在队列处于非活动状态并突然接收到太多请求时才有意义?谢谢 - javaTry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接