Архитектура Экосистемы BPDS: Доменная структура

Domain-Driven Design (DDD) & Bounded Contexts Specification

Author

Lead Systems Architect / FoodLifeCycle Core Team

Published

July 13, 2026

1 Введение

Данный документ представляет собой финальное архитектурное описание высоконагруженной событийно-ориентированной экосистемы BPDS (Business & Personal Dietary System), выступающей серверным ядром для мобильного приложения FoodLifeCycle (foodlifecyclemobile1 / foodlifecycleapp-core1).

Система спроектирована на основе принципов Domain-Driven Design (DDD) для полной изоляции бизнес-контекстов, устранения монолитных связей и обеспечения независимого масштабирования 28 микросервисных контейнеров под управлением Ubuntu (16GB RAM, GPU RTX 3050Ti).

2 Карта изолированных доменов (Bounded Contexts)

Вся функциональность системы, включая жизненный цикл 8 кнопок пользовательского интерфейса Flutter, контур предиктивной аналитики и внешние государственные шлюзы, разделена на 6 изолированных доменов: 4 бизнес-домена (Core) и 2 вспомогательных инфраструктурных домена (Supporting).

graph TD
    classDef coreClass fill:#f9f9f9,stroke:#333,stroke-width:2px;
    classDef infraClass fill:#e1f5fe,stroke:#0288d1,stroke-width:1px,stroke-dasharray: 5 5;
    
    subgraph IAD_DOMAIN [1. Identity & Access Domain IAD]
        A[auth-identity-service]
    end
    class IAD_DOMAIN coreClass;

    subgraph MDM_DOMAIN [2. Master Data Registry Domain MDM]
        B[product-registry-service]
        C[recipe-cookbook-registry]
    end
    class MDM_DOMAIN coreClass;

    subgraph INVENTORY_DOMAIN [3. Core Warehouse & Flow Inventory]
        D[shop-engine]
        E[warehouse-fridge-ops]
    end
    class INVENTORY_DOMAIN coreClass;

    subgraph AFFINITY_DOMAIN [4. Predictive Intelligence & Affinity]
        F[affinity-prediction-core]
    end
    class AFFINITY_DOMAIN coreClass;

    subgraph AID_DOMAIN [5. AI Orchestration & Vision AID]
        G[ai-vision-worker / EasyOCR / YOLOv8]
        H[ai-speech-worker / Whisper]
        I[redis-profanity-censor]
    end
    class AID_DOMAIN infraClass;

    subgraph PMA_DOMAIN [6. Process Mining & Audit PMA]
        J[bupar-audit-service]
    end
    class PMA_DOMAIN infraClass;

    %% Потоки данных и связи
    A -->|Контекст группы и аккаунта в JWT| INVENTORY_DOMAIN
    D -->|Загрузка медиа/чеков через Claim-Check| AID_DOMAIN
    AID_DOMAIN -->|Асинхронный возврат JSON-структур| D
    INVENTORY_DOMAIN -->|Стриминг векторов списания| AFFINITY_DOMAIN
    INVENTORY_DOMAIN -.->|Стриминг case_id и X-Request-ID| PMA_DOMAIN
    AID_DOMAIN -->|Сигнал о нарушении лимита мата| A

3 Детальная спецификация системных доменов

3.1 Identity & Access Domain (IAD)

Отвечает строго за состояние учетных записей пользователей, синхронизацию сессий между устройствами и жесткие границы разграничения доступа внутри групп.

  • Микросервисы: auth-identity-service.
  • Зона ответственности: Логика создания и администрирования групп типа «Семья» (HOME) или «Компания/Офис» (OFFICE). Хранит внутренние связи (user_id \(\leftrightarrow\) home_group_id). Пакует тип контура и ID группы прямо в JWT-токен для исключения синхронных межсервисных запросов.
  • Внешняя интеграция: Контур безопасности домена инкапсулирует gRPC-клиенты для интеграции с государственными сервисами авторизации (ЕСИА, цифровые ID-порталы) для верификации корпоративных аккаунтов.

3.2 Master Data Registry Domain (MDM)

