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

时间:2016-09-14 17:43:56

标签: ruby-on-rails heroku delayed-job ruby-on-rails-5 clockwork

我在Rails 5上使用Heroku用于非常精简的付款处理应用,该应用将进行大量处理。

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

我选择了Delayed Job而不是Sidekiq来获得额外的数据库完整性。我还计划使用Clockwork gem。

在阅读问题之后,似乎在dynos重启时,时钟进程被运行了很多次。

我想知道使用Rails / Heroku解决此问题的最佳方法是什么。尽管重启和其他任何事情,我怎么能非常非常可靠地运行某些工作呢?

另外,我忘了提到一些工作可以多次重新运行。这些工作很可能是那些每天或每天都要运行的工作。我真的不关心他们。

我也在谈论Rails行动中的作业计划(那些将是关键行动)。是web dyno重启是否有可能阻止延迟作业从我的代码中调度作业,如果它重新启动中间动作?

1 个答案:

答案 0 :(得分:1)

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