【问题标题】:Google App Engine - Task Queues vs Cron JobsGoogle App Engine - 任务队列与 Cron 作业
【发布时间】:2010-11-04 21:27:56
【问题描述】:

最新的 Google App Engine 版本支持 Python 中的新 Task Queue API。我将这个 API 的功能与现有的Cron service 进行比较。对于非用户启动的后台作业,例如抓取 RSS 提要并按天进行解析。任务队列 API 是否可以且应该用于此类非用户发起的请求?

【问题讨论】:

    标签: google-app-engine cron


    【解决方案1】:

    直到我观看了他们解释的 Google I/O 视频之前,我并不太了解这些差异。官方来源通常是最好的。

    youtube video

    slides from the presentation

    【讨论】:

      【解决方案2】:

      我的看法是,如果我只是解析一个 RSS 提要,一个 Cron 作业可能就足够了。如果我必须解析用户或任何其他系统变量在运行时指定的 X 个 RSS 提要,那么我每次都会选择任务。

      我之所以这么说,是因为过去我不得不定期执行许多用户定义的 twitter 搜索,并且通过 Cron 作业,我最终制作了一个非常糟糕的排队系统来执行需要运行的请求 - 它没有规模,它并没有帮助,而且 cron 作业的最小时间间隔只有 1 分钟(我要执行的搜索比一天中的分钟要多)。

      任务很酷的一点是你可以给它们一个 ETA,所以你可以说我希望它在未来 47 秒执行,或者我希望它在 12:30 执行。

      【讨论】:

        【解决方案3】:

        我会说“有点”。关于任务队列要记住的事情是:

        1) 每分钟/小时/天的操作限制与定期重复某些操作不同。即使将令牌桶大小设置为 1,我也不认为您可以保证这些重复将均匀分布。这取决于他们说队列实现为令牌桶时的严重程度,以及该语句是否应该是接口的保证部分。这是实验室,还没有任何保证。

        2) 如果任务失败,则重新排队。如果一个 cron 作业失败,那么它会被记录下来并且不会重试,直到它再次到期。因此,cron 作业的行为方式与添加自身副本然后刷新提要的任务或刷新提要然后添加自身副本的任务不同。

        很可能使用任务来模拟 cron 作业,但我怀疑这是否值得。如果您尝试解决运行时间超过 30 秒(或达到任何其他请求限制)的 cron 作业,那么您可以将工作分成几部分,并有一个 cron 作业将所有部分添加到任务队列。有一些关于异步 urlfetch 的讨论(在 GAE 博客中?),这可能是更新 RSS 提要的最终最佳方式。

        【讨论】:

        • async urlfetch 今天存在,请参阅code.google.com/appengine/docs/python/urlfetch/…——但我不确定它是如何成为更新 RSS 提要的最佳方式;也许你有别的想法?
        • 出于某种原因,我期待在获取的数据到达时会回调 URL。不过,不知道我从哪里得到这个想法,也许是我的想象力。但是,如果您要更新大量 RSS 提要,则需要 HTTP 请求以某种方式并行,并且仅任务队列就只允许这么多同时发生的实例。您指向的 API 很可能已经完成了这项工作。
        • 值得补充的是,您还可以使用 cron 作业来填充/管理任务队列,因此您可以双向使用。
        • @Roberto:随意。这是一个“社区维基”的答案,所以你可以编辑它。我不再使用 GAE,也不知道写这篇文章后发生了什么变化。
        猜你喜欢
        • 2012-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-31
        • 2014-05-16
        相关资源
        最近更新 更多