JokeTrue / image-previewer

Проектная работа по курсу "Разработчик Golang" на Otus.ru

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Go Report Card Build Status Codecov License

Проектная работа по курсу "Разработчик Golang" на Otus.ru

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

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

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

Архитектура

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

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

http://cut-service.com/fill/300/200/www.audubon.org/sites/default/files/a1_1902_16_barred-owl_sandra_rothenberg_kk.jpg

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Разбалловка

Максимум - 15 баллов (при условии выполнения обязательных требований):

  • Реализован HTTP-сервер, проксирующий запросы к удаленному серверу - 2 балла.
  • Реализована нарезка изображений - 2 балла.
  • Кэширование нарезанных изображений на диске - 1 балл.
  • Ограничение кэша по месту (LRU кэш) - 1 балл.
  • Прокси сервер правильно передает заголовки запроса - 1 балл.
  • Написаны интеграционные тесты - 3 балла.
  • Тесты адекватны и полностью покрывают фукнционал - 1 балл.
  • Проект возможно собрать чере make build, запустить через make run и протестировать через make test - 1 балл.
  • Понятность и чистота кода - до 3 баллов.

Зачёт от 10 баллов

About

Проектная работа по курсу "Разработчик Golang" на Otus.ru

License:Apache License 2.0


Languages

Language:Go 96.5%Language:Makefile 2.3%Language:Dockerfile 1.2%