Реализация асинхронного сервиса с микросервисной архитектурой.
Тестовое задание.
WEB-сервис включает в себя REST API (FastAPI + SQLAlchemy/Alembic) для работы с БД (PostgreSQL). Все crud-операции
доступны только аутентифицированным пользователям (JWT). При создании, обновлении или удалении
записи в БД направляетя соответствующее сообщение в брокер (RabbitMQ).
При выполнении безопасных операций проверяется наличие кешированного ответа (Redis). Если ответа
в кеше нет, направляется запрос к БД. Ответ кешируется.
gRPC-сервис работает в многопоточном режиме. В 1-м потоке реализован собственно gRPC-сервер,
работающий с БД. Во 2-м потоке реализован сервис получения сообщений от брокера с их обработкой.
Сделаны автоматические тесты (Pytest) авторизации/аутентификации, crud-операций, работы кеша.
Настроен workflow (GitHub Actions) для тестирования и создания docker-образов.
Алексей Наумов ( algena75@yandex.ru )
- FastAPI
- PostgreSQL
- JWT
- Swagger
- gRPC
- RabbitMQ
- Asyncio
- SQLAlchemy + Alembic
- Redis
- Pytest
- Docker
- Nginx
Клонировать репозиторий и перейти в него в командной строке:
git clone git@github.com:algena75/book_service.git
cd book_service
Создание виртуального окружения:
poetry env use python3.10
Установка зависимостей:
poetry install --with test,web,grpc_service
Запуск оболочки и активация виртуального окружения (из папки проекта):
poetry shell
Проверка активации виртуального окружения:
poetry env list
Создать в корне проекта файл .env
(см .env.example
) для подключения БД, gRPC-сервера и брокера RabbitMQ.
-
docker compose -f docker-compose.yml up -d
Oткрыть в браузере http://127.0.0.1/docs
.
Будет создано 5 контейнеров. Публичный web принимает через REST API наименование книги и автора, также позволяет
редактировать записи. Все CRUD-операции доступны только аутентифицированным пользователям. Все данные хранятся
в БД PostgreSQL. Создание БД и первого суперпользователя происходит автоматически. При изменении записей о книгах
отправляется сообщение в брокер RabbitMQ.
В контейнере grpc_server организована многопоточная система. Параллельно работают сервер и получатель сообщений
брокера. Сообщения брокера логируются в лог-файлы и дублируются в консоль.
Реализована JWT авторизация и аутентификация. Регистрация пользователя доступна по адресу http://127.0.0.1/auth/register
,
получение токена: http://127.0.0.1/auth/jwt/login
. Для тестирования gRPC через Postman используйте proto-файл
protobufs/booj_service.proto
. Логфайлы gRPC-сервера сохраняются в контейнере и пробрасываются в локальный репозиторий.