Проверяет умение переводить тяжёлые синхронные операции (генерация PDF-отчётов) в асинхронный фоновый процесс с уведомлением пользователя, что критично для UX и масштабируемости.
Синхронная генерация большого PDF — это классический антипаттерн: HTTP-запрос держит соединение открытым минуты, таймауты прокси и браузера срабатывают, а сервер тратит память и CPU на одну задачу. Продуктово пользователь тоже страдает: он не понимает, идёт ли процесс, и не может закрыть вкладку.
API-эндпоинт перестаёт быть «тяжёлым»: он только валидирует параметры, создаёт запись задачи в БД со статусом pending и кладёт сообщение в очередь (RabbitMQ, Kafka, Redis, SQS). Отдельный воркер забирает задачу, генерирует PDF, загружает его в S3 и обновляет статус на done со ссылкой.
// POST /reports
const job = await db.jobs.create({ status: 'pending', params });
await queue.publish('pdf.generate', { jobId: job.id, params });
return res.status(202).json({ jobId: job.id });
// worker
queue.subscribe('pdf.generate', async ({ jobId, params }) => {
await db.jobs.update(jobId, { status: 'processing' });
const pdf = await renderPdf(params);
const url = await s3.upload(pdf);
await db.jobs.update(jobId, { status: 'done', url });
await notifyUser(jobId);
});Итог: асинхронная генерация отчётов через очередь и воркеры снимает нагрузку с веб-слоя, делает UX предсказуемым и позволяет масштабировать обработку независимо от API. Применять стоит всегда, когда операция длится дольше пары секунд или требует много ресурсов.
Уровень
Рейтинг:
5
Сложность:
6
Навыки
Node.js
RabbitMQ
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию