
Node.js Backend per Piattaforme AI: Lezioni da LetsAI
Quando abbiamo iniziato a costruire LetsAI avevamo bisogno di un backend che gestisse richieste AI asincrone, streaming di dati binari e centinaia di connessioni simultanee senza crollare. Node.js ci ha permesso di farlo con un team ridotto e un codebase mantenibile.

Perché Node.js e non Python per il backend
La domanda ce la siamo fatta subito. Python lo usiamo per RAG Enterprise e per tutto quello che è ML puro — ha senso lì. Ma per LetsAI il problema era diverso: serviva un server che orchestrasse chiamate a provider AI esterni, gestisse upload di file pesanti e mantenesse connessioni WebSocket aperte per lo streaming dei risultati. Node.js con il suo event loop non-bloccante era la scelta naturale. In pratica: un singolo processo Node gestisce tranquillamente 500+ connessioni simultanee mentre aspetta risposte da API esterne. Con Python avremmo dovuto tirare su asyncio, gestire il GIL e aggiungere complessità che non volevamo. Il nostro team frontend già scriveva TypeScript — avere lo stesso linguaggio su tutto lo stack ha dimezzato il tempo di onboarding dei nuovi sviluppatori.
Gestione dello streaming: dai chunk AI al browser
Il caso d'uso più critico di LetsAI è lo streaming. Quando un utente genera un video o un'immagine, non può restare 30 secondi davanti a uno spinner bianco. Deve vedere il progresso in tempo reale. Abbiamo implementato un pattern con Server-Sent Events (SSE) dove Node.js riceve i chunk dal provider AI e li inoltra immediatamente al client. Il backend fa da proxy intelligente: aggiunge metadata (percentuale di completamento, costo stimato, tempo residuo), gestisce i retry automatici se il provider perde la connessione e logga tutto per la dashboard analytics. Il vantaggio di Node qui è che i readable stream sono nativi nel linguaggio. Non abbiamo dovuto importare librerie esterne — il pattern pipe() di Node fa esattamente quello che serve. In produzione gestiamo circa 2.000 stream al giorno con latenza media sotto i 50ms.
Job queue e processi pesanti: il pattern che usiamo
Node.js è velocissimo nell'I/O ma non è fatto per calcoli CPU-intensive. Lo sappiamo. Per i task pesanti — transcoding video con FFmpeg, ridimensionamento immagini, generazione di thumbnail — usiamo BullMQ con Redis come broker. Il flusso è semplice: l'API riceve la richiesta, crea un job nella coda, restituisce un ID al client. Worker separati prendono il job, lo eseguono e aggiornano lo stato. Il client riceve aggiornamenti via SSE. Questo pattern ci ha permesso di scalare orizzontalmente senza toccare il codice. Quando il carico aumenta, aggiungiamo worker. Quando cala, li spegniamo. Il costo infrastrutturale segue il traffico reale.
Sicurezza e rate limiting in una piattaforma multi-utente
Una piattaforma come LetsAI che gestisce crediti e pagamenti deve essere blindata. Su Node.js abbiamo implementato: JWT con refresh token e rotazione automatica, rate limiting per utente con sliding window basato su Redis, validazione input con Zod su ogni endpoint, sanitizzazione di tutti i prompt prima dell'invio ai provider AI, CORS restrittivo e helmet per gli header HTTP. Il rate limiting è stato cruciale. Senza, un singolo utente poteva generare centinaia di richieste AI in pochi secondi e bruciare il budget del provider. Ora ogni piano ha limiti chiari: X richieste al minuto, Y al giorno, con feedback in tempo reale.
Lezioni imparate e quando NON usare Node
Dopo due anni di LetsAI in produzione: Node è perfetto per: orchestrazione di API esterne, real-time streaming, applicazioni I/O bound, prototyping veloce quando il team è full-stack JavaScript. Node NON va bene per: calcoli matematici pesanti (usiamo Python), training di modelli ML, task che richiedono multithreading reale. L'errore più grosso? All'inizio gestivamo il transcoding FFmpeg nel processo Node principale. Il server si bloccava ogni volta. Spostare tutto nelle job queue ha risolto il problema in un giorno. La domanda giusta non è "Node o Python?" ma "cosa deve fare il backend?". Se è orchestrazione e I/O, Node. Se è ML e calcolo, Python. Noi li usiamo entrambi.
Servizi Correlati
Scopri come applichiamo queste tecnologie nei nostri progetti enterprise.
Interessato?
Contattaci per ricevere un preventivo personalizzato.
Securvita S.r.l. — i3k.eu