【问题标题】:How to avoid execution delays in Task Queues如何避免任务队列中的执行延迟
【发布时间】:2012-04-19 11:49:46
【问题描述】:

我们如何在入队后尽快安排推送队列任务执行?

我们是否需要使用 Pull Queues 来代替 cron 作业?

我们会定期看到在执行推送队列中等待的任务时出现很长的延迟(20 分钟)。我们将在队列中看到 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>

【问题讨论】:

    标签: google-app-engine task-queue scheduled-tasks


    【解决方案1】:

    拉队列和推队列都可能出现延迟。任务队列提供可靠的任务执行,从不早于请求,但有时会晚于请求,例如从一个数据中心故障转移到另一个数据中心时。调度是尽力而为的,而不是实时的。

    【讨论】:

    • 我们现在看到推送队列延迟了 2 小时。 @Eric - 为什么拉队列会有延迟?我认为一个专用的后端可以在任何需要的块中处理尽可能多的工作,而不依赖于 GAE 任务调度。
    • @Caster - 即使使用拉取队列,系统也需要跟踪已添加、租用和删除的任务。就像主/从数据存储中的只读周期一样,有时不会发出租约。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多