devlogquedulascheduling
Devlog #6: Устройство cron-планировщика
Cron-планировщик в Quedula отвечает за одну задачу: периодически проверять, есть ли публикации, время которых наступило, и отправлять их в очередь.
Звучит просто, но есть нюансы. Что если планировщик перезапустился и пропустил несколько минут? Что если одна публикация обрабатывается долго и следующая запустится с задержкой?
Наш подход: планировщик смотрит на все задачи со статусом «ожидает» у которых scheduled_at <= now(). Это гарантирует что «просроченные» задачи тоже будут обработаны, просто немного позже.
Для защиты от двойного запуска используем пессимистичную блокировку при выборке задач из базы.