首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GAE :确保外部任务真正完成的首选方法是什么?

GAE :确保外部任务真正完成的首选方法是什么?
EN

Stack Overflow用户
提问于 2016-12-20 10:38:54
回答 1查看 27关注 0票数 0

我有一个工作流,通过向Redis队列添加任务,在Google AppEngine之外执行一些繁重的工作。当工作完成后,处理Redis队列的外部服务器将一个POST请求发送回GAE。

问题是,有时Redis队列失败,或者最后没有发出POST请求。这将导致GAE上的“等待”状态永不改变。

为了解决这个问题,我计划实施一个“健康检查”系统,在经过一段时间之后,它将自动关闭状态为“无效”,但我想知道从资源和定价的角度来看,哪一种是最好的方法。

选项1:当我向Redis队列提交任务时,我还会创建一个名为"Healthcheck“的新GAE任务,该任务将在5分钟内运行,如果当前任务未完成,则切换到”无效“并关闭它。

选项2:当将任务提交到Redis队列时,我使用while True循环挂起进程,并刷新当前状态,直到切换到完成为止。我还会设置一个Deadline exception观察者,在GAE调用截止日期时将状态更新为“无效”(一般为10分钟)。

赞成/反对:

  • 选项1的优点是没有挂起过程,因此在我看来使用的资源较少。这里的Cons是说,我的“健康检查”任务将和添加到Redis队列中的任务一样多(大约30k/天)。
  • 选项2的优点是不创建新的GAE任务,但将消耗更多的资源(在我看来毫无用处)。

你对这件事有什么建议,有没有第三种方法我没想过?你怎么做?

(预先谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-20 11:12:09

任务是免费使用的(除了非常便宜的存储空间)。我不明白为什么任务的数量是不利的。

在我看来,第二个选项并不是一个选项,因为它很昂贵,而且过程随时都可能死亡。

3d选项是有一个cron作业来查询处于“运行”状态的记录,以获得比定义的截止日期更多的内容。这将需要在两个字段(status,dt_created)上进行复合索引--与选项1相比,这将更加昂贵。

执行任务。

顺便说一句,这个问题是基于意见的,不太适合这样做,所以可以由主持人关闭。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41240335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档