diff --git a/architecture-diagram.md b/architecture-diagram.md index 4e45a3d..50be704 100644 --- a/architecture-diagram.md +++ b/architecture-diagram.md @@ -3,35 +3,48 @@ ```mermaid graph TB %% External Layer - User[👤 User] --> GradioUI[🖥️ Gradio Web Interface] - + EndUser[👤 User] --> GradioUI[🖥️ Gradio Web Interface] + %% Presentation Layer subgraph "Presentation Layer" - GradioUI --> |Web Requests| GradioApp[gradio_app.py] + GradioUI --> |HTTP/Web Requests| GradioApp[gradio_app.py] end - + %% Application Layer subgraph "Application Layer" GradioApp --> RegisterUC[📝 RegisterFaceUseCase] GradioApp --> VerifyUC[🔍 VerifyFaceUseCase] GradioApp --> IdentifyUC[🔎 IdentifyFaceUseCase] + + %% Асинхронная публикация задач + RegisterUC --> TaskPublisher[📨 TaskPublisher] + VerifyUC --> TaskPublisher + IdentifyUC --> TaskPublisher - RegisterUC --> FaceService[⚙️ FaceRecognitionService] - VerifyUC --> FaceService - IdentifyUC --> FaceService + %% Хранилище статусов задач (поллинг/вебсокет) + GradioApp --> TaskStatusRepo[📊 TaskStatusRepository] + end + + %% Scalability / Async Layer + subgraph "Scalability Layer (Async, flipped-buffer)" + TaskPublisher --> RabbitMQ[(🐇 RabbitMQ)] + FaceWorkerPool[👷‍♂️ FaceWorker Pool - N instances] --> RabbitMQ + FaceWorkerPool --> TaskStatusRepo end - + %% Domain Layer subgraph "Domain Layer" - FaceService --> Face[👤 Face Entity] + FaceService[⚙️ FaceRecognitionService] --> Face[👤 Face Entity] FaceService --> User[👨‍💼 User Entity] FaceService --> VResult[✅ VerificationResult] FaceService --> IResult[🎯 IdentificationResult] - + FaceRepo[📊 FaceRepository Interface] VectorStore[🗂️ VectorStore Interface] + UserRepoIface[👨‍💼 UserRepository Interface] + ObjectStorageIface[📁 ObjectStorage Interface] end - + %% Infrastructure Layer subgraph "Infrastructure Layer" %% ML Components @@ -42,9 +55,10 @@ graph TB %% Storage Components subgraph "Storage Components" - MongoDB[🗄️ MongoDBFaceRepository] - ChromaDB[🔗 ChromaDBVectorStore] - FileSystem[📁 FileSystemStorage] + MongoDBRepo[🗄️ MongoDBFaceRepository] + MongoUserRepo[👨‍💼 MongoDBUserRepository] + ChromaDBStore[🔗 ChromaDBVectorStore] + S3Storage[🪣 S3ObjectStorage] end %% Configuration & Logging @@ -53,60 +67,73 @@ graph TB Logger[📋 Logging System] end end - + %% External Systems subgraph "External Systems" MongoDBServer[(🗄️ MongoDB Database)] ChromaDBServer[(🔗 ChromaDB Vector DB)] - FileStorage[(📁 File System)] + S3Bucket[(🪣 S3 Bucket)] ONNXModel[🧠 SFace ONNX Model] + RedisOrMongo[(📊 Redis/Mongo for Task Status)] end - - %% Service Dependencies + + %% Service Dependencies (исполняются внутри воркеров) + FaceWorkerPool --> FaceService FaceService --> RetinaFace FaceService --> SFaceRec FaceService --> FaceRepo FaceService --> VectorStore - FaceService --> FileSystem - + FaceService --> ObjectStorageIface + %% Repository Implementations - FaceRepo -.->|implements| MongoDB - VectorStore -.->|implements| ChromaDB - + FaceRepo -.->|implements| MongoDBRepo + VectorStore -.->|implements| ChromaDBStore + UserRepoIface -.->|implements| MongoUserRepo + ObjectStorageIface -.->|implements| S3Storage + %% External Connections - MongoDB --> MongoDBServer - ChromaDB --> ChromaDBServer - FileSystem --> FileStorage + MongoDBRepo --> MongoDBServer + MongoUserRepo --> MongoDBServer + ChromaDBStore --> ChromaDBServer + S3Storage --> S3Bucket SFaceRec --> ONNXModel - - %% Use Case Dependencies - RegisterUC --> UserRepo[👨‍💼 MongoDBUserRepository] - VerifyUC --> UserRepo - IdentifyUC --> UserRepo - UserRepo --> MongoDBServer - + TaskStatusRepo --> RedisOrMongo + + %% Use Case Dependencies (чтение пользователей/статусов) + RegisterUC --> MongoUserRepo + VerifyUC --> MongoUserRepo + IdentifyUC --> MongoUserRepo + %% Logging Dependencies RetinaFace -.-> Logger SFaceRec -.-> Logger FaceService -.-> Logger - + FaceWorkerPool -.-> Logger + TaskPublisher -.-> Logger + %% Configuration Dependencies FaceService -.-> Config - MongoDB -.-> Config - ChromaDB -.-> Config - + MongoDBRepo -.-> Config + MongoUserRepo -.-> Config + ChromaDBStore -.-> Config + S3Storage -.-> Config + RabbitMQ -.-> Config + TaskStatusRepo -.-> Config + %% Styling classDef presentation fill:#e1f5fe classDef application fill:#f3e5f5 classDef domain fill:#e8f5e8 classDef infrastructure fill:#fff3e0 classDef external fill:#ffebee - + classDef scalability fill:#ede7f6 + class GradioUI,GradioApp presentation - class RegisterUC,VerifyUC,IdentifyUC,FaceService application - class Face,User,VResult,IResult,FaceRepo,VectorStore domain - class RetinaFace,SFaceRec,MongoDB,ChromaDB,FileSystem,Config,Logger,UserRepo infrastructure - class MongoDBServer,ChromaDBServer,FileStorage,ONNXModel external + class RegisterUC,VerifyUC,IdentifyUC,TaskPublisher,TaskStatusRepo application + class Face,User,VResult,IResult,FaceRepo,VectorStore,UserRepoIface,ObjectStorageIface,FaceService domain + class RetinaFace,SFaceRec,MongoDBRepo,ChromaDBStore,S3Storage,Config,Logger,MongoUserRepo infrastructure + class MongoDBServer,ChromaDBServer,S3Bucket,ONNXModel,RedisOrMongo external + class RabbitMQ,FaceWorkerPool scalability ``` ## Architecture Overview