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