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
Архитектура Экосистемы BPDS: Доменная структура
Domain-Driven Design (DDD) & Bounded Contexts Specification
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).
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 цепочек жизненного цикла еды (от закупки до утилизации).