2012-04-05 67 views
0

排队后,我们如何获得排定执行的推送队列任务?如何避免任务队列中的执行延迟

我们是否需要使用Pull Queue来求助于cron作业?

我们在执行等待在我们的推送队列中的任务时会定期看到非常长的延迟(20分钟)。我们将在Queue中看到6,000多个任务,没有执行任何任务,并且在最后一分钟内没有执行任务。 然后这些任务最终被安排执行,并且当队列快速流失时,我们得到一个大的爆发峰值。

作为一个例子,一个队列定义看起来像这样:

<queue> 
    <name>example</name> 
    <target>1</target> 
    <rate>20/s</rate> 
    <bucket-size>40</bucket-size> 
    <max-concurrent-requests>10</max-concurrent-requests> 
    <retry-parameters> 
     <min-backoff-seconds>10</min-backoff-seconds> 
     <max-backoff-seconds>60</max-backoff-seconds> 
     <max-doublings>2</max-doublings> 
    </retry-parameters> 
</queue> 

回答

1

时滞可以与两个拉入队列发生和推送队列。任务队列提供可靠的任务执行,从不比请求更早,但有时晚于,例如,当从一个数据中心故障转移到另一个数据中心时。调度是尽力而为,而不是实时的。

+0

现在我们在推送队列中看到2小时的延迟。 @Eric - 为什么Pull Queue会有延迟?我认为专用的后端可以根据需要以任意块的形式工作,而不依赖于GAE任务调度。 – 2012-04-13 05:35:31

+0

@Caster - 即使有Pull Queues,系统也需要跟踪已添加,租用和删除的任务。就像主/从数据存储中的只读周期一样,有时候不会发布租约。 – 2012-06-18 12:28:53