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 работы, которые достигли тайм-аута. Таким образом, когда задания были убиты до завершения, вы можете перезапустить их.

Другие вопросы по тегам