Динамический ресайзинг изображений (Image Previewer)

Image Previewer — пример сервиса, который на лету меняет размер изображений, работает как умный прокси и снижает необходимость хранить много готовых версий одного файла. Ключевая схема: запрос, проверка кэша, загрузка оригинала при промахе, ресайзинг, сохранение результата и отдача пользователю.

Сервис принимает URL с параметрами метода, ширины, высоты, схемы и адреса исходного изображения. Поддерживаются три базовых режима: Fill заполняет контейнер с сохранением пропорций и возможной обрезкой, Fit вписывает изображение целиком с пустыми зонами, Stretch растягивает картинку до нужных размеров без сохранения пропорций.

Для кэширования выбран подход Cache-Aside: приложение сначала ищет готовое изображение в кэше, а при промахе обращается к источнику, генерирует результат и сохраняет его. Так кэш заполняется только реально востребованными вариантами, а при проблемах с кэшем сервис всё равно может работать с origin напрямую.

Из-за ограниченного места для хранения используется LRU: самые давно неиспользуемые изображения вытесняются первыми, а часто запрашиваемые остаются ближе к началу структуры. В архитектуре собственного CDN это выглядит как цепочка клиент, граничный кэш, Image Previewer, локальный SSD-кэш и origin, где можно хранить один оригинал, а нужные версии создавать по запросу.

Коротко

  • Image Previewer работает как прокси: принимает запрос, проверяет кэш, при промахе скачивает оригинал, меняет размер и сохраняет результат.
  • Fill обрезает лишнее ради заполнения, Fit сохраняет всё изображение с пустыми зонами, Stretch растягивает картинку без сохранения пропорций.
  • Cache-Aside выбран потому, что кэш заполняется только востребованными изображениями, а сервис не становится полностью зависимым от кэша.
  • LRU удаляет самые давно неиспользуемые файлы и подходит для сценариев, где чаще повторно запрашивают недавно использованные изображения.
  • Архитектура с edge cache, локальным SSD-кэшем и origin позволяет хранить один оригинал и генерировать версии под устройства на лету.

FAQ

Зачем нужен динамический ресайзинг изображений, если можно заранее подготовить версии для mobile, tablet и desktop?

Он позволяет хранить один оригинал и создавать нужный размер только по запросу. Это снижает объём хранения и упрощает поддержку новых размеров и форматов.

Чем методы Fill, Fit и Stretch отличаются друг от друга при изменении изображения под заданный контейнер?

Fill заполняет контейнер и может обрезать края, Fit показывает всё изображение целиком с пустыми областями, Stretch точно подгоняет размеры, но искажает пропорции.

Почему для такого сервиса выбран Cache-Aside с LRU, а не Read-Through или другие схемы кэширования?

Cache-Aside оставляет приложению возможность обращаться к источнику напрямую и не превращает кэш в единую точку отказа. LRU помогает удалять редко используемые варианты при ограниченном месте.

Читайте также

  1. Как тимлид заменил десятки вкладок на файловую систему и Claude Code
  2. Проблемы с производительностью веб-сервисов: как находить и устранять
  3. Как я делаю бэкапы домашней системы Linux: практичный пример rsync + btrfs с максимальным сжатием
  4. От хаоса к системе: как выстроить процесс Discovery (часть 1)
  5. Ваша LLM стримит в никуда: разбираемся, как работать с дисконнектами в FastAPI
Ключевые инсайты из новости (по версии ChatGPT)
  • Динамический image proxy для ресайзинга изображений: Для сайтов с большим количеством изображений можно не хранить отдельные версии под каждый размер экрана, а генерировать нужную вариацию по запросу. Сервис работает как прокси: принимает параметры размера и метода обработки, проверяет готовый результат в кэше, при промахе скачивает оригинал, ресайзит его и сохраняет финальный файл.
    [Техническая архитектура / Изображения и CDN]
Для получения полного доступа оформите подписку PubMag PRO.
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Инсайты автоматически генерируются с помощью искусственного интеллекта на основе текста статьи.
← Назад в лентуЧитать оригинал →
✈️ Подписывайтесь на мой Telegram-канал — там еще больше интересного про AdTech, MarTech, AI и многое другое!