Проектирование системы ====================== Компонентная архитектура ------------------------ Система состоит из трёх основных контейнеров, которые взаимодействуют друг с другом: .. mermaid:: graph TB TVIP[TVIP Приставки] NGINX[Nginx Reverse Proxy] BACKEND[Backend Service
FastAPI + Uvicorn] DB[(PostgreSQL)] FRONTEND[Frontend
React + Vite] TVIP -->|HTTP| NGINX FRONTEND -->|HTTP| NGINX NGINX -->|Proxy| BACKEND BACKEND -->|SQL| DB style BACKEND fill:#87CEEB style DB fill:#FFB6C1 style FRONTEND fill:#FFD700 style NGINX fill:#90EE90 Docker архитектура ------------------ Контейнеры ~~~~~~~~~~ **tvip_provision** * Образ: Python 3.9 * Процессы: Uvicorn (FastAPI) + Nginx + Supervisord * Порт: 7373 * Зависимости: PostgreSQL **postgres** * Образ: PostgreSQL 15 * Порт: 5432 * Volumes: данные БД **frontend** (опционально) * Образ: Node.js (build) + Nginx (runtime) * Порт: 80 * Multi-stage build для оптимизации размера Сетевое взаимодействие ~~~~~~~~~~~~~~~~~~~~~~ Все контейнеры находятся в одной Docker сети и обмениваются данными по внутренним hostname. .. code-block:: yaml networks: default: name: tvip_provision_network Слои приложения --------------- Domain Layer (src/domain/) ~~~~~~~~~~~~~~~~~~~~~~~~~~ Ядро системы, содержит: * **entities/** — доменные сущности (Device, ProvisionConfig) * **value_objects/** — value objects для валидации (MacAddress, IpAddress, ConfigData) * **repositories/** — интерфейсы репозиториев * **services/** — доменные сервисы (XmlSerializer) **Принципы:** * Не зависит от внешних библиотек и фреймворков * Содержит только бизнес-правила * Определяет интерфейсы, но не реализацию Application Layer (src/application/) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Содержит use cases — сценарии использования: * **tvip_provision/** — обработка запросов от приставок * **devices_management/** — управление устройствами * **default_config_management/** — управление дефолтной конфигурацией **Принципы:** * Каждый use case — это один сценарий использования * Оркеструет вызовы доменных объектов * Не содержит технических деталей (БД, HTTP) Infrastructure Layer (src/infrastructure/) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Технические детали реализации: * **database/** — SQLAlchemy модели и подключение к БД * **repositories/** — реализация репозиториев * **di/** — конфигурация Dependency Injection * **serializers/** — реализация сериализаторов (XmlToDictSerializer) * **value_objects/** — конкретные реализации value objects (PydashConfigData) * **factories/** — фабрики для создания объектов Presentation Layer (src/presentation/) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ REST API endpoints: * **provision.py** — endpoint для TVIP-приставок * **devices_management.py** — API управления устройствами * **default_config_management.py** — API управления дефолтной конфигурацией Масштабирование --------------- Горизонтальное масштабирование ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Backend может быть запущен в нескольких экземплярах * Использовать load balancer (nginx upstream) * Stateless архитектура — состояние хранится в БД Вертикальное масштабирование ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Увеличение ресурсов БД (CPU, RAM) * Настройка connection pooling в asyncpg * Индексы на часто запрашиваемые поля (mac_address, ip_address) Кэширование ~~~~~~~~~~~ Возможности для оптимизации: * Кэширование дефолтной конфигурации (Redis) * Кэширование конфигураций устройств с TTL * HTTP кэширование через ETag/Last-Modified Безопасность ------------ Текущая реализация ~~~~~~~~~~~~~~~~~~ * Нет встроенной аутентификации в API * PostgreSQL доступна только внутри Docker сети * CORS настроен на allow all для dev окружения Рекомендации для production ~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Добавить аутентификацию через API keys или JWT * Настроить HTTPS через nginx с сертификатами * Ограничить CORS конкретными доменами * Использовать секреты Docker для DATABASE_URL * Настроить rate limiting на API endpoints