Aperçu de l'Infrastructure

Cet article fournit un aperçu complet de l'infrastructure qui alimente le site web public Thinvent. Nous couvrirons l'ensemble de la pile technologique, du serveur web à la couche de base de données, et expliquerons comment tous les composants fonctionnent ensemble pour offrir une expérience e-commerce rapide, fiable et évolutive.

Pile d'Application Web

Flask - Le Fondement

Notre site web est construit sur Flask, un framework web Python léger et flexible. Flask fournit le routage principal, la gestion des requêtes/réponses et le système de blueprints qui organise notre application en composants modulaires.

Fonctionnalités clés de Flask que nous utilisons :

  • Blueprints : Organisent l'application en modules logiques (web, api, cart, product, etc.)

  • Templating Jinja2 : Génération de HTML côté serveur avec héritage de templates

  • Contexte de requête : Gestion automatique des requêtes HTTP et des sessions

  • Werkzeug : Serveur de développement et fonctions utilitaires

L'application Flask est initialisée dans le module web où nous :

  • Créons le blueprint web

  • Initialisons Babel pour l'internationalisation

  • Configurons le stockage de session Valkey

  • Mettons en place les context processors pour les variables de template

Gunicorn - Serveur de Production

Pour la production, nous utilisons Gunicorn (Green Unicorn), un serveur HTTP WSGI Python. Gunicorn exécute notre application Flask avec plusieurs processus de travail (workers).

Gunicorn est géré par systemd, ce qui garantit son redémarrage automatique en cas de plantage ou de redémarrage du serveur. Cela nous offre une haute disponibilité sans intervention manuelle.

Nginx - Proxy Inverse & Répartiteur de Charge

Nginx sert de proxy inverse et de répartiteur de charge. Il se place devant Gunicorn et gère :

  • Terminaison SSL/TLS : Chiffrement/déchiffrement HTTPS

  • Service de fichiers statiques : CSS, JavaScript, images (servis directement depuis le disque)

  • Proxy inverse : Transfère les requêtes dynamiques à Gunicorn

  • Limitation de débit : Protection contre les abus

  • Compression des requêtes : Compression Gzip pour des transferts plus rapides

Ubuntu - Système d'Exploitation

Toutes les instances EC2 exécutent Ubuntu, notre distribution Linux choisie. Nous préférons utiliser les paquets Python d'Ubuntu lorsqu'ils sont disponibles, plutôt que pip.

Le flux de requête typique est :

flowchart LR
    A[Navigateur Client] -->|Requête HTTPS| B[Nginx]
    B -->|Proxie vers| C[Gunicorn]
    C -->|WSGI| D[Application Flask]
    D -->|Interroge| E[Cache Valkey]
    E -->|Absence| F[DynamoDB]
    F -->|Réponse| E
    E -->|Présence| G[Réponse]
    G --> B
    B -->|Réponse| A

CloudFront - Réseau de Diffusion de Contenu

CloudFront est notre CDN, fournissant :

  • Protection DDoS : Protection intégrée contre les attaques distribuées

  • Protection d'origine : Protège nos serveurs d'origine des pics de trafic

Notre distribution CloudFront a deux origines :

  • Serveur backend : Application Flask backend

  • S3 : Bucket S3 pour les ressources statiques

