在我的Google App Engine Go应用程序中,我需要每5-10秒执行一次任务。我知道使用标准Cron是行不通的,因为那样只能每分钟调度一次任务。类似地,在这样的线程中睡眠可能不是最好的选择。据我所知,我需要使用一些后端实例来执行这些任务。
如何配置我的应用程序,以及时和资源高效的方式处理这些任务?我是不是每天24小时运行后台,直到我需要做一些事情,还是有更有效的方法来执行一项任务,然后安排另一项任务在5-10秒内运行?
发布于 2014-02-13 19:42:20
这个问题突出了处理效率和服务质量(计时准确性)之间的紧张关系。最有效的方法是使用延迟或ETA选项的Task Queue (推送队列样式),但API没有提供关于准确性的服务级别协议。最精确的方法是你所描述的24/7后端,但它的开销要高得多--而且AppEngine不能保证它的正常运行时间。
我对基于Java的推送队列的经验是,超过90%的任务在计划时间的2秒内执行,而不到1%的任务开始时间延迟超过10秒。任何任务似乎都不会提前运行。
编辑-正如Zig从经验中指出的那样,AppEngine可能会在任何时候关闭后端,并且不提供自动重启它的方法。因此,后端的敏捷性被不可预测的停机时间所破坏。
总而言之,任务队列是高效和可靠的,但与后端相比不太及时,后端成本更高,可靠性更差。在大多数情况下,使用任务队列而不是后端。
https://stackoverflow.com/questions/21751437
复制相似问题