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| ACloudFront - 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
/healthrenvoie 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
-
Architecture Analytique - Découvrez notre approche analytique hybride
-
Pipeline SEO - Comprenez comment les requêtes de recherche deviennent des pages produits
-
Architecture du Service de Recherche - Plongez dans notre infrastructure de recherche
-
Stratégie de Mise en Cache - Explorez la mise en cache à tous les niveaux
-
Architecture de Déploiement - Voyez comment le système est déployé
-
Considérations de Sécurité - Passez en revue les mesures de sécurité