Подтвердить что ты не робот

Хроку часы процесс: как обеспечить рабочие места не были пропущены?

Я создаю приложение Heroku, которое полагается на запланированные задания. Раньше мы использовали планировщик Heroku, но процессы синхронизации выглядят более гибкими и надежными. Итак, теперь мы используем тактовый процесс для установки фоновых заданий в определенные моменты времени/интервалы.

В документах Heroku упоминаются, что тактовые генераторы так же, как и у всех динамиков, перезапускаются не реже одного раза в день - и это сопряжено с риском того, что процесс синхронизации пропустит запланированное задание: "Поскольку dynos перезапускаются не реже одного раза в день, некоторая логика необходимо будет существовать при запуске тактового процесса, чтобы гарантировать, что интервал задания не был пропущен во время перезапуска dyno". (См. https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processes)

Каковы рекомендуемые способы обеспечения того, чтобы запланированные задания не были пропущены, а также повторное включение любых заданий, которые были пропущены?

Один из возможных способов - создать запись базы данных, когда задание выполняется/завершено, и проверять наличие ожидаемых записей через регулярные интервалы в задании часов. Самым большим недостатком этого является то, что если есть системная проблема с синхронизатором часов, которая заставляет его работать в течение значительного периода времени, то я не могу делать опрос каждые X часов, чтобы гарантировать, что запланированные задания были успешно запущены, поскольку что опрос происходит в течение тактового генератора.

Как вы столкнулись с проблемой отказоустойчивости часов?

Спасибо!

4b9b3361

Ответ 1

Вам нужно будет хранить данные о заданиях где-нибудь. На Heroku у вас нет никаких сведений или гарантий относительно того, что ваш код работает только один раз и все время (из-за езды на велосипеде)

Вы можете использовать такой проект (но не очень): https://github.com/amitree/delayed_job_recurring

Или в зависимости от ваших потребностей вы можете создать планировщик или процесс, которые планируют задания в течение следующих 24 часов и запускаются каждые 4 часа, чтобы быть уверенными, что ваши задания будут запланированы. И надеюсь, что планировщик героку будет работать не реже одного раза в сутки. И иметь как минимум 2 рабочих, обрабатывающих задания.