
Как мы перестали проксировать картинки через бэкенд и подружили PWA c S3 через presigned URL
za-ek2 17 минут назад Как мы перестали проксировать картинки через бэкенд и подружили PWA c S3 через presigned URL Средний 4 мин 947 Веб-разработка * Обработка изображений * Кейс Из песочницы История о том, как желание...
Anthropic — What company has the best second artificial intelligence model at the end of June?
Значимый прорыв формирует отрасль ИИ: za-ek2 17 минут назад Как мы перестали проксировать картинки через бэкенд и подружили PWA c S3 через presigned URL Средний 4 мин 947 Веб-разработка * Обработка изображений * Кейс Из песочницы История о том, как желание добавить загрузку фотографий в PWA‑приложение вылилось в пересмотр архитектуры, борьбу с дублированием трафика и внедрение прямой загрузки в MinIO с модерацией в Telegram‑боте. Когда в нашем PWA‑приложении возникла задача добавить загрузку изображений, первое, что пришло в голову — классическая схема: клиент → бэкенд → S3. Но стоило копнуть глубже и учесть особенности PWA (офлайн, кэширование), несколько типов файлов с разными правами доступа и требования масштабирования, как наивное решение рассыпалось.
В итоге мы пришли к архитектуре с presigned URL, разгрузили бэкенд и получили гибкую систему модерации. Делюсь этим опытом и ключевыми шишками, которые набил. ЗадачаВ PWA‑приложение требовалось добавить загрузку фотографий.
Технические детали
Несколько типов:Изображения для обработки нейросетями;Превью для карточек (могут быть публичными или с ограниченным доступом);Файлы, которые пользователь может удалить после обработки. С самого начала было понятно, что функционал могут использовать не по назначению, поэтому нужна модерация. Вариант с мультимодальной моделью выглядел логично: очередь, воркер, классификация.
Но на старте, в пилотном режиме, мы решили обойтись более простым решением — ботом в Telegram с ручным подтверждением. Решение «в лоб» и почему от него отказалисьПервая реализация была прямолинейной:Клиент загружает файл на бэкенд. Бэкенд сохраняет его в S3 (MinIO).
При отображении бэкенд проверяет права и проксирует файл с S3 обратно клиенту. Сразу стали очевидны проблемы:Двойной трафик — каждый загруженный мегабайт прокачивается через сервер дважды. Забитые коннекты — при большом количестве клиентов быстро исчерпываются доступные соединения на бэкенде.
Отраслевые последствия
Нет CDN — классический CDN сложно прикрутить, потому что доступ определяется динамически в момент запроса. Дорогое масштабирование — вынести проверку прав на отдельный сервер (S3 + прокси‑сервер с запросами к бэкенду) технически можно, но это лишние звенья и расходы. Было ясно: схема с проксированием плохо ложится на PWA с офлайн‑кэшированием и фоновой синхронизацией.
Нужно было искать более «нативный» для S3 подход. Спасительный presigned URLПосле изучения документации MinIO (и оригинального S3 API) выяснилось, что он поддерживает механизм presigned URL. Суть проста:Для загрузки: бэкенд генерирует временную подписанную ссылку, по которой клиент может напрямую отправить файл в бакет.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





