GAE Golang - 如何配置后端每X秒执行一次任务?

时间:2014-02-13 10:25:28

标签: google-app-engine go scheduled-tasks sleep backend

在我的Google App Engine Go应用程序中,我需要每5-10秒执行一次任务。我知道使用标准Cron是行不通的,因为它只能每分钟安排任务。同样,在这样的线程中睡觉可能不是最好的选择。据我所知,我需要使用一些后端实例来执行这些任务。

如何配置我的应用以及时和资源有效的方式处理此类任务?我是否只是全天候运行后端并打勾,直到我需要做某事,或者是否有更有效的方法来执行任务,然后安排另一项任务在5-10秒内运行?

1 个答案:

答案 0 :(得分:2)

这个问题突出了处理效率和服务质量(时间准确性)之间的紧张关系。最有效的方法是使用延迟或ETA选项的Task Queue(推送队列样式),但API不提供有关准确性的服务级别协议。最准确的方法是您描述的24/7后端,但其开销更高[编辑 - 并且AppEngine不保证其正常运行时间]。

我使用基于Java的推送队列的经验是,超过90%的任务在预定时间的2秒内执行,而1%的任务在迟到的时间内启动超过10秒。似乎没有任何任务提前运行。

编辑 - 正如Zig从经验中指出的那样,AppEngine可能随时关闭后端并且不提供重启它的自动方式。因此,后端的迅速性被不可预测的停机时间所破坏。

总之,任务队列是高效可靠的,但不如后端更及时,后端成本更高,可靠性更低。在大多数情况下使用任务队列而不是后端。