Обробка файлів у продакшн передбачає багаторівневий набір завдань по всьому пайплайну — від прийому та трансформації до зберігання, контролю доступу та отримання. Кожен рівень має власну поверхню безпеки та обмеження продуктивності, що вимагають свідомого підходу.
Стратегії підписаних URL, обробка паралельних завантажень та пайплайни обробки, що функціонують без блокування серверних ресурсів, — це рішення, що мають найбільш тривалий вплив на поведінку системи під реальним навантаженням.
Більшість продуктів досягають переломного моменту у роботі з файлами: фото профілю, що потребують ресайзу та доставки через CDN; контракти або рахунки, що генеруються на вимогу як PDF; документи, достатньо чутливі, щоб публічний URL був проблемою безпеки; завантаження достатньо великого розміру, щоб inline-обробка блокувала сервер; або масові експорти — ZIP-архіви, таблиці, брендовані звіти — що мають виконуватись у фонових джобах. Коли робота з файлами виходить за межі одного ендпоінту завантаження, рівень доступу і конвеєр обробки потребують продуманого проектування.
Цей сервіс охоплює AWS S3 з доставкою через CloudFront, контроль доступу через підписані URL з TTL та IAM-скопінгом, обробку зображень через Sharp або ImageMagick, генерацію PDF за допомогою Puppeteer або PDFKit та асинхронні черги джобів. Фокус — на рівні доступу: підписані URL, обмежені права, обробка терміну дії — і на конвеєрах обробки, що справляються з паралельними джобами без вузьких місць.
Вимоги до роботи з файлами суттєво відрізняються залежно від типу продукту. Нижче — найпоширеніші сценарії та ключові інженерні рішення для кожного з них.
| Сценарій | Стек | Ключове рішення |
|---|---|---|
| Захищений доступ до файлів | AWS S3 + CloudFront + підписані URL | Управління TTL, IAM-скопінг, обробка закінчення URL |
| Обробка зображень | Sharp / ImageMagick + Lambda | Ресайз на вимогу vs попередньо згенеровані варіанти, вартість при масштабуванні |
| Генерація PDF | Puppeteer / PDFKit + черга джобів | Рендер шаблонів, вбудовування шрифтів, управління асинхронними джобами |
| Завантаження кількох файлів | S3 multipart + відстеження прогресу | Поновлювані завантаження, стратегія чанкінгу, прогрес на стороні клієнта |
Say hi at hi@levchenkod.com