Programmazione · Server · Reti
Cos’è un load balancer?
Un singolo server ha i suoi limiti. Quando il traffico supera ciò che una sola macchina può servire — o quando semplicemente non puoi permetterti che il sito vada giù se quella macchina si guasta — ne metti in esecuzione più copie e poni un load balancer davanti a esse. Questa guida spiega cos’è un load balancer, come decide dove va ogni richiesta e in che modo si lega al reverse proxy che forse già conosci.
L’idea di fondo: condividere il lavoro
Un load balancer è un componente che riceve le richieste in arrivo e le distribuisce su un pool di server backend — di solito copie identiche della stessa app. Per il visitatore c’è un solo indirizzo; dietro, il load balancer ripartisce il traffico in silenzio così che nessun server sia sovraccarico. Risolve due problemi insieme: la scalabilità (gestire più traffico di quanto potrebbe una sola macchina) e la disponibilità (se un server muore, gli altri continuano a servire).
Questo secondo punto è quello che si sottovaluta. Un load balancer verifica di continuo se ogni backend è in salute e smette di inviare traffico a quelli che smettono di rispondere. Un singolo server difettoso non manda più giù tutto il sito: la sua quota di richieste viene semplicemente reindirizzata verso quelli sani.
Come decide: gli algoritmi di bilanciamento
Il load balancer ha bisogno di una regola per scegliere quale server gestisce la richiesta successiva. I più comuni sono:
- Round-robin — affidare ogni nuova richiesta al server successivo, a turno. Semplice ed equo quando i server sono simili.
- Least connections (meno connessioni) — inviare la richiesta al server che ha al momento meno connessioni attive. Meglio quando le richieste variano nel costo.
- IP hash — scegliere il server in base all’IP del client, così che lo stesso visitatore atterri sempre sullo stesso backend (utile per la persistenza di sessione).
- Pesato (weighted) — dare ai server più potenti una quota maggiore di traffico.
Layer 4 vs Layer 7
I load balancer lavorano su uno di due livelli. Un balancer di Layer 4 (trasporto) instrada per indirizzo IP e porta senza guardare dentro al traffico — veloce e indipendente dal protocollo. Un balancer di Layer 7 (applicazione) capisce HTTP, quindi può instradare per percorso URL, hostname o header, terminare il TLS e prendere decisioni più intelligenti. Il Layer 7 è la scelta comune per le app web; il Layer 4 vince quando la velocità pura conta più di un instradamento consapevole del contenuto.
Load balancer vs reverse proxy
È la domanda che manda in confusione. La risposta onesta: il bilanciamento del carico è uno dei compiti che un reverse proxy può svolgere. Un reverse proxy è l’idea più ampia — un server che sta davanti ai tuoi backend e può instradare, mettere in cache, terminare il TLS e distribuire il carico. Un «load balancer» è quella stessa porta d’ingresso concentrata sul compito di distribuzione. In pratica gli strumenti si sovrappongono: Nginx, HAProxy e Caddy fungono tutti da load balancer, e un load balancer cloud è una versione gestita dello stesso ruolo.
Dove girano i load balancer
Li incontri in alcune forme. I load balancer software — Nginx, HAProxy, Traefik — girano su un server che controlli tu. I load balancer cloud (AWS, Google Cloud, Azure) sono servizi gestiti che configuri anziché ospitare. E nelle piattaforme a container come Kubernetes, il bilanciamento del carico è integrato e distribuisce il traffico tra i pod man mano che compaiono e scompaiono. Qualunque cosa usi, vorrai più di un backend — di solito qualche server che esegue copie identiche dell’app.
In sintesi
Un load balancer distribuisce le richieste in arrivo tra più server così che il sistema possa gestire più traffico e sopravvivere al guasto di un server. Sceglie un backend tramite un algoritmo come round-robin o least connections, verifica la salute di ogni server e può lavorare a livello di trasporto (L4) o di applicazione (L7). Pensalo come il compito di distribuzione di un reverse proxy — il pezzo che trasforma un’app su una sola macchina in un servizio che scala e resta online.