Nei sistemi informatici, il load balancing è una risorsa preziosa per gestire al meglio carichi e risorse ingenti legati, in particolare al traffico dei siti web. Vediamo di cosa si tratta


Il load balancing è una pratica utile per distribuire i carichi di un server su più risorse in modo da ridurre i tempi di risposta, aumentare la produttività e migliorare l’esperienza di navigazione di ciascun utente finale.

Si riferisce a tutte le soluzioni utili a garantire che le risorse gestite siano distribuite in modo efficiente. È prezioso per chiunque si trovi a svolgere il ruolo di amministratore di sistema di un server, dovendo “bilanciare il carico” in modo da far fronte a un picco (a volte inaspettato) di visitatori in entrata. Nel 2023 si contano circa 1,13 miliardi di siti web su Internet. Sebbene la grande maggioranza è inattiva, una parte riceve ogni giorno richieste in modo più o meno intenso.

CTA risorsa replatforming

Per comprendere l’utilità del load balancing è significativo l’esempio di Starbucks: giusto l’anno scorso ha avviato l’attività di sviluppo di una tecnologia in grado di evitare che i caffè dei locali negli USA venissero sopraffatti da troppi ordini. Se da una parte l’impennata degli ordini digitali, che rappresentano quasi un quarto di tutti gli ordini, ha aiutato la catena di caffè a guadagnare quote di mercato importanti durante la pandemia, dall’altra ha messo a dura prova i baristi e la capacità fisica dei negozi più datati. Come riporta Reuters, l’azienda si è così messa a esplorare una tecnologia di “bilanciamento del carico” in grado di inviare ordini ai negozi che hanno la capacità di soddisfarli effettivamente, invece che ai negozi già presi d’assalto dai clienti che usufruiscono del servizio drive-thru (l’acquisto di prodotti direttamente in auto).

Nei siti web ad alto traffico l’esigenza di gestire picchi sensibili richiede che vengano gestiti al meglio i carichi. Si deve tenere conto che i siti web più diventano popolari più aumenta il traffico: è una buona cosa per chi lo apre, ma dall’altro lato questo incremento può rallentare l’esperienza di esplorazione. Non solo: i siti caratterizzati da un volume elevato di traffico potrebbero inavvertitamente trovarsi di fronte a frequenti aggiornamenti del server.

Qui entra in gioco il load balancing, assicurando una maggiore reattività e resilienza.

Cos’è il load balancing?

Load balancing è la pratica che distribuisce risorse su più server rendendo così l’intero processo più semplice ed efficiente, assicurando che nessun singolo server sopporti una domanda eccessiva e dividendo equamente il carico aumenta la reattività degli utenti e la disponibilità del sito web.

Definisce il processo di distribuzione del traffico di rete su più server, consentendo alle organizzazioni di scalare orizzontalmente per soddisfare carichi di lavoro a traffico elevato. Il “bilanciamento del carico” instrada le richieste dei client ai server disponibili per distribuire uniformemente il carico di lavoro e migliorare la reattività delle applicazioni, aumentando così la disponibilità del sito web.

Serverless CTA

Per decidere quale server deve gestire una richiesta, il sistema di bilanciamento del carico utilizza una varietà di algoritmi, come Round-robin, Least Connections o IP hash (che descriveremo più avanti). Essi sono progettati per migliorare le prestazioni e migliorare l’esperienza dell’utente.

Oltre a massimizzare la capacità della rete e garantire prestazioni elevate, il bilanciamento del carico provvede al failover, tecnica utile in caso di guasti di un server: se ciò accade, un sistema di bilanciamento del carico (load balancer) reindirizza immediatamente i suoi carichi di lavoro su un server di backup, mitigando così l’effetto sugli utenti finali.

Come accennato, i dispositivi che eseguono il bilanciamento del carico si chiamano load balancer. In passato, erano server fisici dedicati che risiedevano nel data center e utilizzavano componenti e sistemi operativi specializzati. Oggi possono essere software che si installano su un server generico, fisico o virtuale.

