Фоновые задачи и расписание
Урок 17 из 26 курса «Вайбкодинг: курс с нуля». Бесплатно, с анимациями и тестом.
Пользователь не ждёт
Пример на урок: ты ведёшь сайт школьного медиа с рассылкой. Некоторые дела долгие: отправить письмо тысяче подписчиков, сжать видео, собрать отчёт. Если делать их, пока человек ждёт после клика, он минутами смотрит на крутилку. Решение: фоновая задача. Сервер сразу отвечает «принято», а работу делает потом. Задачи встают в очередь, как карточки на схеме, и их по одной берёт воркер: программа-исполнитель.
Cron: работа по будильнику
Cron (крон): запуск задачи по расписанию, как будильник. «Каждый день 9:00» на схеме: сервер сам проснётся и разошлёт напоминание «сегодня дедлайн статьи». Расписание пишут коротким кодом вроде 0 9 * * *: минута 0, час 9, а звёздочки значат «любой день, любой месяц, любой день недели». Ловушка: время часто считается по UTC, всемирному времени, а не по твоему. Проверь в доках.
Где это запускать
Cloudflare: Cron Triggers запускают Worker по расписанию. Vercel: Cron Jobs в нужное время вызывают адрес твоего API. GitHub Actions (автоматизация внутри GitHub) умеют запускать скрипт по расписанию, но точную минуту не обещают. Inngest: сервис для цепочек шагов, например «зарегистрировался, через три дня напомни». Бери то, где уже живёт проект. Лимиты смотри на сайте сервиса.
Упало? Повтори
Задача может упасть: почтовый сервис на минуту лёг, интернет моргнул. Хорошая система не сдаётся, а делает повтор (retry) через паузу: это стрелка «повтор» на схеме. В Inngest каждый шаг повторяется сам, а уже сделанные шаги заново не запускаются. Попроси агента: «добавь повторы с паузой и пиши в лог, если задача так и не прошла». Лог: журнал, куда сервер записывает, что происходило.
Дважды не списывать
Повторы опасны, если шаг уже успел сработать. Пример: списали оплату за подписку, а ответ потерялся по дороге. Слепой повтор спишет второй раз. Нужна идемпотентность: повтор того же шага даёт тот же результат, что и один запуск. Как: у каждой операции уникальный номер, и сервер сначала проверяет «это уже сделано?». Вебхуки на схеме тоже бывают дважды, правило то же.
Проверь себя
- Зачем рассылку на тысячу писем делать фоновой задачей?
Правильный ответ: Чтобы человек не ждал, пока всё отправится. Сервер сразу отвечает «принято», а письма уходят потом из очереди. Сервер при этом всё равно работает. - Что такое cron?
Правильный ответ: Запуск задачи по расписанию. Cron работает как будильник: «каждый день в 9:00». Повтор после ошибки называется retry, а журнал событий называется лог. - Что значит идемпотентность шага с оплатой?
Правильный ответ: Повтор шага не спишет деньги второй раз. Ошибки бывают всегда. Идемпотентность значит, что повтор безопасен: сервер видит номер операции и не делает её второй раз.