graph TD
%% ОПРЕДЕЛЕНИЕ УЗЛОВ И САБГРАФОВ
subgraph Edge_Layer ["Edge Layer (Контур контроля доступа)"]
RN["Flutter Client / Агенты Симулятора"]
Nginx["Nginx Reverse Proxy & Gateway"]
end
subgraph Core_Backend_Layer ["Core Backend Layer (Контур оркестрации)"]
GoBackend["Go Core Backend"]
end
subgraph Heavy_AI_Compute_Layer ["Heavy AI & Analytics Layer (Вычисления и Майнинг)"]
FastAPIWrapper["FastAPI Wrapper Nodes"]
gRPCNodes["Whisper / OCR"]
PM4Py["PM4Py (Process Mining Engine)"]
end
subgraph Storage_Persistence_Layer ["Storage & Persistence Layer (Слой хранения)"]
MinIO["MinIO S3 Object Storage"]
Kafka["Apache Kafka Cluster: KRaft"]
DB1["PostgreSQL Auth DB"]
DB2["PostgreSQL Business DB"]
end
subgraph Analytics_Observability_Layer ["Analytics & Observability Layer"]
ClickHouse["ClickHouse DBMS (Единое аналитическое хранилище)"]
end
%% НАПРАВЛЕНИЯ ОСНОВНЫХ ПОТОКОВ ДАННЫХ
RN -->|HTTP/HTTPS requests| Nginx
Nginx -->|Проксирование и балансировка| GoBackend
%% Связи Go Core бэкенда
GoBackend -->|gRPC поверх HTTP/2| FastAPIWrapper
GoBackend -->|Неблокирующий ввод-вывод| MinIO
GoBackend -->|Асинхронный пуш DTO-событий| Kafka
GoBackend -->|Транзакции и логи сессий| DB1
GoBackend -->|Бизнес-логика и каталоги| DB2
%% Внутренняя логика ИИ и Аналитики
FastAPIWrapper --- gRPCNodes
FastAPIWrapper --- PM4Py
%% БИЗНЕС-ПОТОК: Репликация данных для Process Mining
DB2 -->|ETL / CDC Репликация логов процессов| ClickHouse
ClickHouse ==>|Выборка Event Logs для анализа| PM4Py
%% ТЕХНИЧЕСКИЙ ПОТОК: Обсервабилити (Логирование компонентов)
Nginx -.->|stdout/stderr логи| ClickHouse
GoBackend -.->|Логи горутин и метрики| ClickHouse
FastAPIWrapper -.->|Метрики LLM и ML-моделей| ClickHouse
Kafka -.->|Метрики очередей| ClickHouse
%% СТИЛИЗАЦИЯ
style GoBackend fill:#2B6CB0,stroke:#fff,stroke-width:2px,color:#fff
style FastAPIWrapper fill:#2F855A,stroke:#fff,stroke-width:2px,color:#fff
style gRPCNodes fill:#D69E2E,stroke:#fff,stroke-width:2px,color:#fff
style PM4Py fill:#4A5568,stroke:#fff,stroke-width:2px,color:#fff
style ClickHouse fill:#E53E3E,stroke:#fff,stroke-width:2px,color:#fff
style Nginx fill:#319795,stroke:#fff,stroke-width:2px,color:#fff
style Kafka fill:#10B981,stroke:#fff,stroke-width:2px,color:#fff
FLOW: Структура работы приложения
В открытом доступе представлена демонстрационная версия метода. В настоящей публичной документации отображены не все шаги, технические сценарии и приватные эндпоинты для системы цифровых симуляторов бизнес-процессов.
- Полная спецификация метода: Будет доступна только во внутреннем контуре разработки (Confluence / Swagger Enterprise).
1 Архитектура системы (System Architecture)
Архитектура системы спроектирована по многослойному (Layered Architecture) принципу с четким разделением зон ответственности (Separation of Concerns). Система разделена на изолированные слои, что обеспечивает независимое масштабирование клиентской части, производительного бэкенда, тяжелых вычислений и систем хранения данных. Вся архитектура делится на пять ключевых доменов:
- Edge Layer — слой первичного приема, фильтрации и распределения трафика.
- Core Backend Layer — центральный слой бизнес-логики на базе Go, оркестрирующий все потоки данных.
- Storage & Persistence — распределенный слой хранения транзакционных данных, событий и медиафайлов.
- Heavy AI Compute Layer — изолированный слой выполнения ресурсоемких задач искусственного интеллекта, где FastAPI выступает в роли сервисного интерфейса для LLM и ML-моделей (распознавание речи, компьютерное зрение).
- Observability Layer — сквозная инфраструктура логирования, сбора метрик и мониторинга состояния системы.
2 Технологический ландшафт (Tech Stack / IT Landscape)
Технологический стек системы подобран с упором на максимальную производительность, параллелизм и эффективную работу с ИИ-моделями:
- Client: Кроссплатформенный фреймворк Flutter для пользовательского интерфейса и специализированные агенты симулятора для генерации синтетической нагрузки.
- API Gateway & Proxy: Веб-сервер Nginx, выступающий в роли Reverse Proxy и балансировщика нагрузки.
- Core Backend: Бэкенд на Go, обеспечивающий обработку бизнес-логики, эффективную параллелизацию задач с помощью горутин (goroutines) и низкое потребление ресурсов.
- Compute Layer (AI): Контейнеризированные узлы gRPC Service Nodes, завернутые в асинхронный веб-фреймворк FastAPI (Python) для предоставления gRPC-интерфейса к тяжелым ML-моделям распознавания речи (например Whisper) и оптического распознавания текста (OCR).
- Brokers & Storage: Apache Kafka в современной архитектуре KRaft (без необходимости развертывания ZooKeeper) для надежного асинхронного стриминга событий.
- MinIO S3 — S3-совместимое объектное хранилище для неструктурированных медиаданных.
- PostgreSQL — реляционная СУБД, разделенная на два изолированных инстанса: Auth DB (сессии, права, пользователи) и Business DB (каталоги, бизнес-сущности).
graph TD
%% СХЕМА ТЕХНОЛОГИЧЕСКОГО ЛАНДШАФТА (БЕЗ СВЯЗЕЙ ДЛЯ МАКСИМАЛЬНОЙ ШИРИНЫ)
subgraph Layer1 ["1. CLIENT & SIMULATION LAYER"]
direction LR
Flutter["Frontend: Flutter Framework"]:::clientStep
Bots["Load Generation: Custom Simulation Bots"]:::clientStep
end
subgraph Layer2 ["2. ROUTING & INGRESS LAYER"]
direction LR
Nginx["Reverse Proxy / API Gateway: Nginx"]:::nginxStep
end
subgraph Layer3 ["3. CORE BACKEND LAYER"]
direction LR
Go["Runtime & Orchestration: GO (Golang)"]:::goStep
end
subgraph Layer4 ["4. COMPUTE & ANALYTICS LAYER"]
direction LR
FastAPI["API Wrapper: FastAPI (Python)"]:::aiStep
Whisper["Speech-to-Text: OpenAI Whisper"]:::aiStep
OCR["Text Recognition: CV OCR"]:::aiStep
PM4Py["Process Mining: PM4Py Engine"]:::aiStep
end
subgraph Layer5 ["5. DATA & MESSAGING LAYER"]
direction LR
Kafka["Event Streaming: Apache Kafka (KRaft)"]:::pgStep
Postgres["Relational СУБД: PostgreSQL"]:::pgStep
MinIO["Object Storage: MinIO S3"]:::pgStep
end
subgraph Layer6 ["6. ANALYTICS & OBSERVABILITY LAYER"]
direction LR
ClickHouse["Columnar DBMS: ClickHouse (DWH / Logs)"]:::chStep
end
%% НАСТРОЙКА ЦВЕТОВЫХ СТИЛЕЙ
%% 1. Слой клиента (Фиолетовый)
style Layer1 fill:#F3E8FF,stroke:#7E22CE,stroke-width:1px,color:#6B21A8,font-weight:bold
classDef clientStep fill:#FFFFFF,stroke:#A855F7,stroke-width:1px,color:#2D3748;
%% 2. Слой маршрутизации (Бирюзовый)
style Layer2 fill:#E6FFFA,stroke:#0D9488,stroke-width:1px,color:#115E59,font-weight:bold
classDef nginxStep fill:#FFFFFF,stroke:#0D9488,stroke-width:1px,color:#2D3748;
%% 3. Слой Go-бэкенда (Синий)
style Layer3 fill:#E0F2FE,stroke:#0369A1,stroke-width:1px,color:#0C4A6E,font-weight:bold
classDef goStep fill:#FFFFFF,stroke:#0EA5E9,stroke-width:1px,color:#2D3748;
%% 4. Слой ИИ и Аналитики (Зеленый)
style Layer4 fill:#F0FDF4,stroke:#15803D,stroke-width:1px,color:#14532D,font-weight:bold
classDef aiStep fill:#FFFFFF,stroke:#22C55E,stroke-width:1px,color:#2D3748;
%% 5. Слой хранения и брокеров (Серый)
style Layer5 fill:#F5F5F4,stroke:#78716C,stroke-width:1px,color:#44403C,font-weight:bold
classDef pgStep fill:#FFFFFF,stroke:#78716C,stroke-width:1px,color:#2D3748;
%% 6. Слой ClickHouse (Красный)
style Layer6 fill:#FEF2F2,stroke:#B91C1C,stroke-width:1px,color:#7F1D1D,font-weight:bold
classDef chStep fill:#FFFFFF,stroke:#EF4444,stroke-width:1px,color:#2D3748;
3 Поток данных (Data Flow)
Поток данных (Data Flow) в системе имеет направленный характер и разделяется на синхронный (запрос-ответ) и асинхронный (событийно-ориентированный) конвейеры:
- Входящий поток: Данные рождаются на клиенте (Мобильное приложение / Агенты) и в виде HTTP/HTTPS запросов поступают на Nginx.
- Маршрутизация: Nginx проксирует очищенный поток на центральный Go Core Backend.
- Разветвление потоков на Бэкенде: Go-сервис выступает главным диспетчером и делит данные по типу обработки:
- Транзакционные данные: Направляются в виде SQL-запросов строго в целевые базы — авторизационные данные в
Auth DB, данные предметной области — вBusiness DB. - Бинарные / Тяжелые данные: Через эффективный неблокирующий ввод-вывод (Non-blocking I/O) отправляются из Go на долговременное хранение в
MinIO S3 Object Storage. - Событийные данные: Трансформируются в DTO (Data Transfer Object) и асинхронно пушатся в топики
Kafka. - ИИ-запросы: Поток данных, требующий интеллектуальной обработки, перенаправляется бэкендом по протоколу gRPC поверх HTTP/2 на слой ИИ, где его принимает
FastAPIи передает в нейросети.
%%{init: {
'theme': 'base',
'themeVariables': {
'actorBkg': '#E3F2FD',
'actorBorder': '#546E7A',
'actorTextColor': '#0D47A1',
'rectBkg': '#FFF9C4',
'rectBorder': '#FBC02D',
'noteBkgColor': '#F3E5F5',
'noteBorderColor': '#7E57C2',
'noteTextColor': '#311B92',
'signalColor': '#2C3E50',
'signalLineColor': '#2C3E50'
}
}}%%
sequenceDiagram
autonumber
actor Client as Flutter / Боты
participant Go as Go Core Backend
participant DB as PostgreSQL
participant CH as ClickHouse DBMS
participant PM as FastAPI (PM4Py Engine)
%% 1. Инициация и транзакционный слой
Note over Client, Go: [ТРАНЗАКЦИОННЫЙ ПОТОК]
Client->>Go: Запуск сценария симуляции (HTTP POST)
Go->>CH: [Tech Log] Старт обработки запроса (Асинхронный пуш)
Go->>DB: Запись текущего состояния процесса в транзакционную БД
DB-->>Go: Успешное сохранение (ID транзакции)
Go-->>Client: Сценарий принят в работу (HTTP 202 Accepted)
%% 2. Аналитический слой (Репликация)
Note over DB, CH: [АНАЛИТИЧЕСКИЙ ПОТОК (ETL / СИНХРОНИЗАЦИЯ)]
loop Каждые N секунд / По событию CDC
DB->>CH: Репликация сырых исторических логов (Postgres -> ClickHouse)
end
%% 3. Слой Process Mining
Note over CH, PM: [ПОТОК PROCESS MINING И АНАЛИЗА]
Client->>Go: Запрос аналитики процесса (Хочу граф / Conformance Checking)
Go->>PM: Инициация анализа бизнес-процесса (gRPC)
PM->>CH: Тяжелый аналитический SQL-запрос (Выборка Event Logs)
CH-->>PM: Массив исторических данных (Case ID, Activity, Timestamp)
Note over PM: PM4Py обрабатывает логи,<br/>строит граф процесса (DFG)
PM-->>Go: Результаты майнинга процессов (gRPC ответ JSON/Прото)
Go-->>Client: Визуализация графа бизнес-процесса на UI
4 Схема взаимодействия компонентов (Component Interaction Flow / Diagram)
Взаимодействие между компонентами системы строго регламентировано протоколами связи для минимизации накладных расходов:
- Клиент ── Nginx ── Go Бэкенд: Взаимодействие строится на классическом REST-подходе по протоколам HTTP/HTTPS.
- Go Бэкенд ── Вычислительный слой (FastAPI / AI): Синхронное, но максимально быстрое межсервисное взаимодействие. Компиляторный Go общается с FastAPI через gRPC поверх HTTP/2. Это позволяет стримить бинарные данные (например, аудиофайлы для Whisper или изображения для OCR) напрямую из бэкенда в Python-сервис в рамках постоянных мультиплексированных соединений с минимальным оверхедом.
- Go Бэкенд ── Брокер сообщений: Полностью асинхронное взаимодействие. Go-сервис отправляет DTO-события в Kafka, используя эффективные нативные библиотеки, не блокируя основной поток выполнения.
- Компоненты ── Observability: Все компоненты системы пишут логи в стандартные потоки stdout/stderr. Агент Promtail непрерывно считывает эти потоки и отправляет чанками (HTTP POST Chunks) в хранилище Loki, откуда Grafana запрашивает их через LogQL.
graph LR
%% ОПРЕДЕЛЕНИЕ СТИЛЕЙ
classDef edgeStyle fill:#ececff,stroke:#9370db,stroke-width:2px;
classDef coreStyle fill:#e1f5fe,stroke:#0288d1,stroke-width:2px;
classDef storageStyle fill:#efebe9,stroke:#5d4037,stroke-width:2px;
classDef aiStyle fill:#e8f5e9,stroke:#388e3c,stroke-width:2px;
classDef obsStyle fill:#fff3e0,stroke:#f57c00,stroke-width:2px;
%% УЗЛЫ СИСТЕМЫ
Clients["Flutter / Sims"]:::edgeStyle
Nginx["Nginx Proxy / Gateway"]:::edgeStyle
Go["Go Core Backend"]:::coreStyle
subgraph Compute ["Heavy AI & Analytics Layer"]
FastAPI["FastAPI Wrapper Nodes"]:::aiStyle
Whisper["Whisper Module"]:::aiStyle
OCR["OCR Module"]:::aiStyle
PM4Py["PM4Py Engine"]:::aiStyle
end
subgraph Storage ["Storage & Persistence Layer"]
MinIO["MinIO S3 Storage"]:::storageStyle
Kafka["Apache Kafka (KRaft)"]:::storageStyle
PostgresAuth["PostgreSQL (Auth DB)"]:::storageStyle
PostgresBiz["PostgreSQL (Business DB)"]:::storageStyle
end
ClickHouse["ClickHouse DBMS (DWH / Logs)"]:::obsStyle
%% СЕТЕВЫЕ ВЗАИМОДЕЙСТВИЯ (Направление стрелки = кто инициирует сессию)
Clients -->|HTTP / HTTPS| Nginx
Nginx -->|Reverse Proxy / HTTP| Go
%% Транзакционное взаимодействие Go бэкенда
Go -->|SQL / gRPC Drivers| PostgresAuth
Go -->|SQL / gRPC Drivers| PostgresBiz
Go -->|AWS S3 API / TCP| MinIO
Go -->|TCP / native wire protocol| Kafka
%% Межсервисный синхронный gRPC канал (HTTP/2)
Go -->|gRPC поверх HTTP/2| FastAPI
FastAPI --- Whisper
FastAPI --- OCR
FastAPI --- PM4Py
%% Аналитический поток (Асинхронная репликация данных)
PostgresBiz -->|CDC / ETL Репликация| ClickHouse
PM4Py -->|Аналитические SQL Запросы| ClickHouse
%% Инфраструктурный поток обсервабилити (Телеметрия)
Nginx -.->|Асинхронный стриминг логов| ClickHouse
Go -.->|Метрики горутин и трассировка| ClickHouse
FastAPI -.->|Метрики утилизации GPU/CPU| ClickHouse
Изоляция транзакционного и аналитического контуров: Обратите внимание, что сервис
PM4Pyне имеет прямого доступа к операционной базеBusiness DB. Межсервисный запрос направлен строго вClickHouse. Это полностью защищает «живую» базу данных от деградации производительности во время тяжелых расчетовProcess Mining.Взаимодействие между бэкендом на Go и ИИ/аналитическим слоем
FastAPIосуществляется через постоянные мультиплексированные gRPC (HTTP/2) соединения. Это минимизирует задержки (overhead) на сериализацию данных и открытие сетевых сокетов, что критично для передачи аудиофайлов вWhisperили тяжелых логов вPM4Py.Конвергентность логирования: Вместо поддержки распределенного пула инфраструктурных агентов, все сервисы пишут структурированную телеметрию напрямую в
ClickHouseчерез нативные драйверы, снижая нагрузку на сеть и упрощая администрирование системы.
5 Сквозная логика системы (End-to-End System Flow)
Рассмотрим, как работает система на примере сквозного сценария: «Пользователь загружает голосовое сообщение или фото чека/меню для распознавания в симуляторе».
- Инициация: Пользователь в мобильном приложении нажимает кнопку и отправляет медиафайл. Запрос проходит через
Nginxи принимается бэкендом на Go. - Сохранение оригинала: Go-бэкенд принимает файл и через неблокирующий ввод-вывод моментально сохраняет его в
MinIO S3, получая уникальный ID файла. - Фиксация события: Бэкенд фиксирует метаданные запроса в
Business DBи отправляет асинхронное уведомление (DTO-событие) вKafkaо том, что создана новая задача. - Тяжелые вычисления (AI): Go-бэкенд инициирует gRPC-вызов к вычислительным нодам. На стороне ИИ-слоя
FastAPIпринимает этот вызов и, в зависимости от типа файла, передает управление конкретной ML-модели — либо Whisper (транскрибация аудио в текст), либо модулю OCR (распознавание текста с картинки). - Мониторинг шагов: На каждом этапе (сохранение в S3, отправка в Kafka, работа нейросети на FastAPI) сервисы отправляют технические логи в stdout. Promtail моментально доставляет их в Loki, и администратор системы видит весь путь прохождения запроса на дашборде Grafana в реальном времени.
- Финал: Результат распознавания возвращается из ИИ-ноды обратно в Go-бэкенд через gRPC-ответ, обновляется статус в PostgreSQL, и пользователь видит обработанные данные на экране своего устройства.
graph TD
%% НАСТРОЙКА КОНТЕЙНЕРОВ (ПЛАВАТЕЛЬНЫХ ДОРОЖЕК) С ЦВЕТОВЫМ РАЗДЕЛЕНИЕМ
subgraph Client_Layer ["КЛИЕНТСКИЙ СЛОЙ"]
A["1. Запуск симуляции (Flutter / Агенты)"]:::clientStep
H["8. Визуализация графа процесса на UI"]:::clientStep
end
subgraph Go_Layer ["GO CORE BACKEND"]
B["2. Прием запроса (через Nginx)"]:::goStep
G["7. Оркестрация и отправка ответа"]:::goStep
end
subgraph PG_Layer ["ПОТОК ТРАНЗАКЦИЙ (PostgreSQL)"]
C["3. Фиксация шагов в Business DB"]:::pgStep
end
subgraph CH_Layer ["АНАЛИТИЧЕСКОЕ ХРАНИЛИЩЕ (ClickHouse)"]
D["4. Асинхронная CDC-репликация данных"]:::chStep
F["6. Отдача Event Logs по SQL-запросу"]:::chStep
end
subgraph AI_Layer ["ВЫЧИСЛЕНИЯ (FastAPI / PM4Py)"]
E["5. Запуск Process Mining через gRPC"]:::aiStep
end
%% СВЯЗИ И НАПРАВЛЕНИЕ СКВОЗНОГО ПОТОКА
A -->|HTTP POST: Параметры сессии| B
B -->|SQL: Запись ACID-состояния| C
C -.->|Асинхронный стрим логов| D
B ==>|gRPC: Запрос аналитики процесса| E
E ==>|SQL: Выборка Case ID, Activity, Time| F
F ==>|Плоский массив Event Logs| E
E ==>|gRPC ответ: Граф процесса| G
G -->|HTTP 200 OK: Данные для отрисовки| H
%% НАСТРОЙКА ЦВЕТОВЫХ СТИЛЕЙ (Уникальные подложки слоев и шагов)
%% 1. Слой клиента (Фиолетовый)
style Client_Layer fill:#F3E8FF,stroke:#7E22CE,stroke-width:1px,color:#6B21A8,font-weight:bold
classDef clientStep fill:#FFFFFF,stroke:#A855F7,stroke-width:2px,color:#2D3748;
%% 2. Слой Go-бэкенда (Синий)
style Go_Layer fill:#E0F2FE,stroke:#0369A1,stroke-width:1px,color:#0C4A6E,font-weight:bold
classDef goStep fill:#FFFFFF,stroke:#0EA5E9,stroke-width:2px,color:#2D3748;
%% 3. Слой транзакций Postgres (Коричневый/Серый)
style PG_Layer fill:#F5F5F4,stroke:#78716C,stroke-width:1px,color:#44403C,font-weight:bold
classDef pgStep fill:#FFFFFF,stroke:#78716C,stroke-width:2px,color:#2D3748;
%% 4. Слой ClickHouse (Красный/Оранжевый)
style CH_Layer fill:#FEF2F2,stroke:#B91C1C,stroke-width:1px,color:#7F1D1D,font-weight:bold
classDef chStep fill:#FFFFFF,stroke:#EF4444,stroke-width:2px,color:#2D3748;
%% 5. Слой ИИ и Аналитики (Зеленый)
style AI_Layer fill:#F0FDF4,stroke:#15803D,stroke-width:1px,color:#14532D,font-weight:bold
classDef aiStep fill:#FFFFFF,stroke:#22C55E,stroke-width:2px,color:#2D3748;
%% Выделение синим цветом стрелок основного аналитического конвейера
linkStyle 3,4,5,6 stroke:#2563EB,stroke-width:3px;