tinkoff-ab-1

Форк
0

README.md

ТЗ

Разработать REST сервис для хранения паролей. Формат запросов/ответов - JSON.

Сервис должен поддерживать следующие операции:

  • Создать новую запись. На вход принимать название записи*, логин, пароль*, ссылка // * обязательные поля
  • Получить список всех записей - метод должен возвращать только id и названия. Должна быть версия с пагинацией
  • Получить конкретную запись - возвращает все поля
  • Обновить запись по Id

Добавить аутентификацию и авторизацию. Для авторизации использовать Spring Security + JWT.

У пользователя должна быть возможность:

  • Зарегистрироваться
  • Залогиниться по своему имени и паролю

Записи о паролях должны принадлежать пользователю, который их создает. Пользователь не должен иметь доступ к чужим паролям.


Добавить возможность делиться записями.

Например:

  • У пользователя Alice есть запись (id 1, login, password). Пользователь Alice вызывает метод поделиться, получает в ответ токен. Этот токен передает пользователю Bob
  • Пользователь Bob вызывает метод получение записи по этому токену. Запись копируется в его хранилище

Токен должен быть одноразовым. Т.е. второй раз по нему нельзя получить запись.

Нужно обрабатывать ситуацию, когда два пользователя пытаются одновременно открыть запись по токену. Получить запись должен только 1 пользователь - 2 получить ошибку.

При создании токена должна быть возможность указать время его жизни. Если Боб пытается получить запись по токену позже этого времени - он должен получить ошибку. Сделать автоочистку мертвых или просроченных токенов.


Добавить метрики.

Подключить spring-boot-actuator и micrometer в проект. Поднять локально Grafana и Prometheus. Импортировать готовый дэшборд (https://grafana.com/grafana/dashboards/4701-jvm-micrometer)

К готовому дэшборду добавить следующие кастомные графики:

  • Кол-во попыток получить пошаренную запись по просроченному токену
  • Кол-во попыток получить пошаренную запись по уже использованному токену
  • Время от создания токена на шаринг до его использования - с 4 линиями на графике 0.5, 0.8, 0.95, 0.99 перцентили

Добавить возможность создавать иерархию:

  • Добавить метод создания директории. Принимать как опциональный параметр ID существующей директории, в которой создаем вложенную директорию. Если не передали - создаем в корнею.
  • В метод создания записи добавить возможность передать ID директории. Если не передали ID - создаем в корневой директории пользователя
  • В метод получения записей добавить параметр ID директории. Выводим записи только непосредственно из этой директории. Если не передали - выводим из корня
  • Добавить возможность менять директорию, в которой лежит запись
  • Добавить метод, возвращающий список вложенных директорий по ID директории, если не передали ID - возвращать список для корня

С помощью JMeter провести тестирование производительности своего проекта.

Тест должен выглядеть следующим образом:

  • 5 потоков
  • Каждый поток состоит из запросов:
    • Регистрация
    • Авторизация
    • Создание записи 20 раз с таймаутом 300мс
    • Чтение всех своих записей 10 раз с таймаутом 300мс

Начать запускать с максимальным размером кучи 512мб (-Xmx512m) и постепенно уменьшать, пытаясь найти минимальное значение, при котором приложение не падает с ОММ


Результаты домашней работы №10

  • Главным требованием было сбор метрик с помощью Prometheus и построение графиков с помощью Grafana.
  • Итоговые результаты доступны в этой папке.

Результаты домашней работы №12

  1. Все результаты находятся в этой папке
  2. Наименьший размер кучи, для которого JMeter не падает с OMM оказался равным 27 Мб. Для 26 МБ приложение падает на середине отправки всех запросов.
  3. Графики получились не очень похожими на то, что в примере, однако достаточно информативными. В целом, самое интересное происходит в пару секунд после запуска тредпула в JMeter.
  4. Файл с конфигурацией JMeter лежит тут.

Куча с размером 27 МБ

Для этого размера кучи я сделал 3 картинки (они лежат в папке 27 MB):

Куча с размером 512 МБ

А здесь получилось 4 картинки (они, соответственно, лежат в папке 512 MB):

Описание

Тинькофф Банк, Академия Бэкенда, 8.4 / 10

Языки

Java

Сообщить о нарушении

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.