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| A

CloudFront - 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 /health restituisce 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