Giter VIP home page Giter VIP logo

techno-db-forum's Introduction

#Реализация высоконагруженного проекта "Форумы"

Предметная область и инфологическая модель:

  • Пользователь (Никнейм, E-Mail, Полное имя, Описание)
  • Форум (Название, Slug, Автор (Никнейм пользователя), Количество постов, Количество веток)
  • Тред / Ветка обсуждения - (Название, Slug, Сообщение/Описание, Рейтинг, Автор (Никнейм пользователя), Форум (Slug), Дата создания)
  • Пост / Сообщение - (Родительское сообщение (Id), Текст сообщения, Автор (Никнейм пользователя), Тред (FK - Id), Форум (Slug), Дата создания, Флаг редактирования)
  • Голос (Пользователь (FK - Id), Тред (FK - Id), Оценка (1 / -1))

API сервиса представлено в ТЗ ниже.

В процессе реализации были разработаны:

База данных на PostgreSQL 10.10
Backend API сервиса на GoLang 1.13.4

Сборка и запуск проекта: Локально:

  • Сборка: make build
  • Запуск: ./db-forum-kosenkov

Docker:

  • Сборка: sudo docker build . -t amour/techno-db-forum
  • Запуск (первый раз): sudo docker run -p 5000:5000 --name amour -t amour/techno-db-forum
  • Запуск (последующие разы): sudo docker start amour
  • Остановка контейнера: sudo dovker stop amour
  • Удаление контейнера: sudo docker rm amour

Нагрузочное и функциональное тестирование производится программами из репозитория: https://github.com/bozaro/tech-db-forum

После скачивания запустить go build .

Команды тестирования:

  • функциональное: ./tech-db-forum func --url http://localhost:5000/api
  • нагрузочное (8 потоков): ./tech-db-forum perf --url http://localhost:5000/api -i -t=8

Результат тестирования: 2602 rps
Конфигурация:

  • ЦП - AMD Ryzen 5 2500U 3.6 Ghz
  • ОЗУ - 12 ГБ
  • HDD - 1 ТБ 5400 об/мин

tech-db-forum

Тестовое задание для реализации проекта "Форумы" на курсе по базам данных в Технопарке Mail.ru (https://park.mail.ru).

Суть задания заключается в реализации API к базе данных проекта «Форумы» по документации к этому API.

На входе:

  • документация к API;

На выходе:

  • репозиторий, содержащий все необходимое для разворачивания сервиса в Docker-контейнере.

Документация к API

Документация к API предоставлена в виде спецификации OpenAPI: swagger.yml

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] Имя файла для детального отчета о функциональном тестировании

techno-db-forum's People

Contributors

aruko21 avatar

Watchers

 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.