Scroll Top
Via Antonio Amato, 20/22 84131 Salerno (SA)

Il Load Balancer nelle moderne architetture software enterprise

load_balancer_architetture_software

(articolo redatto da Vito Carrozza)

Il load balancer, un componente essenziale nell’architettura software moderna, svolge un ruolo cruciale nel garantire l’affidabilità, la scalabilità e le prestazioni ottimali dei servizi online.

In questo articolo, esploreremo approfonditamente il concetto di load balancer, analizzando le sue varie versioni e le loro caratteristiche. Inoltre, daremo uno sguardo sommario ai servizi che i principali cloud provider (come AWS, Google Cloud e Azure) forniscono in termini di bilanciamento del traffico, esaminandone le loro funzionalità principali.

Introduzione al Load Balancer

Si consideri un’architettura software enterprise multi-server. Si immagini, poi, una macchina client che voglia accedere a una particolare funzionalità erogata dall’applicazione (esempi di questo tipo sono, ad esempio, lo scarico di una busta paga dal portale aziendale di una grossa multinazionale oppure l’emissione dei bonifici per i pagamenti dei salari dei dipendenti di una holding).

Se la macchina client deve riferirsi a un server per ottenere l’erogazione del servizio, dovrà conoscere i dettagli di tale server (informazioni come indirizzo IP, numero di istanza, stato di carico ecc…) e ciò provoca un forte accoppiamento fra i due attori; inoltre può accedere che il server al quale ci si vuole riferire per la specifica richiesta non sia raggiungibile o sia sovraccarico.

Il load balancer è un dispositivo hardware o un software che distribuisce il traffico di rete in modo equo ed efficiente tra questi server o risorse di rete. La sua funzione principale è quella di evitare blocchi e sovraccarichi bilanciando il numero di richieste, migliorando le prestazioni complessive del sistema e garantendo la ridondanza in caso di guasto di uno server dell’architettura stessa.
load balancer nelle connessioni client-server
Figura 1 - Ruolo del load balancer nelle connessioni client-server

Quando il client vuole riferirsi ad un server dell’architettura, avanza una richiesta verso il load balancer, il quale attraverso algoritmi intelligenti di routing del traffico, indirizza la richiesta ai server disponibili, riducendo il rischio di sovraccarico/guasti e garantendo un’esperienza utente più fruibile e fluida.

Parametri di affidabilità

Stando alla definizione, quando il client effettua una chiamata all’applicativo, il load balancer raccoglie tale richiesta e la smista verso uno dei server disponibili.

Sotto questa prerogativa, quindi, l’applicativo appare al client come un’architettura single server. A causa di ciò, quindi, il load balancer rappresenta per l’utente un livello di astrazione che aggiunge valore in termini di affidabilità all’intero ecosistema architetturale. Tale valore, come viene spiegato nell’articolo sui 3 elementi essenziali per il successo di un’architettura software, viene misurato in termini di.

  • Performance: data l’astrazione offerta dal load balancer, l’applicazione appare all’utente come composta da un unico super-server che presenta un throughput aumentato rispetto ad una singola istanza. Tuttavia, il load balancer introduce comunque un minimo di latenza dovuta ai tempi di processamento e smistamento della richiesta dell’utente, ma tale tempo è comunque considerato trascurabile se paragonato ai benefici che il load balancer offre;
  • Scalabilità: il load balancer nasconde le problematiche relative all’aggiunta e/o alla rimozione di istanze dall’architettura. Scalare il numero di server diviene totalmente trasparente;
  • High availability: il load balancer è in grado di monitorare lo stato delle istanze dell’ecosistema architetturale. In questo modo, esso smista le richieste solo verso i server funzionanti garantendo, di fatto, la fruizione continua dei servizi.

Tipologie di Load Balancer

Il load balancer può operare a diversi livelli del modello ISO-OSI. In base al layer in cui esso opera, è possibile dare una nomenclatura al load balancer utilizzato.