Статический технологический «мозг» системы. Хранит неизменяемые физико-химические константы, БЖУ и алгоритмы взаимодействия элементов.

  • Микросервисы: product-registry-service (Периодическая система номенклатур), recipe-cookbook-registry.
  • Зона UI (Flutter): Управляет отображением и логикой кнопок 8. Pantry (Продукты), 7. Cookbook (Рецепты) и 6. Meals (Меню).
  • Зона ответственности: Предоставление эталонных матриц и весов элементов. Содержит эндпоинты для маппинга текстовых строк, распознанных ИИ, на уникальные ID номенклатурных позиций.

3.3 Core Warehouse & Flow Inventory Domain (INV)

Операционный слой системы с наивысшей транзакционной нагрузкой (OLTP). Отвечает за любое физическое движение ресурсов, изменение объемов и фиксацию порчи. Реализует паттерн Database-per-Service (изолированные БД Postgres).

  • Микросервисы: shop-engine (хранение чеков, база цен), warehouse-fridge-ops (партионный учет, IoT смарт-метки контейнеров, веса, таймеры свежести).
  • Зона UI (Flutter): Управляет поведением кнопок 1. Shop (Покупки), 2. Fridge (Холодильник), 3. Cook (Готовка), 4. Consume (Потребление) и 5. Waste (Мусорка).
  • Контурные правила (Бизнес-логика):
    • Контур HOME: Допускает и маскирует отрицательные балансы на клиенте для обеспечения высокой лояльности UI.
    • Контур OFFICE: Включает жесткие gRPC-блокировки с возвратом ошибки 422 Unprocessable Entity (INSUFFICIENT_STOCK) при попытке списать отсутствующий объем.
  • Каскадное FIFO: Сервис warehouse-fridge-ops производит каскадное списание продуктов по партиям. На фронтенде (экран Consume) применяется пре-фильтрация (quantity > 0) для очистки транзакционного payload.

3.4 Predictive Intelligence & Affinity Domain (AFF)

Математический аналитический контур (OLAP) оценки пользовательского поведения. Рассчитывает индекс востребованности каждого продукта на основе действий живых людей.

  • Микросервисы: affinity-prediction-core.
  • Зона ответственности: Обрабатывает асинхронные сигналы от кнопок Consume (положительный весовой коэффициент) и Waste (отрицательный штрафной коэффициент).
  • Демон затухания (Cron Decay Engine): Специализированный планировщик задач. Ровно в 00:00 каждые сутки запускает математическую функцию экспоненциального затухания (Exponential Decay Window) в оперативной памяти (Redis). Если продукт долго не покупается, его вес плавно деградирует. Результаты пачками сбрасываются в БД и используются модулем Shop для предиктивного формирования списков покупок.

3.5 AI Orchestration & Vision Domain (AID)

Вспомогательный инфраструктурный домен. Изолирует «тяжелый» вычислительный ИИ-комплекс от бизнес-логики. Предоставляет единый асинхронный интерфейс для обработки медиа-потоков на GPU.

  • Микросервисы: ai-vision-worker (YOLOv8, EasyOCR для чеков), ai-speech-worker (Whisper tiny для VTT голоса), ollama-llm-proxy (структурированный вывод LLM), redis-profanity-censor.
  • ИИ-Цензор мата: Проверяет текстовые потоки, генерируемые пользователем. Накопительный счетчик в Redis привязан к user_id. Лимит — 2 попытки мата, после чего генерируется событие для немедленного бана сессии в домене IAD.

3.6 Process Mining & Audit Domain (PMA)

Вспомогательный домен сквозного мониторинга. Отвечает за сбор технической и бизнес-телеметрии без влияния на производительность транзакционного ядра склада.

  • Микросервисы: bupar-audit-service, интеграционные хабы Promtail/Grafana Loki.
  • Зона ответственности: Агрегация сквозных логов по заголовку X-Request-ID (от Nginx через FastAPI и Kafka до Grafana Loki) и трансляция интерактивного пайплайна на экран ObservabilityScreen во Flutter. Извлечение case_id для Process Mining цепочек жизненного цикла еды (от закупки до утилизации).