Panoramica dell'Infrastruttura
Questo articolo fornisce una panoramica completa dell'infrastruttura che alimenta il sito web pubblico di Thinvent. Copriremo l'intero stack tecnologico, dal server web al livello del database, e spiegheremo come tutti i componenti lavorano insieme per fornire un'esperienza e-commerce veloce, affidabile e scalabile.
Stack dell'Applicazione Web
Flask - Le Fondamenta
Il nostro sito web è costruito su Flask, un framework web Python leggero e flessibile. Flask fornisce il core del routing, la gestione delle richieste/risposte e il sistema dei blueprint che organizza la nostra applicazione in componenti modulari.
Caratteristiche chiave di Flask che utilizziamo:
-
Blueprint: Organizzano l'applicazione in moduli logici (web, api, cart, product, ecc.)
-
Templating Jinja2: Generazione lato server di HTML con ereditarietà dei template
-
Contesto della richiesta: Gestione automatica delle richieste HTTP e delle sessioni
-
Werkzeug: Server di sviluppo e funzioni di utilità
L'applicazione Flask viene inizializzata nel modulo web dove:
-
Creiamo il blueprint web
-
Inizializziamo Babel per l'internazionalizzazione
-
Configuriamo lo storage delle sessioni Valkey
-
Impostiamo i context processor per le variabili dei template
Gunicorn - Server di Produzione
Per la produzione, utilizziamo Gunicorn (Green Unicorn), un server HTTP WSGI per Python. Gunicorn esegue la nostra applicazione Flask con più processi worker.
Gunicorn è gestito da systemd, che garantisce il riavvio automatico in caso di crash o riavvio del server. Questo ci fornisce alta disponibilità senza intervento manuale.
Nginx - Reverse Proxy & Load Balancer
Nginx funge da nostro reverse proxy e load balancer. Si posiziona davanti a Gunicorn e gestisce:
-
Terminazione SSL/TLS: Cifratura/decifratura HTTPS
-
Servizio file statici: CSS, JavaScript, immagini (serviti direttamente dal disco)
-
Reverse proxy: Inoltro delle richieste dinamiche a Gunicorn
-
Limitazione della frequenza: Protezione da abusi
-
Compressione richieste: Compressione Gzip per trasferimenti più veloci
Ubuntu - Sistema Operativo
Tutte le istanze EC2 eseguono Ubuntu, la nostra distribuzione Linux scelta. Preferiamo utilizzare i pacchetti Python di Ubuntu, quando disponibili, rispetto a pip.
Il flusso tipico di una richiesta è:
flowchart LR
A[Browser Client] -->|Richiesta HTTPS| B[Nginx]
B -->|Proxy a| C[Gunicorn]
C -->|WSGI| D[App Flask]
D -->|Query| E[Cache Valkey]
E -->|Miss| F[DynamoDB]
F -->|Risposta| E
E -->|Hit| G[Risposta]
G --> B
B -->|Risposta| ACloudFront - Content Delivery Network
CloudFront è la nostra CDN, che fornisce:
-
Protezione DDoS: Protezione integrata contro attacchi distribuiti
-
Origin shielding: Protegge i nostri server di origine da picchi di traffico
La nostra distribuzione CloudFront ha due origini:
-
Server backend: App Flask backend
-
S3: Bucket S3 per asset statici
Comportamenti di cache configurati:
-
/s/*- Asset statici (CSS, JS, immagini) con TTL di 24 ore -
/ds/*.pdf- Schede tecniche con TTL di 24 ore -
/api/*- Endpoint API senza caching -
/cart- Carrello con TTL di 24 ore -
/set-language- Nessuna cache (dinamico)
Livello Dati
DynamoDB - Database Primario
Utilizziamo Amazon DynamoDB come nostro database primario. DynamoDB è un database NoSQL.
Le nostre tabelle DynamoDB includono:
-
Recommendations: Raccomandazioni prodotti generate da AI
-
Product descriptions: Descrizioni prodotti in più lingue
-
Query pages: Pagine query analizzate per SEO
Utilizziamo PynamoDB, un ORM Pythonico per DynamoDB, che fornisce:
- Definizioni di modello: Classi Python per le tabelle del database
Valkey - Cache in Memoria
Valkey (un fork di Redis) è il nostro livello di cache in memoria, che fornisce:
-
Storage sessioni: Sessioni utente con scadenza scorrevole di 30 giorni
-
Dati ad accesso frequente: Conteggi prodotti, query popolari
-
Cache autocomplete: Suggerimenti di ricerca
-
Manifesto immagini: Posizioni delle immagini prodotto
Valkey offre significativi vantaggi prestazionali:
-
100 volte più veloce di DynamoDB per le operazioni di lettura
-
Carico database ridotto: Gli hit di cache evitano query a DynamoDB
-
Persistenza sessioni: Sessioni basate su Valkey tra le richieste
Utilizziamo Valkey per:
-
Sessioni: Stato di login utente, dati del carrello
-
Caching: Query popolari, suggerimenti autocomplete
-
Contatori: Conteggi stock prodotti (in cache per performance)
-
Code: Elaborazione lavori in background
S3 - Object Storage
Amazon S3 è il nostro servizio di object storage.
Utilizziamo S3 per:
-
Immagini prodotto: Foto prodotto ad alta risoluzione
-
Schede tecniche: Specifiche prodotto in PDF
-
Asset statici: CSS, JS, immagini
DNS & Routing
Route53 - Gestione Dominio
Route53 gestisce la nostra DNS:
- Registrazione dominio: thinvent.in e domini correlati
Routing Nginx
Nginx instrada le richieste in base ai pattern URL:
-
/→ App Flask (home, prodotti, carrello, checkout) -
/q/→ App Flask (pagine query, risultati ricerca) -
/api/→ App Flask (endpoint API) -
/static/→ CloudFront/S3 (asset statici)
Infrastruttura di Ricerca & AI
Servizio di Ricerca
Eseguiamo un'applicazione Flask standalone per la funzionalità di ricerca. Questo servizio fornisce:
-
Ricerca vettoriale: Similarità semantica per query correlate
-
Autocomplete: Suggerimenti di ricerca basati su prefisso
-
Query popolari: Termini più cercati
-
Estrazione filtri: Analisi delle query di ricerca per facet
Il servizio di ricerca utilizza:
-
Valkey RediSearch: Ricerca per similarità vettoriale
-
SentenceTransformer: Generazione di embedding
-
Mappature frasi: Estrazione filtri tramite corrispondenza sottostringa
Provider AI
Utilizziamo più provider AI per diversi compiti:
DeepSeek
-
Modello: deepseek-chat
-
Casi d'uso: Descrizioni prodotto, contenuto pagine query, traduzione
-
API: API DeepSeek con fallback Together.ai
-
Caching: Prompt di sistema per efficienza nella cache dei prompt
Gemini
-
Modello: Gemini (modello specifico)
-
Casi d'uso: Generazione contenuti
-
Integrazione: Chiamate API dirette
Amazon Bedrock
-
Modelli: Nova Pro
-
Casi d'uso: Chat interna
-
Integrazione: SDK boto3
Amazon Bedrock
-
Modelli: Nova Lite
-
Casi d'uso: Chatbot clienti
-
Integrazione: SDK boto3
Flusso Completo di una Richiesta
Ecco come una tipica richiesta fluisce attraverso la nostra infrastruttura:
flowchart TD
A[Browser Client] -->|Query DNS| B[Route53]
B -->|Indirizzo IP| C[CloudFront]
C -->|Controllo Cache| D{Cache Hit?}
D -->|Sì| E[Ritorna Contenuto in Cache]
D -->|No| F[Nginx]
F -->|Proxy| G[Gunicorn]
G -->|WSGI| H[App Flask]
H -->|Controllo Cache| I[Valkey]
I -->|Hit| J[Ritorna Dati in Cache]
I -->|Miss| K[DynamoDB]
K -->|Query| L[Ritorna Dati]
L --> I
J --> M[Costruisci Risposta]
E --> M
M --> N[Invia al Client]Monitoraggio & Integrità
UptimeRobot - Monitoraggio Esterno
Utilizziamo UptimeRobot per il monitoraggio esterno di tutti gli endpoint pubblici:
-
Backend server: Sito web backend
-
www.thinvent.in: Sito web pubblico
Health Check
-
Gunicorn: systemd gestisce i riavvii
-
Flask: Endpoint
/healthrestituisce lo stato -
Valkey: Monitorata la salute della connessione
-
DynamoDB: Monitorati latenza e throughput
Logging
-
Log applicazione: Gunicorn error.log
-
Log accessi: Gunicorn access.log
-
Email: Notifiche in tempo reale per eventi critici con traceback Python
Riepilogo
La nostra infrastruttura è progettata per:
-
Performance: Multipli livelli di cache, CDN, query ottimizzate
-
Scalabilità: Database auto-scalabili, bilanciamento del carico
-
Convenienza: Pagamento in base all'uso, caching per ridurre il carico sul database
La combinazione di Flask, Gunicorn, Nginx, Ubuntu, DynamoDB, Valkey, CloudFront e UptimeRobot fornisce una base robusta e scalabile per la nostra piattaforma e-commerce.
Articoli Correlati
-
Architettura Analitica - Scopri il nostro approccio ibrido all'analisi
-
Pipeline SEO - Comprendi come le query di ricerca diventano pagine prodotto
-
Architettura del Servizio di Ricerca - Approfondisci la nostra infrastruttura di ricerca
-
Strategia di Caching - Esplora il caching a tutti i livelli
-
Architettura di Deployment - Vedi come il sistema è distribuito
-
Considerazioni sulla Sicurezza - Rivedi le misure di sicurezza