Skip to content

zaytcevcom/image-previewer

Repository files navigation

ТЗ на разработку сервиса "Превьювер изображений"

Общее описание

Сервис предназначен для изготовления preview (создания изображения с новыми размерами на основе имеющегося изображения).

Архитектура

Сервис представляет собой web-сервер (прокси), загружающий изображения, масштабирующий/обрезающий их до нужного формата и возвращающий пользователю.

Основной обработчик

http://cut-service.com/fill/300/200/raw.githubusercontent.com/OtusGolang/final_project/master/examples/image-previewer/_gopher_original_1024x504.jpg

<---- микросервис ----><- размеры превью -><--------- URL исходного изображения --------------------------------->

В URL выше мы видим:

Сервис должен получить URL исходного изображения, скачать его, изменить до необходимых размеров и вернуть как HTTP-ответ.

  • Работаем только с HTTP.
  • Ошибки удалённого сервиса или проксируем как есть, или логируем и отвечаем клиенту 502 Bad Gateway.
  • Поддержка JPEG является минимальным и достаточным требованием.

Важно: необходимо проксировать все заголовки исходного HTTP запроса к целевому сервису (raw.githubusercontent.com в примере).

Сервис должен сохранить (кэшировать) полученное preview на локальном диске и при повторном запросе отдавать изображение с диска, без запроса к удаленному HTTP-серверу.

Поскольку размер места для кэширования ограничен, то для удаления редко используемых изображений необходимо использовать алгоритм "Least Recent Used".

Конфигурация

Основной параметр конфигурации сервиса - разрешенный размер LRU-кэша.

Он может измеряться как количеством закэшированных изображений, так и суммой их байт (на выбор разработчика).

Развертывание

Развертывание микросервиса должно осуществляться командой make up (внутри docker compose up) в директории с проектом.

Тестирование

Реализацию алгоритма LRU нужно покрыть unit-тестами.

Для интеграционного тестирования можно использовать контейнер с Nginx в качестве удаленного HTTP-сервера, раздающего вам заданный набор изображений.

Необходимо проверить работу сервера в разных сценариях:

  • картинка найдена в кэше;
  • удаленный сервер не существует;
  • удаленный сервер существует, но изображение не найдено (404 Not Found);
  • удаленный сервер существует, но изображение не изображение, а скажем, exe-файл;
  • удаленный сервер вернул ошибку;
  • удаленный сервер вернул изображение;
  • изображение меньше, чем нужный размер; и пр.

Обязательные требования для проекта

  • Наличие юнит-тестов на ключевые алгоритмы (core-логику) сервиса.
  • Наличие валидных Dockerfile и Makefile/Taskfile для сервиса.
  • Ветка master успешно проходит пайплайн в CI-CD системе (на ваш вкус, GitHub Actions, Circle CI, Travis CI, Jenkins, GitLab CI и пр.). Пайплайн должен в себе содержать:

При невыполнении хотя бы одного из требований выше - незачёт, несмотря на, например, полностью написанный код сервиса.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published