100% надежный процесс часов на Heroku?
Я использую Rails 5
на Heroku
для очень бережного приложения обработки платежей, которое будет выполнять большие объемы обработки.
Приложение не обладает большой функциональностью, поэтому оно там и размещается. Тем не менее, одна вещь, которую он должен делать на 100% надежно, это запускать задания по обработке платежей и запускать определенные только один раз. Если не 100% (потому что ничего не идеально), то 99,9999%.
Я выбрал Delayed Job
над Sidekiq
для этой дополнительной целостности базы данных. Я также планировал использовать Clockwork
драгоценный камень.
Однако после прочтения проблем возникает много проблем, связанных с многократным запуском процессов синхронизации при перезапуске dynos.
Мне интересно, как лучше решить эту проблему с Rails
/Heroku
, Как я могу очень, очень надежно выполнять определенные задания только один раз, несмотря на перезапуски и все остальное?
Кроме того, я забыл упомянуть, что некоторые задания могут быть перезапущены несколько раз. Вероятно, эти задания будут выполняться ежедневно или когда-либо. Я не беспокоюсь о них на самом деле.
Я также говорю о графике работ из-за действия Rails (они будут критическими). Возможно ли web
перезапуск dyno не позволит отложенному заданию планировать задание из моего кода, если он перезапустит mid-action?
1 ответ
С конечным автоматом. Вы устанавливаете состояние задания на :pending
когда работа создана. Когда задание начинает выполняться, измените состояние на :running
, Когда работа завершится, измените состояние на :complete
, Работать только тогда, когда они в :pending
состояние и иметь отдельный пакетный процессор, который проверяет :running
работы, которые достигли тайм-аута. Таким образом, когда задания были убиты до завершения, вы можете перезапустить их.