🏗️ Architecture du Système
Vue d'ensemble de l'architecture microservices de Commerce Tracking.
🎯 Vue d'ensemble
Commerce Tracking est conçu avec une architecture microservices moderne qui sépare les responsabilités en services indépendants, communicant via un message broker NATS.
Principes architecturaux
- 🔀 Séparation des responsabilités : Chaque service a un domaine métier spécifique
- 📡 Communication asynchrone : NATS pour la communication entre services
- 🔄 Scalabilité horizontale : Services indépendants et réplicables
- 🛡️ Sécurité par défaut : Authentification centralisée et autorisation fine
- 📊 Observabilité : Logs, métriques et traces distribuées
🏛️ Architecture globale
┌─────────────────────────────────────────────────────────────────┐
│ CLIENT LAYER │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Web Client │ │ Mobile App │ │ API Client │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
│ HTTP/REST
▼
┌─────────────────────────────────────────────────────────────────┐
│ API GATEWAY LAYER │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Gateway API (NestJS) │ │
│ │ • Authentication & Authorization │ │
│ │ • Request Routing │ │
│ │ • Rate Limiting │ │
│ │ • Response Transformation │ │
│ │ • Error Handling │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
│ NATS Messages
▼
┌─────────────────────────────────────────────────────────────────┐
│ MICROSERVICES LAYER │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐│
│ │ Auth Service│ │Admin Service│ │TradeFlow Svc│ │Model Svc││
│ │ • Login │ │ • Users │ │ • Collections│ │ • Data ││
│ │ • JWT │ │ • Roles │ │ • Validation │ │ • Models││
│ │ • Sessions │ │ • Config │ │ • Reports │ │ • Types ││
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘│
└─────────────────────────────────────────────────────────────────┘
│
│ NATS
▼
┌─────────────────────────────────────────────────────────────────┐
│ MESSAGE BROKER LAYER │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ NATS Server │ │
│ │ • Message Routing │ │
│ │ • Service Discovery │ │
│ │ • Load Balancing │ │
│ │ • High Availability │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
│ SQL
▼
┌─────────────────────────────────────────────────────────────────┐
│ DATA LAYER │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ MySQL Database │ │
│ │ • Users & Authentication │ │
│ │ • Trade Flow Data │ │
│ │ • Reference Data │ │
│ │ • Audit Logs │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
🔧 Composants principaux
🌐 API Gateway (Port 3005)
Rôle : Point d'entrée unique pour toutes les requêtes client
Responsabilités :
- Authentification et autorisation JWT
- Routage des requêtes vers les microservices appropriés
- Transformation des réponses
- Gestion centralisée des erreurs
- Rate limiting et sécurité
Technologies :
- Framework : NestJS
- Communication : NATS Client
- Validation : Class Validator
- Cache : Redis-compatible
🔐 Auth Service (NATS)
Rôle : Gestion de l'authentification et de l'autorisation
Responsabilités :
- Validation des identifiants utilisateur
- Génération et validation des tokens JWT
- Gestion des sessions utilisateur
- Contrôle d'accès basé sur les rôles
Queues NATS :
auth.login: Processus de connexionauth.validate: Validation des tokensauth.refresh: Rafraîchissement des tokensauth.logout: Déconnexion
⚙️ Admin Service (NATS)
Rôle : Administration du système et gestion des utilisateurs
Responsabilités :
- Gestion des utilisateurs et rôles
- Configuration système
- Données de référence communes
- Administration des acteurs commerciaux
Queues NATS :
admin.users: Gestion des utilisateursadmin.roles: Gestion des rôlesadmin.config: Configuration systèmeadmin.actors: Gestion des acteurs
💰 TradeFlow Service (NATS)
Rôle : Gestion des flux commerciaux et des collections
Responsabilités :
- Création et gestion des collections
- Workflow de validation multi-niveaux
- Collectes digitalisées
- Génération de rapports et statistiques
Queues NATS :
tradeflow.collections: Gestion des collectionstradeflow.validation: Processus de validationtradeflow.reports: Génération de rapportstradeflow.statistics: Calcul des statistiques
📦 Model Service (NATS)
Rôle : Gestion des modèles de données et types
Responsabilités :
- Définition des modèles de données
- Gestion des types de produits
- Configuration des workflows
- Métadonnées du système
Queues NATS :
model.definitions: Définitions de modèlesmodel.types: Types de donnéesmodel.schemas: Schémas de validationmodel.metadata: Métadonnées système
🗄️ MySQL Database (Port 3340)
Rôle : Stockage persistant des données
Responsabilités :
- Stockage des données utilisateurs
- Persistance des collections commerciales
- Données de référence
- Logs d'audit et historique
Configuration :
- Port : 3340
- Engine : InnoDB
- Charset : UTF8MB4
- ORM : TypeORM
📡 Communication entre services
Pattern de communication
Client → Gateway → NATS → Microservice → Database
← ← ← ←
Types de messages NATS
1. Request-Response
// Exemple : Validation d'un token
const response = await natsClient.send('auth.validate', { token });
2. Publish-Subscribe
// Exemple : Notification d'événement
natsClient.emit('tradeflow.collection.created', { collectionId });
3. Queue Groups
// Exemple : Traitement distribué
natsClient.subscribe('tradeflow.validation', { queue: 'validation-workers' });
🔄 Flux de données
Flux d'authentification
sequenceDiagram
participant C as Client
participant G as Gateway
participant A as Auth Service
participant D as Database
C->>G: POST /auth/login
G->>A: auth.login {credentials}
A->>D: Validate user
D-->>A: User data
A-->>G: JWT token
G-->>C: Authentication response
Flux de création de collection
sequenceDiagram
participant C as Client
participant G as Gateway
participant T as TradeFlow Service
participant D as Database
C->>G: POST /trade-flow/collections
G->>T: tradeflow.collections.create {data}
T->>D: Save collection
D-->>T: Collection ID
T-->>G: Success response
G-->>C: Collection created
🛡️ Sécurité
Authentification JWT
- Algorithme : RS256 ou HS256
- Expiration : 1 heure (configurable)
- Refresh Token : 7 jours
- Claims : User ID, Role, Permissions
Autorisation par rôles
- Agent (role_id: 3) : Accès limité à ses données
- Chef d'Équipe (role_id: 4) : Validation niveau 1
- Superviseur (role_id: 5) : Validation niveau 2
Sécurité réseau
- API Gateway : Seul point d'entrée HTTP
- Services internes : Communication NATS uniquement
- Base de données : Accès restreint aux services
- HTTPS : Communication client chiffrée
📊 Observabilité
Logging
- Format : JSON structuré
- Niveaux : ERROR, WARN, INFO, DEBUG
- Corrélation : Trace ID pour le suivi des requêtes
- Rotation : Logs automatiques avec rétention
Métriques
- Performance : Temps de réponse, throughput
- Erreurs : Taux d'erreur par service
- Ressources : CPU, mémoire, réseau
- Business : Nombre de collections, utilisateurs actifs
Health Checks
- Liveness : Service en cours d'exécution
- Readiness : Service prêt à recevoir du trafic
- Dependencies : État des dépendances (DB, NATS)
🚀 Évolutivité
Scalabilité horizontale
- Services stateless : Réplication facile
- Load balancing : NATS distribue automatiquement
- Database sharding : Partitionnement par région/pays
- Cache distribué : Redis Cluster pour les performances
Déploiement
- Blue-Green : Déploiement sans interruption
- Canary : Déploiement progressif
- Rollback : Retour rapide en cas de problème
- Monitoring : Surveillance continue des déploiements
Cette architecture permet une évolution flexible du système tout en maintenant la cohérence et la performance. Chaque composant peut être développé, testé et déployé indépendamment.