1. Network Load Balancer (NLB): il Network Load Balancer opera a livello di rete (livello 3 del modello ISO-OSI) e distribuisce il traffico in base agli indirizzi IP di destinazione. Utilizza algoritmi di bilanciamento del carico come round-robin o weighted round-robin per indirizzare le richieste ai server di destinazione. NLB è particolarmente adatto per applicazioni dove le risorse sono identificate da indirizzi IP e che richiedono prestazioni elevate e bassa latenza.
Quando le risorse sono identificate da nomi e il NLB fa uso del protocollo DNS per la risoluzione di questi nomi, allora gli viene attribuito il nome di DNS Load Balancer. Quando a questo tipo di load balancer gli viene avanzata una query, la risposta restituita è una lista di indirizzi di server che possono erogare una data funzionalità. Su questa lista viene applicato uno degli algoritmi di bilanciamento del carico citati prima.
Il NLB è semplice e gratuito, ma non offre affatto sistemi di monitoraggio dei server. Inoltre, si è vincolati all’utilizzo di un algoritmo round robin per lo smistamento delle richieste.

2. Hardware e software load balancers: questi tipi di load balancers sono stati progettati con l’intento di aggiungere gradi di libertà aggiuntivi ai bilanciatori di carico.
Da un punto di vista tecnico, gli hardware load balancers sono dei dispositivi fisici dedicati (e che quindi lavorano ai livelli 1 e 2 del modello ISO-OSI) preposti a bilanciare grosse quantità di richieste in un tempo ragionevolmente piccolo. La peculiarità di questi sistemi è che essi permettono l’esecuzione di algoritmi di sicurezza in maniera estremamente veloce in quanto essi sono implementati a livello hardware e permettono l’utilizzo di algoritmi di bilanciamento arbitrario come, ad esempio, l’algoritmo Least Response Time.
I software load balancers, invece, a differenza degli hardware load balancer, sono programmi eseguiti su server standard. Possono essere implementati su macchine virtuali, container o server fisici preesistenti e quindi integrati con architetture pregresse. Questi bilanciatori del carico, essendo realizzati completamente in software, sono progettati con un livello di modularità elevato in modo tale da poter aggiungere/rimuovere funzionalità in base alle esigenze. Lavorano dai livelli 5 a 7 della pila ISO-OSI e a causa di questa particolarità, essi sono solitamente nominati in letteratura come i bilanciatori di carico più versatili.
Hardware e software load balancers hanno due peculiarità comuni:

  • permettono l’aggiunta di moduli per il monitoraggio dello stato delle istanze dell’architettura: a dispetto del DNS Load balancer, i quali non avendo funzionalità di monitoraggio continuano a restituire anche gli indirizzi dei server non disponibili, ai software/hardware load balancer è possibile agganciare un modulo che periodicamente interroga i server e fa in modo da scartare dalla risposta gli indirizzi di quelli non disponibili;
Monitoraggio delle istanze dell'architettura
Figura 2 - Monitoraggio delle istanze dell'architettura
  • Utilizzo interno: data la versatilità dei software e hardware load balancers, è possibile sfruttarne le potenzialità anche per organizzare un’architettura software layerizzata. Ad esempio, è possibile sfruttare un load balancer per separare (e quindi deployare) in maniera indipendente il front-end e il back-end di un particolare applicativo
layerizzazione mediante load balancers
Figura 3 - Esempio di layerizzazione mediante load balancers

3. Load Balancer Router: Questa categoria include dispositivi che combinano le funzionalità di routing e load balancing. Gestiscono il traffico in base a criteri come il carico di lavoro del server, la disponibilità e la geolocalizzazione. Questi dispositivi possono operare a livelli più alti del modello OSI, ad esempio il livello di applicazione (livello 7), consentendo una maggiore flessibilità nella gestione del traffico. Nello specifico un load balancer router combina le funzionalità di instradamento del traffico di un router con quelle di bilanciamento del carico. Questa integrazione consente di semplificare l’architettura di rete, riducendo il numero di dispositivi necessari e semplificando la gestione complessiva.

