/zvooq_test_task

Тестовая задача для Zvooq - сервис для кеширования результатов от нестабильного удалённого сервера.

Primary LanguagePython

Задача для Zvook

Описание

Сервис, который кеширует ответы от стороннего медленного и нестабильного сервиса

https://vast-eyrie-4711.herokuapp.com

Временно доступен по адресу https://zvook.bigblackbug.me

Доступные методы

GET /from_cache?key=whatever

Returns 200 {"status":"success", "hash":""} если ответ есть в кеше

Returns 202 {"status":""} запрос принят("accepted") или находится в обработке("in progress")

Returns 400 {"status":"error", "error":""} если параметр key отсутствует в запросе или ключ содержит non-ASCII символы

Особенности

Сервис возвращает результат сразу.

Для кеширования используется Redis, для отправки запроса на удалённый сервис - Celery.

В соответствии с требованиями, настроенный nginx обрубит соединение с клиентом через 1с и выдаст 504.

Полученные от удалённого сервиса значения в кеше хранятся 24 часа.

Поддерживаются только ключи с ASCII символами, в противном случае будет выброшена 400 ошибка. А всё потому что удалённый сервер тоже не поддерживает unicode и пятисотит :)

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

Для развёртывания потребуется установленный docker-ce и docker-compose версии 1.12 и выше. На Ubuntu можно использовать скрипт deployment/install-docker.sh

docker-compose up -d --build поднимает сервис на 8081 порту

TODO

  • Контейнеризировать nginx
  • Проверить, правильно ли создаётся Redis pool в celery и во view и не отвалится ли он вдруг когда-нибудь
  • Написать багрепорт разработчикам удалённого сервиса о том, что у них бажат юникодовые ключи и в соответствии с ответом, переписать обработчик юникодовых ключей.