qwane

надёжность

Всё, что дольше секунды, должно уходить в фон

Отправка письма, генерация отчёта, обработка записи. Пока это делается в запросе пользователя, оно однажды не сделается.

Операция, выполняемая прямо в HTTP-запросе, живёт ровно столько, сколько браузер готов ждать. Пользователь закрыл вкладку — задача умерла на середине. Провайдер письма ответил ошибкой — письмо потеряно навсегда, потому что повторять некому. Отчёт строится сорок секунд, и всё это время пользователь смотрит на спиннер, гадая, работает оно или нет.

Очередь превращает эту хрупкость в инженерную задачу с известным решением. Работа кладётся в очередь, обрабатывается отдельным процессом, при падении повторяется с задержкой, а после нескольких неудач попадает в отдельный список, где её видит человек. Пользователь получает не спиннер, а обещание и уведомление. В Partnetix за это отвечают Redis и BullMQ: выплаты, уведомления, тяжёлые операции живут в очередях, а не в запросе.

Что ломается, пока это делают руками

Что происходит с задачей при сбое

СобытиеБез очередиС очередью
Пользователь закрыл вкладкуОперация оборваласьРабота уже в очереди, идёт своим ходом
Внешний сервис недоступенОшибка пользователюПовтор с нарастающей задержкой
Повтор прошёл дваждыДвойная отправка или списаниеЗадача идемпотентна, второй раз ничего не делает
Задача упала пять разТишинаУезжает в список неудач, человек видит
Пик нагрузкиВсё замедляется для всехОчередь растёт, интерфейс отвечает как обычно

Что входит

Для кого

продуктам, где что-то отправляется, считается или генерируется дольше секунды.

Частые вопросы

Нам хватит cron.
Хватит, пока задача одна и падение не страшно. Cron не умеет повторять, приоритизировать и показывать, что именно не выполнилось. Это разные инструменты, а не разные названия одного.
Очередь — это лишняя инфраструктура.
Это Redis и один процесс-обработчик. Дороже обходится письмо, которое клиент не получил, и никто об этом не узнал.

Есть процесс, который держится на людях?

Опишите его — скажу, что здесь автоматизируется, а что не стоит трогать.

Обсудить проект

Смежные процессы