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