Создание отдельного микросервиса для управления изображениями из монолитного приложения

Выделите владельца метаданных и обработки изображений, храните оригиналы в объектном хранилище, варианты создавайте асинхронно, а выдачу организуйте через CDN или подписанные URL.

Короткий ответ

Что ответить на собеседовании

Выделите владельца метаданных и обработки изображений, храните оригиналы в объектном хранилище, варианты создавайте асинхронно, а выдачу организуйте через CDN или подписанные URL.

Подробный разбор

Ответ с пояснениями

Условие

В рамках большого монолитного проекта (социальная сеть) существует значительный объём графических файлов – аватары, фотографии из альбомов и т.п. Необходимо первым шагом выделить отдельный микросервис, отвечающий за хранение и обработку этих изображений.

Опишите, каким образом следует подойти к выделению сервиса изображений: выбор хранилища, стандартизация размеров изображений, предоставление доступа к файлам по URL и взаимодействие нового сервиса с остальными компонентами системы.

  • Хранение – какие типы хранилищ (облачные, файловые, CDN) подходят, как организовать загрузку и репликацию.
  • Стандартизация размеров – какие размеры необходимо генерировать автоматически, какие инструменты использовать для ресайза и оптимизации.
  • Возврат по ссылке – как формировать публичные/приватные ссылки, как обеспечить кеширование и безопасность доступа.
  • Взаимодействие – какие API (REST, gRPC) и события (message bus) нужны для связи микросервиса с другими модулями монолита, как обеспечить согласованность данных и миграцию существующего контента.

Ответ

Выделите владельца метаданных и обработки изображений, храните оригиналы в объектном хранилище, варианты создавайте асинхронно, а выдачу организуйте через CDN или подписанные URL.

Монолит сохраняет image_id, а новый сервис отвечает за загрузку, состояние обработки и доступные варианты. Оригинал хранится отдельно от производных размеров; перечень размеров определяется интерфейсом, а не произвольными параметрами каждого запроса.

Загрузка проходит проверку формата, размера и числа пикселей; затем очередь запускает декодирование, ресайз и удаление нежелательных метаданных. Для публичных файлов подходят версионированные URL с кешированием, для приватных — короткоживущие подписанные ссылки и проверка доступа.

Миграцию проводят постепенно: новые загрузки идут в сервис, старые копируются с проверкой контрольных сумм, чтение временно поддерживает fallback. События готовности и удаления должны быть идемпотентными. CDN ускоряет выдачу, но не заменяет основное хранилище.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее