Aller au contenu principal

🏗️ 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 connexion
  • auth.validate : Validation des tokens
  • auth.refresh : Rafraîchissement des tokens
  • auth.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 utilisateurs
  • admin.roles : Gestion des rôles
  • admin.config : Configuration système
  • admin.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 collections
  • tradeflow.validation : Processus de validation
  • tradeflow.reports : Génération de rapports
  • tradeflow.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èles
  • model.types : Types de données
  • model.schemas : Schémas de validation
  • model.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.