Внимание: Тестовое задание навеяно проектом Deworker.pro, за основу взята компания "Российский Аукционный Дом". Для обучения и тренировки, попробовал решить его в меру своего понимания. На ревью не отправлял, за оптимальность не ручаюсь.
Сделана основа проекта, разворачивается в swarm, может провижениться на прод-домен.
Доделывать смысла не вижу, т.к. во время перерыва был реализован более сложный проект на этом же самом стеке, и качество там выше (только очередей нет).
Текущая версия пусть останется как есть, вдруг пригодится.
Реализовать упрощенную версию онлайн-аукциона.
Подробнее здесь
Пример запуска на локале с помощью docker-swarm:
IMAGE_TAG=dev REGISTRY=ghcr.io LOGIN=p12s make try-dev-build
IMAGE_TAG=dev REGISTRY=ghcr.io LOGIN=p12s make try-dev-deploy
- ❌ Автоматическое обновление новых цен у всех пользователей в браузере
- ❌ Постановка заявок в очередь
- ✅ Простейший фронтенд
- ❌ Формат маршрутов для доступа к методам, а также формат ответа и запросов
- Спроектировать базу данных + реализовать скрипт ее формирования (сделано не до конца)
- ❌ Реализовать API согласно ТЗ
- ❌ Подготовить тестовые данные (дамп базы, скрипт для генерации тестового набора данных)
- ✅ Инструкцию развертывания на локальной машине
- ✅ Язык - Go
- ❌ Использование очередей (например, RabbitMQ)
- ✅ Логирование ошибок на проде с помощью Sentry (на реальном продакшене можно использовать платный аккаунт, либо развернуть этот сервис на своей виртуалке)
- ❌ Предоставление API на websocket
- ❌ Пример gRPC-клиента, работающего с этим апи
- ✅ Возможность скейлинга (например, с помощью docker-swarm, а еще лучше - minikube/k8s)
- Подготовка виртуальной машины на YandexCloud с помощью Ansible
- Добавить IaaS - создание виртуальной машины с помощью Terraform
- Вместо хранения БД средствами Docker volumes использовать БД в YC
- Покрыть код unit-тестами
- Проверить, как работают индексы в БД под нагрузкой, убедиться в оптимальности
- Забенчмаркать с помощью wrk для проверки производительности
- Отпрофилировать с помощью pprof и по-возможности, зарефакторить. А после снова забенчмаркать