Code Monkey home page Code Monkey logo

auction-house's Introduction

License

Внимание: Тестовое задание навеяно проектом 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

home
detail

Реализовать функциональные возможности

  • ❌ Автоматическое обновление новых цен у всех пользователей в браузере
  • ❌ Постановка заявок в очередь
  • ✅ Простейший фронтенд

Реализовать технические моменты

  • ❌ Формат маршрутов для доступа к методам, а также формат ответа и запросов
  • Спроектировать базу данных + реализовать скрипт ее формирования (сделано не до конца)
  • ❌ Реализовать API согласно ТЗ
  • ❌ Подготовить тестовые данные (дамп базы, скрипт для генерации тестового набора данных)
  • ✅ Инструкцию развертывания на локальной машине

Используемые технологии

  • ✅ Язык - Go
  • ❌ Использование очередей (например, RabbitMQ)
  • ✅ Логирование ошибок на проде с помощью Sentry (на реальном продакшене можно использовать платный аккаунт, либо развернуть этот сервис на своей виртуалке)

Усложнения

  • ❌ Предоставление API на websocket
  • ❌ Пример gRPC-клиента, работающего с этим апи
  • ✅ Возможность скейлинга (например, с помощью docker-swarm, а еще лучше - minikube/k8s)

Добавил от себя

  • Подготовка виртуальной машины на YandexCloud с помощью Ansible

Что можно улучшить

  • Добавить IaaS - создание виртуальной машины с помощью Terraform
  • Вместо хранения БД средствами Docker volumes использовать БД в YC
  • Покрыть код unit-тестами
  • Проверить, как работают индексы в БД под нагрузкой, убедиться в оптимальности
  • Забенчмаркать с помощью wrk для проверки производительности
  • Отпрофилировать с помощью pprof и по-возможности, зарефакторить. А после снова забенчмаркать

auction-house's People

Contributors

p-12s avatar p12s avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.