Heroku 上 100% 可靠的时钟进程?

100% reliable clock process on Heroku?

我在 Heroku 上使用 Rails 5 作为一个非常精简的支付处理应用程序,它将进行大量处理。

该应用程序没有太多功能,这就是它被托管在那里的原因。但是,它需要 100% 可靠地完成的一件事是 运行 支付处理作业,而 运行 某些只需要一次。如果不是 100%(因为没有什么是完美的),则为 99.9999%。

为了这个额外的数据库完整性,我选择了 Delayed Job 而不是 Sidekiq。我还打算使用 Clockwork gem.

阅读问题后,虽然当 dynos 重新启动时,时钟进程似乎有很多问题 运行 很多次。

我想知道用 Rails/Heroku 解决这个问题的最佳方法是什么。我如何才能非常、非常可靠地 运行 某些作业仅一次,尽管重新启动和其他任何事情?


此外,我忘了说有些工作可以重新 运行 多次。这些工作很可能是每天或任何时候设置为 运行 的工作。我真的不关心他们。

我也在谈论如何从 Rails 操作中安排作业(这些将是关键操作)。 web dyno 重新启动是否可能会阻止延迟作业在我的代码中重新启动时从我的代码中安排作业?

有状态机。创建作业时,您将作业的状态设置为 :pending。当作业开始 运行 时,将状态更改为 :running。作业完成后,将状态更改为 :complete。仅在作业处于 :pending 状态时启动作业,并有一个单独的批处理程序来检查 :running 已超时的作业。这样,当作业在完成之前被杀死时,您可以重新启动它们。