Skip to content

BernarBerdikul/Auth_sprint_2

Repository files navigation

Как запустить проект

Склонируйте проект:

https://github.com/BernarBerdikul/Auth_sprint_2.git

На одном уровне с папкой проекта "./Auth_sprint_2" создайте папку "./postgres_data" монтирования к образу Postgres

result_dirs

Для запуска проекта следует скопировать файл .env.example и переименовать на .env

cp .env .env.example

Значение некоторых переменных окружения:

  • DB_NAME - название основной БД, которая используется в проекте
  • DB_TEST_NAME - отдельная БД для запуска и прогонки тестов
  • TESTING (True | False) - значение отвечает за использование тестовой БД в проекте или нет

Создание БД может занять много времени, выполним отдельно

docker-compose -f docker-compose.yml build postgres_db
docker-compose -f docker-compose.yml up -d postgres_db

Запустить проект совместно с тестами и помощью Docker

docker-compose -f docker-compose-test.yml build
docker-compose -f docker-compose-test.yml up

Запустить проект с помощью Docker

docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml up

После запуска проекта, у вас будет доступ к документаций проекта Ссылка на документацию проекта

Задачи 7 спринта

Усовершенствование сервиса

Проектное задание

Упростите регистрацию и аутентификацию пользователей в Auth-сервисе, добавив вход через социальные сервисы. Список сервисов выбирайте исходя из целевой аудитории онлайн-кинотеатра — подумайте, какими социальными сервисами они пользуются. Например, использовать OAuth от Github — не самая удачная идея. Ваши пользователи не разработчики и вряд ли имеют аккаунт на Github. А вот добавить Twitter, Facebook, VK, Google, Yandex или Mail будет хорошей идеей.

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

Информация по OAuth у разных поставщиков данных:

Twitter,

Facebook,

VK,

Google,

Yandex,

Mail.

Дополнительное задание

Реализуйте возможность открепить аккаунт в соцсети от личного кабинета.

Решение залейте в репозиторий текущего спринта и отправьте на ревью.

Подтверждение намерений

Задание со звёздочкой

Реализуйте свой вариант фильтрации ботов для Smart TV. На Smart TV не будет работать noCaptcha, потому что в нём вряд ли есть история, а анализировать поведение пользователя очень сложно из-за механики работы умного телевизора. Вам придётся реализовать каптчу на математических примерах: генерировать простую задачку и отправлять её пользователю.

Подумайте, в какой из баз данных вы будете хранить правильный ответ. Дадите ли вы только один шанс ввести правильный ответ или позволите пользователю ошибаться несколько минут подряд? Станете ли с подозрением относиться к ответам, которые приходят слишком часто для человека?

Интеграция

Микросервисы должны знать, что ожидать друг от друга

Задание

Подготовьте Auth сервис к интеграции с другими сервисами вашего сайта. Сгенерируйте схему взаимодействия с Auth сервисом в формате, который используется в вашем сервисе.

Зависимости сервисов

Задание

Создайте интеграцию Auth-сервиса и AsyncAPI-сервиса, используя контракт, который вы сделали в прошлом задании.

При создании интеграции не забудьте учесть изящную деградацию Auth-сервиса. Как вы уже выяснили ранее, Auth сервис один из самых нагруженных, потому что в него ходят большинство сервисов сайта. И если он откажет, сайт отказать не должен. Обязательно учтите этот сценарий в интеграциях с Auth-сервисом.

Распределённая трассировка

Задание

Добавьте в Auth трасировку и подключите к Jaeger. Для этого вам нужно добавить работу с заголовком x-request-id и отправку трасировок в Jaeger.

Задание со звездочкой

Из коробки библиотека jaeger-client предоставляет контекстный менеджер tracer.start_span(), но это не всегда удобно. Например, вы хотите пометить трасировкой не весь код, а отдельные функции.

Сделайте декоратор @trace для трассировок любых функций.

Ограничение количества запросов к серверу (Rate limit)

Задание

Сейчас сервис Auth беззащитен перед DDOS-атаками. Чтобы сберечь важный элемент системы от чрезмерной нагрузки, которая может вывести его из строя, реализуйте алгоритм Leaky bucket или Token bucket, используя Redis для синхронизации реплик. Впоследствии вы можете делегировать эту обязанность сторонниму инструменту, например, Cloudflare.

Партицирование в PostgreSQL

Задание

Партицируйте таблицу с пользователями. Подумайте, по каким критериям вы бы разделили её. Важно посмотреть на таблицу не только в текущем времени, но и заглядывая в некое будущее, когда в ней будут миллионы записей. Пользователи могут быть из одной страны, но из разных регионов. А еще пользователи могут использовать разные устройства для входа и иметь разные возрастные ограничения.

Releases

No releases published

Packages

No packages published

Languages