【问题标题】:Heroku clock process: how to ensure jobs weren't skipped?Heroku 时钟流程:如何确保作业不被跳过?
【发布时间】:2014-10-08 19:48:39
【问题描述】:

我正在构建一个依赖预定作业的 Heroku 应用。我们之前使用的是 Heroku 调度器,但时钟进程似乎更加灵活和健壮。所以现在我们使用时钟进程在特定时间/间隔将后台作业排入队列。

Heroku 的文档提到,与所有 dyno 一样,时钟 dyno 每天至少重新启动一次 - 这会导致时钟进程跳过预定作业的风险:“由于 dyno 每天至少重新启动一次,因此有些逻辑将需要在时钟进程启动时存在,以确保在测功机重新启动期间不会跳过作业间隔。” (见https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processes)

有哪些推荐的方法可以确保不跳过计划的作业,并重新排队任何错过的作业?

一种可能的方法是在作业运行/排队时创建数据库记录,并在时钟作业中定期检查预期记录的存在。最大的缺点是,如果时钟测功机存在系统性问题,导致它在很长一段时间内停机,那么我不能每 X 小时进行一次轮询以确保计划的作业成功运行,因为轮询发生在时钟测功机内。

您是如何处理时钟测功机弹性问题的?

谢谢!

【问题讨论】:

    标签: heroku cron scheduler clock clockwork


    【解决方案1】:

    您需要在某处存储有关工作的数据。在 Heroku 上,您没有任何关于您的代码只运行一次且一直运行的信息或保证(因为循环)

    你可以使用这样的项目(但不是很常用):https://github.com/amitree/delayed_job_recurring

    或者根据您的需要,您可以创建一个调度程序或进程,在接下来的 24 小时内安排作业,并且每 4 小时运行一次,以确保您的作业将被安排。并希望 heroku 调度程序至少每 24 小时工作一次。 并且至少有 2 名工人处理这些工作。

    【讨论】:

    • 这似乎有点“hacky”,奇怪的是没有经过验证的方法可以确保作业在需要运行时运行..
    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2021-05-22
    相关资源
    最近更新 更多