Comportements de cache configurés :

  • /s/* - Ressources statiques (CSS, JS, images) avec un TTL de 24 heures

  • /ds/*.pdf - Fiches techniques avec un TTL de 24 heures

  • /api/* - Points de terminaison API sans mise en cache

  • /cart - Panier avec un TTL de 24 heures

  • /set-language - Sans mise en cache (dynamique)

Couche de Données

DynamoDB - Base de Données Principale

Nous utilisons Amazon DynamoDB comme base de données principale. DynamoDB est une base de données NoSQL.

Nos tables DynamoDB incluent :

  • Recommandations : Recommandations de produits générées par IA

  • Descriptions de produits : Descriptions de produits en plusieurs langues

  • Pages de requêtes : Pages de requêtes analysées pour le SEO

Nous utilisons PynamoDB, un ORM Pythonique pour DynamoDB, qui fournit :

  • Définitions de modèles : Classes Python pour les tables de base de données

Valkey - Cache en Mémoire

Valkey (un fork de Redis) est notre couche de cache en mémoire, fournissant :

  • Stockage de session : Sessions utilisateur avec expiration glissante de 30 jours

  • Données fréquemment accédées : Comptes de produits, requêtes populaires

  • Cache de saisie semi-automatique : Suggestions de recherche

  • Manifeste d'images : Emplacements des images de produits

Valkey offre des avantages significatifs en performance :

  • 100x plus rapide que DynamoDB pour les opérations de lecture

  • Charge de base de données réduite : Les accès au cache évitent les requêtes DynamoDB

  • Persistance de session : Sessions basées sur Valkey entre les requêtes

Nous utilisons Valkey pour :

  • Sessions : État de connexion utilisateur, données du panier

  • Mise en cache : Requêtes populaires, suggestions de saisie semi-automatique

  • Compteurs : Comptes de stock de produits (mis en cache pour la performance)

  • Files d'attente : Traitement des tâches en arrière-plan

S3 - Stockage d'Objets

Amazon S3 est notre service de stockage d'objets.

Nous utilisons S3 pour :

  • Images de produits : Photos de produits haute résolution

  • Fiches techniques : Spécifications de produits en PDF

  • Ressources statiques : CSS, JS, images

DNS & Routage

Route53 - Gestion de Domaine

Route53 gère notre DNS :

  • Enregistrement de domaine : thinvent.in et domaines associés

Routage Nginx

Nginx route les requêtes en fonction des motifs d'URL :

  • / → Application Flask (accueil, produits, panier, paiement)

  • /q/ → Application Flask (pages de requête, résultats de recherche)

  • /api/ → Application Flask (points de terminaison API)

  • /static/ → CloudFront/S3 (ressources statiques)

Infrastructure de Recherche & IA

Service de Recherche

Nous exécutons une application Flask autonome pour la fonctionnalité de recherche. Ce service fournit :

  • Recherche vectorielle : Similarité sémantique pour les requêtes associées

  • Saisie semi-automatique : Suggestions de recherche basées sur les préfixes

  • Requêtes populaires : Termes les plus recherchés

  • Extraction de filtres : Analyse des requêtes de recherche pour les facettes

Le service de recherche utilise :

  • Valkey RediSearch : Recherche de similarité vectorielle

  • SentenceTransformer : Génération d'embeddings

  • Correspondances de phrases : Extraction de filtres via correspondance de sous-chaînes

Fournisseurs d'IA

Nous utilisons plusieurs fournisseurs d'IA pour différentes tâches :

DeepSeek

  • Modèle : deepseek-chat

  • Cas d'utilisation : Descriptions de produits, contenu des pages de requête, traduction

  • API : API DeepSeek avec secours Together.ai

  • Mise en cache : Prompts système pour l'efficacité du cache de prompts

Gemini

  • Modèle : Gemini (modèle spécifique)

  • Cas d'utilisation : Génération de contenu

  • Intégration : Appels API directs

Amazon Bedrock

  • Modèles : Nova Pro

  • Cas d'utilisation : Chat interne

  • Intégration : SDK boto3

Amazon Bedrock

  • Modèles : Nova Lite

  • Cas d'utilisation : Chatbot client

  • Intégration : SDK boto3

Flux de Requête Complet

Voici comment une requête typique circule dans notre infrastructure :

flowchart TD
    A[Navigateur Client] -->|Requête DNS| B[Route53]
    B -->|Adresse IP| C[CloudFront]
    C -->|Vérification Cache| D{Cache Présent?}
    D -->|Oui| E[Retourne Contenu en Cache]
    D -->|Non| F[Nginx]
    F -->|Proxie| G[Gunicorn]
    G -->|WSGI| H[Application Flask]
    H -->|Vérification Cache| I[Valkey]
    I -->|Présent| J[Retourne Données en Cache]
    I -->|Absent| K[DynamoDB]
    K -->|Requête| L[Retourne Données]
    L --> I
    J --> M[Construit Réponse]
    E --> M
    M --> N[Envoie au Client]

Surveillance & Santé

UptimeRobot - Surveillance Externe

Nous utilisons UptimeRobot pour la surveillance externe de tous les points de terminaison publics :

  • Serveur backend : Site web backend

  • www.thinvent.in : Site web public

Contrôles de Santé

  • Gunicorn : systemd gère les redémarrages

  • Flask : Le point de terminaison /health renvoie le statut

  • Valkey : Santé de la connexion surveillée

  • DynamoDB : Latence et débit surveillés

Journalisation

  • Journaux d'application : Gunicorn error.log

  • Journaux d'accès : Gunicorn access.log

  • Email : Notifications en temps réel pour les événements critiques avec tracebacks Python

Résumé

Notre infrastructure est conçue pour :

  • Performance : Multiples couches de cache, CDN, requêtes optimisées

  • Évolutivité : Bases de données à mise à l'échelle automatique, répartition de charge

  • Rentabilité : Paiement à l'usage, mise en cache pour réduire la charge de la base de données

La combinaison de Flask, Gunicorn, Nginx, Ubuntu, DynamoDB, Valkey, CloudFront et UptimeRobot fournit une base robuste et évolutive pour notre plateforme e-commerce.

Articles Connexes