-
собрать контейнер
sudo docker build -t nozimdev/tech-db .
-
остановить работу контейнера
docker stop nozimdev
-
удалить контейнер
docker rm nozimdev
-
запустить контейнер
sudo docker run -p 5000:5000 --name nozimdev -t nozimdev/tech-db
-
нагрузочное тестирование
./tech-db-forum perf -u http://localhost:5000/api -i -t=8
. Скомпилированные программы для тестирования см. ниже.
Результат тестирования:
- 2500 rps
Особенности проведения тестов:
- Размер проверямой ветки репозитория, включая всю историю, не более 5MB (это довольно много: эталонная работа имеет размер ~200KB);
- На сборку контейнера отводится не более 15-ти минут;
- На заполнение базы отводится не более 15-ти минут;
- Нагрузка идёт 10 раз в течение 1-ой минуты в 8 потоков. Учитывается лучший результат.
Технические характеристики стенда:
- SSD: Samsung 850 Evo 250GB
- CPU: Intel® Core™ i5-7400
Лимиты на тестовое окружение:
- Docker host на виртуальная машина QEMU/KVM;
- OS: Ubuntu 18.04;
- CPU: 2 core;
- RAM: 1.5GB у Docker host, 1.0GB у контейнера;
- SSD: 300 IOPS total;
- https://github.com/bozaro/tech-db-forum
- https://github.com/bozaro/tech-db-hello
- https://tech-db-forum.bozaro.ru/
Тестовое задание для реализации проекта "Форумы" на курсе по базам данных в Технопарке Mail.ru (https://park.mail.ru).
Суть задания заключается в реализации API к базе данных проекта «Форумы» по документации к этому API.
Таким образом, на входе:
- документация к API;
На выходе:
- репозиторий, содержащий все необходимое для разворачивания сервиса в Docker-контейнере.
Документация к API предоставлена в виде спецификации OpenAPI: swagger.yml
Документацию можно читать как собственно в файле swagger.yml, так и через Swagger UI (там же есть возможность поиграться с запросами): https://tech-db-forum.bozaro.ru/
Проект должен включать в себя все необходимое для разворачивания сервиса в Docker-контейнере.
При этом:
- файл для сборки Docker-контейнера должен называться Dockerfile и располагаться в корне репозитория;
- реализуемое API должно быть доступно на 5000-ом порту по протоколу http;
- допускается использовать любой язык программирования;
- крайне не рекомендуется использовать ORM.
Контейнер будет собираться из запускаться командами вида:
docker build -t a.navrotskiy https://github.com/bozaro/tech-db-forum-server.git
docker run -p 5000:5000 --name a.navrotskiy -t a.navrotskiy
В качестве отправной точки можно посмотреть на примеры реализации более простого API на различных языках программирования: https://github.com/bozaro/tech-db-hello/
Корректность API будет проверяться при помощи автоматического функционального тестирования.
Методика тестирования:
- собирается Docker-контейнер из репозитория;
- запускается Docker-контейнер;
- запускается скрипт на Go, который будет проводить тестирование;
- останавливается Docker-контейнер.
Скомпилированные программы для тестирования можно скачать по ссылкам:
Для локальной сборки Go-скрипта достаточно выполнить команду:
go get -u -v github.com/bozaro/tech-db-forum
go build github.com/bozaro/tech-db-forum
После этого в текущем каталоге будет создан исполняемый файл tech-db-forum
.
Для запуска функционального тестирования нужно выполнить команду вида:
./tech-db-forum func -u http://localhost:5000/api -r report.html
Поддерживаются следующие параметры:
Параметр | Описание |
---|---|
-h, --help | Вывод списка поддерживаемых параметров |
-u, --url[=http://localhost:5000/api] | Указание базовой URL тестируемого приложения |
-k, --keep | Продолжить тестирование после первого упавшего теста |
-t, --tests[=.*] | Маска запускаемых тестов (регулярное выражение) |
-r, --report[=report.html] | Имя файла для детального отчета о функциональном тестировании |