Consultation du catalogue
Flux de consultation du catalogue : du frontend jusqu'au microservice de catalogue, en passant par la base de données et la couche de cache pour optimiser les réponses.
Pourquoi la consultation du catalogue est un flux représentatif
La consultation du catalogue est l’un des flux les plus fréquents dans toute application de commerce ou de gestion. C’est un cas de lecture intensive : de nombreux utilisateurs consultent les mêmes données, celles-ci changent rarement et la rapidité de réponse a un impact direct sur l’expérience utilisateur.
Ce flux illustre comment l’architecture gère les lectures optimisées avec du cache et comment le BFF adapte les données pour le frontend.
Le flux complet
sequenceDiagram
participant FE as Frontend
participant GW as API Gateway
participant BFF as BFF
participant CACHE as Caché
participant MS as ms-catalog
participant DB as Catalog DB
FE->>GW: GET /catalog/products?category=electronics
GW->>GW: Auth, rate limiting
GW->>BFF: Forward
BFF->>CACHE: ¿Datos en caché?
alt Cache HIT
CACHE-->>BFF: Datos cacheados
else Cache MISS
BFF->>MS: GET /products?category=electronics
MS->>DB: SELECT * FROM products WHERE category = ...
DB-->>MS: Resultados
MS-->>BFF: Lista de productos
BFF->>CACHE: Guardar en caché (TTL: 5 min)
end
BFF->>BFF: Transformar para UI
BFF-->>GW: Respuesta formateada
GW-->>FE: 200 OK + productos
Ce que fait chaque couche
Frontend
- L’utilisateur navigue vers une catégorie ou utilise le moteur de recherche
- Le frontend construit la requête avec des filtres (catégorie, prix, tri)
- Il envoie la requête au Gateway
- Il reçoit les produits et les affiche dans une grille ou une liste
- Il peut mettre en œuvre la pagination ou le défilement infini
API Gateway
- Il valide le token JWT de l’utilisateur
- Il applique le rate limiting (les consultations du catalogue peuvent être très fréquentes)
- Il route vers le BFF
BFF
C’est au niveau du BFF que se déroule la plus grande partie de l’optimisation :
- Il reçoit la requête avec les filtres du frontend
- Il interroge le cache pour voir s’il possède déjà les données
- En cas de cache hit, il renvoie directement les données mises en cache
- En cas de cache miss, il invoque le microservice de catalogue
- Il enregistre la réponse dans le cache avec un TTL approprié
- Il transforme les données au format dont le frontend a besoin
Microservice de catalogue (ms-catalog)
- Il reçoit la requête avec les filtres
- Il construit la requête vers la base de données
- Il applique la pagination, le tri et les filtres
- Il renvoie les produits avec leurs données de domaine
Base de données
- Elle stocke les produits, catégories, prix, stock
- Elle possède des index optimisés pour les requêtes les plus fréquentes
- Elle peut utiliser des vues matérialisées pour les requêtes complexes
La couche de cache en détail
Où placer le cache
Il existe plusieurs options, qui peuvent être combinées :
| Emplacement | Avantage | Inconvénient |
|---|---|---|
| BFF (Redis/Memcached) | Réduit les appels au microservice | Nécessite une invalidation |
| Microservice | Transparent pour le BFF | La latence réseau subsiste |
| CDN / Gateway | Très rapide pour le contenu statique | Difficile à invalider |
| Frontend (local) | Instantané | Données potentiellement obsolètes |
Dans cette architecture, le cache principal se trouve au niveau du BFF, car c’est le point où l’on peut le mieux contrôler la transformation et l’invalidation.
Stratégie d’invalidation
Le cache du catalogue est invalidé de deux façons :
Par TTL (Time To Live) : chaque entrée a une durée de vie (par exemple, 5 minutes). Passé ce délai, elle est considérée comme obsolète et le microservice est interrogé de nouveau.
Par événement : lorsque le microservice de catalogue met à jour un produit, il publie un événement ProductUpdated. Le BFF écoute cet événement et invalide les entrées de cache concernées.
sequenceDiagram
participant ADMIN as Admin
participant MS as ms-catalog
participant EB as Event Bus
participant BFF as BFF
participant CACHE as Caché
ADMIN->>MS: PUT /products/123 (actualizar precio)
MS->>MS: Actualizar en DB
MS->>EB: Publicar ProductUpdated
EB->>BFF: Evento ProductUpdated
BFF->>CACHE: Invalidar entradas relacionadas
Cache key design
Les clés de cache doivent être déterministes et refléter les paramètres de la requête :
catalog:products:category=electronics:sort=price:page=1
catalog:products:category=electronics:sort=price:page=2
catalog:product:123
Transformation dans le BFF
Le microservice renvoie des données de domaine complètes, mais le frontend n’a pas besoin de tout. Le BFF transforme :
Réponse du microservice :
{
"id": "prod-123",
"internalSku": "SKU-2024-001",
"name": "Laptop Pro",
"description": "...",
"priceInCents": 99900,
"currency": "USD",
"stockQuantity": 45,
"warehouseLocation": "A-12-3",
"categoryId": "cat-electronics",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-15T10:00:00Z"
}
Réponse du BFF au frontend :
{
"id": "prod-123",
"name": "Laptop Pro",
"description": "...",
"price": "$999.00",
"inStock": true,
"category": "Electrónica",
"imageUrl": "/images/prod-123.jpg"
}
Le BFF supprime les données internes (internalSku, warehouseLocation), formate le prix, simplifie le stock en un booléen et résout la catégorie vers son nom lisible.
Pagination et performance
Pour les grands catalogues, la pagination est essentielle :
- Le frontend envoie
pageetpageSize - Le microservice applique
LIMITetOFFSETdans la requête - La réponse inclut des métadonnées de pagination (
totalItems,totalPages,currentPage) - Chaque page est mise en cache indépendamment
Scénarios d’erreur
Microservice indisponible
Si le microservice de catalogue est hors service mais qu’il existe des données en cache (même expirées), le BFF peut renvoyer les données obsolètes avec un en-tête indiquant qu’elles sont stale. C’est préférable à l’affichage d’une erreur à l’utilisateur.
Cache indisponible
Si Redis est hors service, le BFF interroge simplement le microservice directement. La latence augmente, mais le flux ne se rompt pas.
Requête sans résultat
Ce n’est pas une erreur. Le microservice renvoie une liste vide et le frontend affiche un message « Aucun produit trouvé ».
Résumé
La consultation du catalogue montre comment l’architecture optimise les flux de lecture intensive. Le cache au niveau du BFF réduit la charge sur le microservice et la base de données, tandis que l’invalidation par événements maintient les données raisonnablement fraîches. Le BFF transforme les données de domaine au format dont le frontend a besoin, tout en préservant la séparation des responsabilités entre les couches.