Legendary Trio
devlogquedulascheduling

Devlog #6: Устройство cron-планировщика

Cron-планировщик в Quedula отвечает за одну задачу: периодически проверять, есть ли публикации, время которых наступило, и отправлять их в очередь.

Звучит просто, но есть нюансы. Что если планировщик перезапустился и пропустил несколько минут? Что если одна публикация обрабатывается долго и следующая запустится с задержкой?

Наш подход: планировщик смотрит на все задачи со статусом «ожидает» у которых scheduled_at <= now(). Это гарантирует что «просроченные» задачи тоже будут обработаны, просто немного позже.

Для защиты от двойного запуска используем пессимистичную блокировку при выборке задач из базы.