Il bilanciamento del carico trova spazio anche nel cloud. In questo caso si parla di cloud load balancing. Può essere un servizio gestito completamente distribuito e definito dal software. Non è basato su hardware, quindi non serve gestire un’infrastruttura fisica di bilanciamento del carico. Il vantaggio del cloud load balancing è dato dalla possibilità di ridurre i costi associati ai sistemi di gestione dei documenti e di massimizzare la disponibilità delle risorse.

Come funziona il bilanciamento del carico

I sistemi di load balancing gestiscono le richieste in arrivo da parte degli utenti. Si trovano tra i server che gestiscono tali richieste e Internet. Una volta ricevuta una richiesta, il sistema di bilanciamento del carico determina quale server in un pool è disponibile e online, quindi instrada la richiesta a quel server. Durante i periodi di carichi pesanti, un load balancer agisce tempestivamente e può aggiungere in maniera dinamica server in risposta ai picchi di traffico.

Ma, in pratica, come funziona il load balancing? Qui è bene considerare un sito web che registra molto traffico. Per gestire tutte le richieste in arrivo, dispone di più web server in grado di servire il contenuto del sito. Per distribuire uniformemente il traffico in entrata tra di essi viene impiegato il bilanciatore del carico, che smista il traffico instradando le richieste in entrata al server appropriato. Quando un client (come il browser web di un utente) invia una richiesta all’applicazione, la richiesta viene prima ricevuta dal sistema di load balancing. Esso utilizza un algoritmo specifico per determinare quale dei server web dovrebbe ricevere la richiesta. Tale algoritmo considera fattori quali il carico di lavoro attuale di ciascun server, la capacità del server e il tipo di richiesta inviata.

Una volta che il sistema decide quale sia il server di destinazione: inoltra la richiesta, che viene elaborata dal server web che invia poi la risposta al load balancer; inoltra poi la risposta al client. Questo processo garantisce che i server web non siano direttamente accessibili a nessuno. Il load balancer è l’unico endpoint pubblico utile ad accedere ai server Web e per proteggere la propria infrastruttura.

Tipologie e algoritmi di load balancing

Esistono diversi algoritmi di bilanciamento del carico offrono vantaggi diversi. Sono suddivisi in due tipi principali: statici e dinamici.

Algoritmi di load balancing statici

  • Round-robin

È l’algoritmo di bilanciamento del carico più semplice e più usato. Le richieste dei client vengono distribuite ai server delle applicazioni secondo una semplice rotazione. Se, per esempio, si hanno tre server delle applicazioni, la prima richiesta del client viene inviata al primo server delle applicazioni nell’elenco, la seconda al secondo, la terza al terzo server, la quarta al primo e così via.

Il bilanciamento del carico Round-robin è più appropriato per i flussi di richieste client prevedibili che vengono distribuiti in una server farm i cui membri hanno capacità di elaborazione e risorse disponibili relativamente uguali (come larghezza di banda di rete e spazio di archiviazione).

  • Round-robin ponderato

Simile alla versione “base” Round-robin, aggiunge la possibilità di distribuire le richieste dei client in entrata nella server farm in base alla capacità relativa di ciascun server. È particolarmente indicato per distribuire le richieste dei client in entrata su un insieme di server con capacità o risorse disponibili diverse.

  • IP hash

Combina gli indirizzi IP di origine e di destinazione del traffico in entrata e utilizza una funzione matematica per convertirlo in una funzione di hash in base al quale la connessione viene assegnata a un server specifico.

Algoritmi di load balancing dinamici

  • Least connection

Il bilanciamento del carico “di connessione minima” è un algoritmo di bilanciamento del carico dinamico in cui le richieste del client vengono distribuite al server delle applicazioni con il minor numero di connessioni attive nel momento in cui viene ricevuta la richiesta del client. Questo algoritmo tiene in considerazione il carico della connessione attiva. È una tecnica particolarmente appropriata per le richieste in entrata con tempi di connessione variabili e un insieme di server relativamente simili in termini di potenza di elaborazione e risorse disponibili.

  • Weighted response time

