Ссылка на проект: UGC Sprint 2
auth_service, films_service, bigdata_service
посредством filebeat;auth_service, films_service, bigdata_service, admin_service
;Проект состоит из микросервисов для:
auth_service
)films_service
)bigdata_service
)Elasticsearch
.ClickHouse
.admin_service
), построенного на Django для управления пользователями и фильмами.auth_service, films_service, bigdata_service
Анализ проведен при помощи perofrmance_tests/pg_vs_mongo.py
. Записывается одна запись
в количестве 1000 штук.
Запуск осуществляется при помощи docker compose up
Результаты также могут разнится от разных систем и CPU.
К примеру, результат на 1,4 GHz Quad-Core Intel Core i5, 16 GB 2133 MHz LPDDR3:
python performance_tests/pg_vs_mongo.py
PostgreSQL: Created table test_table
Starting MongoDB insertions...
MongoDB: Inserted 1000 records in 2.0577480792999268 seconds
Starting PostgreSQL insertions...
PostgreSQL: Inserted 1000 records in 55.463014125823975 seconds
Результат на M1, 8GB Ram:
Кластер Kafka состоит из трёх нод и UI для управления:
Kafka-0
kafka-0_data
Kafka-1
kafka-1_data
Kafka-2
kafka-2_data
Kafka-UI
Предоставляет веб-интерфейс для управления топиками, брокерами и сообщениям.
clickhouse_data
Этот сервис реализован на FastAPI и использует Bearer JWT токены для авторизации запросов. Для тестирования сервиса можно использовать:
docker compose up
.http://localhost:8002/api/openapi#/
для тестирования функционала записи данных в Kafka.Мы используем FastAPI Users для управления пользователями, включая их создание и удаление. Аутентификация осуществляется через стратегию Redis JWT, которая хранит JWT-токены в кэше Redis для безопасного и эффективного управления сессиями.
Механизм работы аутентификации через JWT:
auth_service
и получает access токен.Authorization: Bearer <токен>
.Реализована система проверки ролей (RBAC) для разделения доступа (Admin, User).
TBA
Все микросервисы управляются центральным .env
файлом, который должен быть настроен перед запуском.
.env
файловПерейти в корневую директорию
Создать .env
файл:
Скопировать файл .env.example
, чтобы создать новый .env
. Используйте команду:
cp .env.example .env
Редактирование файла .env:: Откройте файл .env и настройте переменные в соответствии с вашей локальной средой разработки или продакшеном.
# Example of environment variables in .env file
APP_CONFIG__RUN__DEBUG=false
APP_CONFIG__RUN__HOST=localhost
APP_CONFIG__RUN__PORT=8000
**Cоздать файл .es_state::
Перейти в etl/
и выполните команду:
cp es_state.json.example es_state.json
.env
файлах, чтобы избежать ошибок во время выполнения..env
файлы в безопасности и никогда не добавляйте их в систему контроля версий. Передавайте их команде безопасным способом по мере необходимости.После настройки файлов .env
и .es_state
вы можете запустить каждый сервис с помощью соответствующей команды, чаще всего через Docker. Например:
docker compose -f=docker-compose.yml up
В этом случае сервис запустится в режиме production и запустит миграции, если они существуют
Для разработки доступен файл docker-compose.override.yml, который предоставляет доступ к контейнерам через порты. При запуске командой docker compose up
будет создана веб-среда с полным доступом ко всем сервисам через порты и интерфейс Swagger (см. ниже).
После настройки и запуска сервисов, документация API будет доступна по следующим ссылкам:
http://localhost:8001/api/openapi#/ — Сервис фильмов (FastAPI) http://localhost:8002/api/openapi#/ — Сервис BigData (FastAPI) http://localhost:8003/api/openapi#/ — Сервис авторизации (FastAPI) http://localhost:8004/api/openapi#/ — Сервис администрирования пользователей и фильмов (Django)
Эти ссылки предоставляют доступ к документации OpenAPI, где можно изучить доступные эндпоинты, параметры запросов и ответы.