Guida pratica ai load balancer per i servizi di hosting

Guida pratica ai load balancer per i servizi di hosting

I load balancer o “bilanciatori di carico” sono un oggetto mitologico per la maggiorparte dei servizi di hosting: di fatto, quasi tutte le soluzioni più professionali ne fanno uso, e molti rivendono e mettono a disposizione il servizio anche ai clienti finali. Essi sono in grado di velocizzare il caricamento delle pagine web, e rendere l’esperienza dell’utente finale gradevole e più concreta, senza attese inutili, e con tempi di risposta più veloci delle classiche architetture client-server – che sono quelle in cui uno smartphone o computer client si connette ad un server per la fruizione di un certo servizio o la restituzione di un risultato (pagina web, XML, JSON, …). In genere il load balancing consente di ottimizzare il carico di lavoro tra risorse di calcolo multiple, che possono essere server o PC ma anche CPU e dischi di rete. Lo scopo può essere quello di ottimizzare l’uso delle risorse, massimizzare il throughput (cccc), ridurre i tempi di risposta (ad esempio diminuire il TTFB per il server) ed evitare in generale i sovraccarichi, i quali potrebbero portare al down o all’irreperibilità del server.

I load balancer riescono a velocizzare tutto questo sfruttando anche l’open source (anche se non sempre), e coinvolgendo lo stato dell’arte in fatto di tecnologie server; uno degli esempi più virtuosi in tal senso è senza dubbio HAProxy, il load balancer di Linux (che comunque non è il solo del suo genere). Storicamente, poi, sarebbe quantomeno da segnalare pure LVS – Linux Virtual Server, un progetto di load balancer open source nato circa 20 anni, che sembrerebbe non essere più aggiornato dal 2004.

Politiche ed algoritmi di load balancing

L’incarico di distribuzione del carico di lavoro (cioè delle richieste che arrivano ad un singolo server) può avvenire secondo diversi tipi di politiche, note nell’ambito degli algoritmi di scheduling, i quali vengono utilizzati per stabilire, volta per volta (e secondo dei “quanti” temporali, cioè degli intervalli di tempo prefissati) a chi inoltrare le richieste. Un semplice esempio di algoritmo di questo tempo è la scelta casuale: il server o il cloud che deve gestire la richiesta viene scelto, semplicemente, a caso (sembra una cosa strana, forse, ma vi garantisco che la letteratura scientifica nel settore è zeppa di algoritmi casuali e pseudo casuali: quando non esistono criteri prefissabili per la scelta, o comunque agevoli da formalizzare, si ricorre a tecnologie del genere).

Una tecnica ulteriore può essere la politica round-robin – si sceglie ciclicamente ogni cluster, ad intervalli prefissati, in sequenza fissa: ABCDE, poi ABCDE, ecc. – oppure sulla base di criteri ancora più complessi: ultimi tempi di risposta, uptime, numero di connessioni attive, posizione geografica, capacità, traffico assegnato e così via.

Modello base di load balancer per un sito web

Normalmente il client fa la richiesta di una pagina web, il server risponde e restituisce il risultato richiesto; con il modello load balancer le cose cambiano considerevolmente. Il server di load balancing è infatti il componente incaricato di implementare la politica di smistamento delle varie richieste HTTP, parallelizzandole ed alleggerendo di molto il “carico”: di fatto, esso ha il compito di gestire una molteplicità di connessioni (sono quelle in giallo, nell’immagine qui sotto), delegando poi l’assegnazione di ognuna ad un load balancer vero e proprio. Lo scopo del balancer è quello di smistare e parallelizzare le connessioni che arrivano, spesso in gran numero, sul server, avendo pure l’accortezza di restituire il risultato corretto in tempi più brevi rispetto al client-server classico, il quale a volte potrebbe invece soffrire di problemi di sovraccarico. Ovviamente il load balancing prevede una serie di complesse tecniche di riutilizzo, sincronizzazione e cache delle risorse, che di solito la maggioranza delle soluzioni software prevede di gestire mediante appositi file di configurazione.

Il load balancing può comunque  funzionare in modo trasparente per l’utente finale, soprattutto al fine ottimizzare le risorse a livello di database (MySQL, PostGreSQL, …), ma anche per gestire al meglio le richieste via DNS, i server proxy ed altri componenti. Nell’immagine che segue è riportato schematicamente un possibile meccanismo di implementazione del load-balancing, attivo probabilmente anche sui principali servizi di hosting.

Il servizio di VPS di Digital Ocean, ad esempio, prevede un load balancer integrato che si può attivare su richiesta a circa 20 € / mese, ovviamente qualora se ne avverta la necessità sulla base dell’afflusso di visite al sito.

(immagine concessa con Licenza di Attribuzione 2.0, Generica, di Bo-Yi Wu, Flickr!)

Esempi pratici di load balancer

I load balancer non sono confinati ad un singolo ambito, nel mondo reale: nel settore web e delle app su internet, gli usi più comuni sono relegati alla gestione intelligente del traffico su un servizio o sito internet, ma anche la gestione dei DNS può essere affidata a questa logica. Nei prossimi paragrafi andremo a vedere qualche esempio concreto in tal senso.

Load balancing casuale (lato client)

Questa tecnica di load-balancing funziona così:

  1. il client fa una richiesta al server (ad esempio via DNS richiede la home di un sito web);
  2. prima di rispondere, si assegna una lista di indirizzi IP al client;
  3. il client ne sceglie automaticamente uno a caso, e poi procede.

