我有一个工作流程,包括通过向Redis队列添加任务,在Google AppEngine之外做一些繁重的工作。 处理完Redis队列的外部服务器会在完成工作后将POST请求发送回GAE。
问题是,有时Redis队列失败,或者最后没有发出POST请求。这导致等待"在GAE上声明永远不会改变。
为了解决这个问题,我计划实施"健康检查"系统将自动关闭状态为"无效"经过一段时间后,我想知道哪一个是最好的方法,从资源和定价。
选项1 :当我向Redis队列提交任务时,我还会创建一个名为" Healthcheck"的新GAE任务,该任务将在5分钟内运行,如果当前任务没有完成,请将其切换为"无效"并关闭它。
选项2 :将任务提交到Redis队列时,我使用while True
循环挂起进程并刷新当前状态,直到它切换为完成。我还会设置一个Deadline exception
观察者,将状态更新为"无效"当GAE调用截止日期时(一般情况下,10分钟)。
PROs / CONs:
你有什么建议,有没有第三种方法可以做到这一点我没有想过?你会做什么?
提前谢谢你:)
答案 0 :(得分:1)
任务可以免费使用(除了非常便宜的存储空间)。我不明白为什么一些任务是一个缺点。
在我看来,第二个选项不是一个选项,因为它很昂贵并且过程可能随时死亡。
3d选项是有一个cron作业来查询处于“运行”状态的记录超过定义的截止日期。这将需要2个字段上的复合索引(status,dt_created) - 与选项#1相比将更加昂贵。
执行任务。
顺便说一下,这个问题是基于意见的,并不是最适合SO的,所以可以由主持人关闭。