Сервис предназначен для изготовления preview (создания изображения с новыми размерами на основе имеющегося изображения).
Пример превьюшек в папке examples
Сервис представляет собой web-сервер (прокси), загружающий изображения, масштабирующий/обрезающий их до нужного формата и возвращающий пользователю.
<---- микросервис ----><- размеры превью -><--------- URL исходного изображения --------------------------------->
В URL выше мы видим:
- http://cut-service.com/fill/300/200/ - endpoint нашего сервиса, в котором 300x200 - это размеры финального изображения.
- https://raw.githubusercontent.com/OtusGolang/final_project/master/examples/image-previewer/_gopher_original_1024x504.jpg - адрес исходного изображения; сервис должен скачать его, произвести resize, закэшировать и отдать клиенту.
Сервис должен получить URL исходного изображения, скачать его, изменить до необходимых размеров и вернуть как HTTP-ответ.
- Работаем только с HTTP.
- Ошибки удалённого сервиса или проксируем как есть, или логируем и отвечаем клиенту 502 Bad Gateway.
- Поддержка JPEG является минимальным и достаточным требованием.
Важно: необходимо проксировать все заголовки исходного HTTP запроса к целевому сервису (raw.githubusercontent.com в примере).
Сервис должен сохранить (кэшировать) полученное preview на локальном диске и при повторном запросе отдавать изображение с диска, без запроса к удаленному HTTP-серверу.
Поскольку размер места для кэширования ограничен, то для удаления редко используемых изображений необходимо использовать алгоритм "Least Recent Used".
Основной параметр конфигурации сервиса - разрешенный размер LRU-кэша.
Он может измеряться как количеством закэшированных изображений, так и суммой их байт (на выбор разработчика).
Развертывание микросервиса должно осуществляться командой make run
(внутри docker compose up
)
в директории с проектом.