Questa politica si affida ad un presupposto non per forza realistico, cioè il fatto che ogni client richieda mediamente lo stesso carico di lavoro, ed è dimostrabile che questa politica randomica funzioni meglio, in termini di distribuzione del carico, rispetto ad esempio al round-robin (IP che vengono utilizzati a turno sequenziale). Se il client è smart può prevedere politiche intelligenti per gestire le richieste, riconnettersi durante le operazioni ed evitare sovraccarichi e rallentamenti.

Load balancing (lato server)

Si parte, in questo caso, da un server configurato e pronto all’uso, che rimane in ascolto su una porta prefissata, ad esempio la 80 per il web (o meglio ancora la 443, se la connessione prevede HTTPS); quando arriva una richiesta dal client, il server affida la stessa ad un servizio di backend, in grado di comunicare con il load balancer. Il contatto client – load balancer non può, per inciso, essere diretto, questo per ragioni di efficenza ma anche di sicurezza dell’architettura da attacchi informatici di ogni genere.

Molti load balancer prevedono un meccanismo nel caso in cui non ci siano la disponibilità di server di backend, restituendo come risposta un messaggio di errore (e questo potrebbe spiegare, ad esempio, cosa succeda quando un sito da’ messaggi di errore casuali e senza regolarità di tipo 403). Il load balancer poi, sicuramente non dovrà essere l’unico del suo genere nel network: questo perchè se smettesse di funzionare, un giorno, non funzionerebbe più l’architettura, e verrebbe meno il requisito di scalabilità.

Per questo motivo, pertanto, i load balancer sono spesso parallelizzati almeno in coppie, in modo da potersi “aiutare” a gestire i carichi di lavoro, automatizzando anche flussi di richieste molto elevati o frequenti.

Load balancing su DNS (DNS Delegation)

Molti server di DNS (Domain Name System) fanno uso del load balancing per gestire le richieste di risoluzione dei domini, proprio in virtù della distribuzione geografica delle macchine su IP diversi. La DNS delegation è un qualcosa di simile all’assegnazione di un compito all’interno di un’azienda, ovvero si coinvolgono più persone per arrivare ad un obiettivo comune (e senza fare scarica-barile, soprattutto :-) ). Nello specifico, si potrebbe assegnare, ad esempio, la richiesta DNS al server più libero o meno impegnato in quel momento.

 

Se ad esempio avessimo una configurazione DNS fatta così:

prova1.trovalost.it A 1.2.3.4
prova2.trovalost.it A 5.6.7.8
www.trovalost.it NS prova1.trovalost.it
www.trovalost.it NS prova2.trovalost.it

che cosa significa concretamente DNS delegation? In questo modo stiamo configurando due Name Server (NS) ipotetici sui sottodomini prova1 e prova2, a cui corrispondono due server identici nelle funzionalità, ma su IP diversi (ovvero 1.2.3.4 per prova1, e 5.6.7.8 per prova2). Se le richieste sul server 1.2.3.4 dovessero congestionare il DNS, pertanto, il load balancing farebbe in modo di dirottarle su 5.6.7.8, secondo politiche variabili ed in base al traffico ed al tipo di richieste che arrivano nel tempo. Possono insorgere eventuali complicazioni, eventualmente, se i due server non sono sincronizzati adeguatamente e se, ad esempio, durante la stessa sessione del client (per esempio mentre il cliente finale sta effettuando un acquisto online, o caricando prodotti in un carrello e-commerce) si è costretti a cambiare server.

Load balancer per DNS: DNS Round-Robin

La tecnica round-robin è ben nota in ambito informatico, e viene utilizzata dai bilanciatori di carico in vari contesti: distribuzione del carico, web server, server FTP, DNS.

Nella sua forma più semplice, si restituisce al client una lista di possibilità anzichè una singola risposta: è quello che abbiamo visto con la configurazione DNS qui sopra, in effetti, ma si può applicare a richieste di query SQL, pagine web e così via. Ad ogni richiesta successiva, si fa scorrere in avanti la lista, in modo che “a giro” ogni elemento della lista di risposta venga interpellato ed inviato, evitando così il sovraccarico solo su una.

Possono esistere implementazioni della tecnica round-robin più complesse ed elaborate, ma la base di funzionamento rimane questa.

A cosa servono i load balancer

In generale l’uso di questa tecnologia serve a distribuire il carico di lavoro su più host, secondo una politica intelligente (smart) e facendo in modo che l’utente abbia comunque l’impressione di visitare un servizio singolo, cioè effettuando l’operazione nella massima trasparenza e senza stravolgere la user experience finale.

Molti siti web che visitiamo abitualmente, specie se molto popolari (pensiamo a Facebook.com, per esempio) fanno uso da sempre di tecniche di load balancing, e questo garantisce anche che siano sempre veloci, che rispondano rapidamente alle richieste e che non siano troppo tempo offline, in caso di imprevisti (mettendo così in atto il requisito di high availability).

I load balancer, pertanto, rispondono a due esigenze basilari:

Tophost a 10,99
  • la scalabilità dell’architettura informatica, cioè la possibilità di far fronte a picchi improvvisi di visite, oltre alla possibilità di aggiungere ulteriori cluster di server, a seconda delle necessità, ed espandere la struttura;
  • l’affidabilità dell’architettura nel suo complesso, cioè il fatto di restituire le pagine web in modo corretto e coerente e soprattutto il fatto di garantire una maggiore reperibilità del servizio, riducendo i tempi di downtime.
Ti piace questo articolo?

1 voto

Su Trovalost.it puntiamo sulla qualità dei contenuti da quando siamo nati: la tua sincera valutazione può aiutarci a migliorare ogni giorno.

Guida pratica ai load balancer per i servizi di hosting

Votato 10 / 10, da 1 utenti