L’approccio del “tempo di risposta ponderato” calcola la media del tempo di risposta di ciascun server e lo combina con il numero di connessioni aperte di ciascun server per determinare dove inviare il traffico. Inviando il traffico ai server con il tempo di risposta più rapido, l’algoritmo garantisce un servizio più rapido per gli utenti.

  • Weighted least connection

La connessione minima ponderata offre agli amministratori la possibilità di assegnare pesi diversi a ciascun server, presupponendo che alcuni server possano gestire più connessioni di altri.

  • Resource-based

Distribuisce il carico in base alle risorse disponibili in ciascun server in quel momento. Il software specializzato (chiamato “agente”) in esecuzione su ciascun server misura la CPU e la memoria disponibili sul server e il sistema di bilanciamento del carico interroga l’agente prima di distribuire il traffico a quel server.

Vantaggi del load balancing

L’impiego del bilanciamento del carico offre diversi benefici. Innanzitutto assicura prestazioni migliori: distribuire uniformemente il traffico in entrata su più risorse permette di ottimizzare le prestazioni complessive di un sistema, potendo anche ridurre i tempi di risposta e migliorare l’esperienza dell’utente. Inoltre può garantire una maggiore disponibilità di un sistema, anche in caso di guasto di singoli server o risorse. Reindirizzando automaticamente il traffico lontano da server o risorse guasti, il bilanciamento del carico può aiutare a mantenere un sistema funzionante senza problemi.

In termini di sicurezza, il bilanciamento del carico può fornire funzionalità come crittografia, autenticazione e controllo degli accessi, che possono aiutare a proteggere i sistemi e i dati.

A questi vantaggi si aggiunge anche la scalabilità: il load balancing consente ai team di scalare i propri sistemi orizzontalmente, aggiungendo più server o risorse al bilanciatore del carico. Ciò può aiutare a garantire che un sistema sia in grado di gestire l’aumento del traffico o dei carichi di lavoro e possa supportare la crescita e l’espansione.

Distribuendo il traffico in modo uniforme su più risorse, il bilanciamento del carico può contribuire a garantire un migliore utilizzo delle risorse. Ciò può ridurre gli sprechi e incrementare l’efficienza complessiva di un sistema.

Si aggiungano anche i tempi di inattività ridotti e un’esperienza utente migliorata. Inoltre, il load balancing può aiutare a rendere un sistema più resiliente ai guasti e ad altri problemi, reindirizzando automaticamente il traffico lontano da server o risorse guasti.

Per le sue caratteristiche, il load balancing è particolarmente adatto ai microservizi.

Architettura dell’hardware e software load balancing

Sia i load balancer hardware che quelli software hanno casi d’uso specifici. Un sistema di load balancing hardware è un dispositivo fisico con un sistema operativo specializzato che distribuisce il traffico delle applicazioni web su un cluster di server delle applicazioni. Per garantire prestazioni ottimali, il sistema di bilanciamento del carico hardware distribuisce il traffico secondo regole personalizzate in modo che i server delle applicazioni non vengano sovraccaricati.

La differenza più evidente tra i bilanciatori di carico hardware e quelli software è che i bilanciatori di carico hardware richiedono apparecchiature hardware proprietarie rack-and-stack, mentre i bilanciatori di carico software vengono semplicemente installati su server x86 standard o macchine virtuali. Un’altra differenza fondamentale tra i bilanciatori di carico hardware e software risiede nella scalabilità. Se i volumi di traffico superano inaspettatamente la capacità, le esperienze degli utenti finali subiscono un impatto significativo. A questo proposito, i bilanciatori del carico software sono in grado di scalare in modo elastico per soddisfare la domanda.

Serverless CTA