Load Balancer nei maggiori servizi cloud

  1. Amazon Web Services (AWS): Amazon AWS offre diversi servizi di load balancing. Il più utilizzato tra essi è Elastic Load Balancing (ELB). L’Elastic Load Balancer, è un servizio completamente gestito che distribuisce il traffico su più istanze EC2 (Elastic Compute Cloud, un servizio Web che fornisce una capacità di elaborazione sicura e scalabile nel cloud) o altri servizi AWS.
    Ne esistono tre tipologie: Classic Load Balancer (CLB), Application Load Balancer (ALB) e Network Load Balancer (NLB). ELB è completamente integrato con altri servizi AWS, come Auto Scaling e AWS Certificate Manager, consentendo alle applicazioni di adattarsi dinamicamente al traffico in entrata e garantendo la sicurezza delle comunicazioni tramite HTTPS.
  2. Google Cloud Platform (GCP): GCP fornisce un servizio di Load Balancing che distribuisce il traffico a livello di istanze di macchine virtuali, di gruppi di istanze e di risorse di rete. Il Load Balancer di GCP supporta il bilanciamento del carico basato su regole di routing e può essere configurato per gestire diverse tipologie di smistamento del traffico, tra cui HTTP/HTTPS, TCP e UDP. Inoltre, offre funzionalità avanzate come il bilanciamento a livello globale (Global Load Balancing) e il bilanciamento a livello di rete (Network Load Balancing). Nel primo caso, viene sfruttata direttamente l’infrastruttura globale di Google per effettuare il routing e il banancing del traffico, mentre nel secondo caso vengono create delle meta-reti virtuali all’interno di una particolare regione geografica entro la quale viene bilanciato il traffico in maniera efficiente.
  3. Microsoft Azure: Azure offre il servizio di Azure Load Balancer, che distribuisce il traffico tra le macchine virtuali all’interno di una rete virtuale. Può essere configurato per il bilanciamento del carico interno ed esterno e supporta diversi protocolli, tra cui TCP, UDP e HTTP/HTTPS. Azure Load Balancer offre anche integrazioni con altri servizi Azure, come Azure Traffic Manager e Azure Application Gateway.

Conclusioni

In conclusione, il load balancer rappresenta un pilastro fondamentale dell’architettura delle reti moderne, consentendo alle organizzazioni di garantire prestazioni elevate, scalabilità e affidabilità dei loro servizi online. Con l’aumento dell’adozione delle tecnologie cloud, il ruolo del load balancer diventa ancora più critico, fornendo un’infrastruttura pay-per-use flessibile e affidabile per le applicazioni distribuite su scala globale. Grazie alle sue varie incarnazioni e alle sue funzionalità avanzate, il load balancer rimane uno strumento indispensabile per le organizzazioni che cercano di soddisfare le esigenze sempre crescenti dei loro utenti e clienti.


Se anche tu vuoi far parte del team di sviluppo Nexsoft,
dai un’occhiata alle nostre opportunità di lavoro e conosciamoci subito!

Questo sito utilizza cookies propri e si riserva di utilizzare anche cookie di terze parti per garantire la funzionalità del sito e per tenere conto delle scelte di navigazione.
Per maggiori dettagli e sapere come negare il consenso a tutti o ad alcuni cookie è possibile consultare la Cookie Policy.

USO DEI COOKIE

Se abiliti i cookie nella tabella sottostante, ci autorizzi a memorizzare i tuoi comportamenti di utilizzo sul nostro sito web. Questo ci consente di migliorare il nostro sito web e di personalizzare le pubblicità. Se non abiliti i cookie, noi utilizzeremo solo cookies di sessione per migliorare la facilità di utilizzo.

Cookie tecnicinon richiedono il consenso, perciò vengono installati automaticamente a seguito dell’accesso al Sito.

Cookie di statisticaVengono utilizzati da terze parti, anche in forma disaggregata, per la gestione di statistiche

Cookie di social networkVengono utilizzati per la condivisione di contenuti sui social network.

Cookie di profilazione pubblicitariaVengono utilizzati per erogare pubblicità basata sugli interessi manifestati attraverso la navigazione in internet.

AltriCookie di terze parti da altri servizi di terze parti che non sono cookie di statistica, social media o pubblicitari.