Кейс: генерация отчётов и тяжёлые фоновые задачи

↑ 8.4 Backend System Design · ← Предыдущая · → Следующая

Обязательно~3 мин чтенияУровень: senior

Зачем это на собесе

Как проектировать долгие операции, не блокируя API.

Объяснение

Требования: пользователь запрашивает отчёт (часто минуты и гигабайты данных), система не должна падать от пиков, нужен статус выполнения, отмена, история, безопасная выдача результата.

flowchart LR
  U[Клиент] -->|POST /reports| API
  API -->|задача| DB[(reports: status)]
  API -->|событие| QОчередь
  API -->|202 + id| U
  Q --> W[Воркеры отчётов]
  W --> SRC[(Реплика БД / ClickHouse)]
  W --> S3[(MinIO)]
  W --> DB
  U -->|GET /reports/id| API
  API -->|pre-signed URL| U

Решения:

ВопросРешение
АсинхронностьPOST → 202 Accepted + Location; клиент опрашивает или получает уведомление
Очередьброкер, приоритеты, ограничение параллелизма
Изоляцияотдельные воркеры и реплика/OLAP-источник: OLTP не страдает
Надёжностьстатусы в БД (queued/running/done/failed), повтор при падении воркера, идемпотентный ключ
Большие данныепотоковая генерация, чанки, файлы в объектное хранилище, а не в память
Отмена/таймаутCancellationToken, дедлайн задачи
Выдачаpre-signed URL со сроком действия, права доступа
Кэшодинаковые параметры → готовый результат (по хэшу параметров)
Справедливостьлимит задач на пользователя/тенанта, приоритеты
ОчисткаTTL файлов отчётов
Наблюдаемостьдлительность, длина очереди, доля ошибок

Идентификация «зависших» задач: heartbeat воркера и повторная постановка при его пропадании.

Нюансы и подводные камни

  • Тяжёлые запросы к основной БД замедляют весь сервис.
  • Потеря задач при перезапуске воркера без подтверждения.
  • Пользователь запускает один отчёт много раз: дедупликация.
  • Неограниченный размер результата: лимиты и предупреждения.
  • Утечка данных через публичные ссылки на файлы.

Практика

  1. Реализуйте асинхронный API отчётов со статусами и pre-signed URL.
  2. Добавьте heartbeat и повторную постановку зависших задач.
  3. Ограничьте параллелизм и объём на пользователя.

Вопросы с ответами

Связанные темы