Cos’è il bilanciamento del carico?

Introduzione

Il bilanciamento del carico è un componente chiave delle infrastrutture altamente disponibili comunemente utilizzate per migliorare le prestazioni e la affidabilità dei siti web, delle applicazioni, dei database e di altri servizi distribuendo il carico di lavoro su più server.

A web infrastructure with no load balancing might look something like the following:

In questo esempio, l’utente si connette direttamente al server web, a yourdomain.com. Se questo singolo server web va giù, l’utente non sarà più in grado di accedere al sito web. Inoltre, se molti utenti cercano di accedere al server contemporaneamente e non è in grado di gestire il carico, potrebbero riscontrare tempi di caricamento lenti o potrebbero non riuscire a connettersi affatto.

Questo singolo punto di fallimento può essere mitigato introducendo un bilanciatore di carico e almeno un server web aggiuntivo sul backend. Tipicamente, tutti i server sul backend forniranno contenuti identici in modo che gli utenti ricevano contenuti consistenti indipendentemente da quale server risponda.

Nell’esempio illustrato sopra, l’utente accede al bilanciatore di carico, che inoltra la richiesta dell’utente a un server sul backend, che quindi risponde direttamente alla richiesta dell’utente. In questo scenario, il singolo punto di fallimento è ora il bilanciatore di carico stesso. Questo può essere mitigato introducendo un secondo bilanciatore di carico, ma prima di discutere di ciò, esploriamo come funzionano i bilanciatori di carico.

Quali tipi di traffico possono gestire i bilanciatori di carico?

I gestori dei bilanciatori di carico creano regole di inoltro per quattro principali tipi di traffico:

  • HTTP — Il bilanciamento HTTP standard indirizza le richieste in base ai meccanismi HTTP standard. Il Bilanciatore di Carico imposta gli header X-Forwarded-For, X-Forwarded-Proto e X-Forwarded-Port per fornire alle backend informazioni sulla richiesta originale.
  • HTTPS — Il bilanciamento HTTPS funziona allo stesso modo del bilanciamento HTTP, con l’aggiunta della crittografia. La crittografia è gestita in uno dei due modi: o con il trasporto SSL che mantiene la crittografia fino al backend o con la terminazione SSL che pone il carico di decrittazione sul bilanciatore di carico ma invia il traffico non crittografato al backend.
  • TCP — Per le applicazioni che non utilizzano HTTP o HTTPS, il traffico TCP può essere bilanciato. Ad esempio, il traffico verso un cluster di database potrebbe essere distribuito su tutti i server.
  • UDP — Più recentemente, alcuni bilanciatori di carico hanno aggiunto il supporto per il bilanciamento di protocolli internet core come DNS e syslogd che utilizzano UDP.

Queste regole di inoltro definiranno il protocollo e la porta sul bilanciatore di carico stesso e li mappano al protocollo e alla porta che il bilanciatore di carico utilizzerà per instradare il traffico sul backend.

Come sceglie il bilanciatore di carico il server backend?

I bilanciatori di carico scelgono a quale server inoltrare una richiesta basandosi su una combinazione di due fattori. Prima assicurano che qualsiasi server possano scegliere stia effettivamente rispondendo in modo appropriato alle richieste e quindi utilizzano una regola preconfigurata per selezionare tra quel pool sano.

Controlli sulla salute

I bilanciatori di carico dovrebbero inoltrare il traffico solo ai server backend “sani”. Per monitorare la salute di un server backend, i controlli di salute tentano regolarmente di connettersi ai server backend utilizzando il protocollo e la porta definiti dalle regole di inoltro per garantire che i server siano in ascolto. Se un server non supera un controllo di salute e quindi non è in grado di gestire le richieste, viene automaticamente rimosso dal pool e il traffico non verrà inoltrato ad esso fino a quando non risponderà nuovamente ai controlli di salute.

Algoritmi di bilanciamento del carico

L’algoritmo di bilanciamento del carico utilizzato determina quale dei server sani sul backend verrà selezionato. Alcuni degli algoritmi comunemente utilizzati sono:

Round Robin — Round Robin significa che i server verranno selezionati sequenzialmente. Il bilanciatore di carico selezionerà il primo server nella sua lista per la prima richiesta, quindi passerà alla lista in ordine, ricominciando dall’inizio quando raggiunge la fine.

Connessioni Minime — Connessioni Minime significa che il bilanciatore di carico selezionerà il server con il minor numero di connessioni ed è consigliato quando il traffico comporta sessioni più lunghe.

Origine — Con l’algoritmo di Origine, il bilanciatore di carico selezionerà quale server utilizzare in base a un hash dell’indirizzo IP di origine della richiesta, come l’indirizzo IP del visitatore. Questo metodo garantisce che un utente specifico si colleghi sempre allo stesso server.

Gli algoritmi disponibili agli amministratori variano a seconda della tecnologia specifica di bilanciamento del carico in uso.

Come gestiscono i bilanciatori di carico lo stato?

Alcune applicazioni richiedono che un utente continui a connettersi allo stesso server di backend. Un algoritmo di Origine crea un’affinità basata sulle informazioni sull’IP del client. Un altro modo per ottenere questo livello di applicazione web è attraverso sessioni appiccicose, dove il bilanciatore di carico imposta un cookie e tutte le richieste da quella sessione sono indirizzate allo stesso server fisico.

Bilanciatori di carico ridondanti

Per eliminare il bilanciatore di carico come singolo punto di errore, un secondo bilanciatore di carico può essere collegato al primo per formare un cluster, dove ciascuno monitora la salute degli altri. Ciascuno è ugualmente capace di rilevare il guasto e riprendersi.

Nel caso in cui il bilanciatore di carico principale fallisca, il DNS deve indirizzare gli utenti al secondo bilanciatore di carico. Poiché i cambiamenti DNS possono richiedere un considerevole periodo di tempo per essere propagati su Internet e per rendere questo passaggio automatico, molti amministratori utilizzeranno sistemi che consentono la riconfigurazione flessibile degli indirizzi IP, come IP riservati. La riconfigurazione degli indirizzi IP su richiesta elimina i problemi di propagazione e caching intrinseci ai cambiamenti DNS fornendo un indirizzo IP statico che può essere facilmente riconfigurato quando necessario. Il nome di dominio può rimanere associato allo stesso indirizzo IP, mentre l’indirizzo IP stesso viene spostato tra i server.

Ecco come potrebbe apparire un’infrastruttura altamente disponibile utilizzando gli IP riservati:

Conclusione

In questo articolo abbiamo dato una panoramica dei concetti dei bilanciatori di carico e del loro funzionamento in generale. Per saperne di più sulle tecnologie di bilanciamento del carico specifiche, potresti voler dare un’occhiata a:

Servizio di bilanciamento del carico di DigitalOcean

HAProxy

Nginx

Source:
https://www.digitalocean.com/community/tutorials/what-is-load-balancing