Надежное, масштабируемое бэкенд-приложение, построенное на принципах Clean Architecture с использованием внедрения зависимостей, SOLID и современных практик Python.
- Обзор архитектуры
- Структура проекта
- Паттерны проектирования
- Используемые технологии
- Установка и настройка
- Рабочий процесс разработки
- Тестирование
- Развертывание
Проект реализует Clean Architecture с четырьмя основными слоями:
- Domain Layer (внутренний) - Содержит бизнес-сущности, бизнес-правила и интерфейсы
- Application Layer - Реализует сценарии использования с помощью доменных сущностей
- Infrastructure Layer - Реализует интерфейсы, определенные в доменном слое
- Presentation Layer - Обрабатывает HTTP запросы/ответы и сериализацию
./
├── alembic.ini
├── docker-compose.yml
├── Dockerfile
├── Makefile
├── requirements.txt
├── simple_architecture_design.png
└── src/
├── application/ # Сервисы приложения, реализующие сценарии использования
│ ├── analytics_service.py
│ ├── request_service.py
│ └── user_service.py
├── bootstrap/ # Компоненты начальной загрузки и точка входа
│ ├── configs.py # Конфигурация приложения
│ ├── di_container.py # Контейнер внедрения зависимостей
│ ├── log.py # Конфигурация логирования
│ └── main.py # Главная точка входа
├── domain/ # Бизнес-сущности и правила
│ ├── entities/ # Доменные модели
│ ├── exceptions/ # Доменные исключения
│ └── interfaces/ # Порты для приложения
├── infra/ # Реализации инфраструктуры
│ ├── db/ # Реализации баз данных
│ │ ├── cache/ # Redis кэш
│ │ ├── mongo_db/ # Реализация MongoDB
│ │ └── postgres/ # Реализация PostgreSQL
│ ├── llm_provider/ # Реализация LLM провайдера
│ ├── prometheus/ # Мониторинг с Prometheus
│ └── security/ # Реализации безопасности
└── presentation/ # API эндпоинты и схемы
├── api/ # API маршруты
└── schemas/ # Схемы запросов/ответов
└── tests/ # Директория тестов
├── shared.py
├── test_analytics.py
├── test_request.py
└── test_user.py
Используется для:
- Разделения компонентов
- Упрощения тестирования через mock-объекты
- Централизации конфигурации
- Обеспечения принципов Clean Architecture
Реализация: DIContainer
в bootstrap/di_container.py
управляет всеми зависимостями и их жизненным циклом.
Абстрагирует логику доступа к данным:
- Предоставляет интерфейс коллекции для доменных объектов
- Отделяет домен от механизмов хранения данных
- Упрощает тестирование через мокирование
Реализация: Репозитории в infra/db/postgres/repositories/
реализуют соответствующие доменные интерфейсы.
Управляет границами транзакций:
- Координирует множественные операции репозитория в одной транзакции
- Обеспечивает атомарность
- Упрощает управление транзакциями в сервисах приложения
Реализация: SQLAlchemyUnitOfWork
в infra/db/postgres/uow.py
Используется для создания сложных объектов:
- Централизует логику создания
- Инкапсулирует сложность инициализации
- Упрощает клиентский код
Реализация: Используется в DI контейнере для создания сервисов и репозиториев.
- PostgreSQL: Основная реляционная база данных для структурированных данных
- Выбрана за ACID-совместимость, надежность и богатый набор функций
- MongoDB: Для аналитических данных и полуструктурированной информации
- Подходит для большого объема аналитических данных без жесткой схемы
- Redis: Для кэширования
- Улучшает производительность, снижая нагрузку на базу данных
- FastAPI: Современный высокопроизводительный API фреймворк
- Обеспечивает автоматическую валидацию, документацию и асинхронную поддержку
- Типизация для лучшего опыта разработки и качества кода
- JWT: Stateless аутентификация
- Масштабируемый подход к аутентификации для распределенных систем
- Минимальное управление состоянием на бэкенде
- dependency-injector: Python DI контейнер
- Обеспечивает слабую связность компонентов
- Упрощает тестирование с mock-объектами
- Prometheus: Для сбора метрик и мониторинга
- Промышленный стандарт для наблюдаемости
- Богатая экосистема инструментов и интеграций
- Ollama: Для AI/LLM возможностей
- Предоставляет гибкий доступ к языковым моделям
- Легко заменяется другими провайдерами
-
Клонирование репозитория:
git clone <repository-url> cd ai_web
-
Создание виртуального окружения:
python -m venv venv source venv/bin/activate # На Windows: venv\Scripts\activate
-
Установка зависимостей:
pip install -r requirements.txt
-
Запуск с Docker Compose:
docker-compose up -d
- Следование структуре проекта
- Разделение слоев и соблюдение правила зависимостей
- Использование интерфейсов для определения границ между слоями
- Определение сущностей и интерфейсов в доменном слое
- Реализация сценариев использования в слое приложения
- Создание реализаций инфраструктуры
- Добавление API эндпоинтов в презентационный слой
Используйте Alembic для миграций схемы PostgreSQL:
make migrate
- Тестирование доменных сущностей и сервисов приложения в изоляции
- Использование mock-объектов для внешних зависимостей
PYTHONPATH=src pytest -p no:warnings
- Тестирование репозиториев с реальными базами данных
Приложение контейнеризировано и может быть развернуто с помощью Docker Compose:
docker-compose up -d
make run