Sommario[Nascondere][Spettacolo]
La disponibilità delle applicazioni non è mai stata presa così sul serio come lo è oggi quando utilizziamo le app per qualcosa di più della semplice comunicazione, personale o professionale e quando le app sono il business.
Le applicazioni che non sono costantemente online, o sono instabili, perdono utenti e rilevanza, diventando alla fine obsolete. È successo in un lampo. Poiché Internet non dorme mai e funziona 24 ore al giorno, 7 giorni alla settimana, la stessa idea deve valere per le app.
La scalabilità è fondamentale per fare questo e garantire la disponibilità delle applicazioni. Il bilanciamento del carico è uno dei componenti più importanti per garantire la disponibilità. Molte persone credono ancora che il bilanciamento del carico possa essere realizzato con un semplice script.
Tuttavia, questo non è il caso. Da solo fornisce l'accesso ai programmi in tutto il mondo, in qualsiasi momento e da qualsiasi dispositivo.
In questo post, daremo uno sguardo approfondito al bilanciamento del carico, ai suoi algoritmi e al modo in cui si relaziona ai microservizi, tra le altre cose. Cominciamo!
Che cos'è il bilanciamento del carico?
Con l'aumento della domanda di un sito Web o di un'applicazione aziendale, presto un singolo server non sarà in grado di gestire l'intero carico. Le organizzazioni distribuiscono il carico di lavoro su numerosi server per soddisfare la domanda. Questo metodo, noto come "bilanciamento del carico", evita che un singolo server venga sovraccaricato, il che può causarne il rallentamento, l'eliminazione delle richieste o persino l'arresto anomalo.
Il bilanciamento del carico distribuisce equamente il traffico di rete per evitare guasti dovuti al sovraccarico delle risorse. Applicazioni, siti Web, database e altre risorse del computer funzionano meglio e sono più disponibili utilizzando questo metodo. Aiuta anche nell'elaborazione corretta e tempestiva delle richieste degli utenti.
Dal punto di vista dell'utente, il bilanciamento del carico funge da intermediario invisibile tra un client e una raccolta di server, assicurando che le richieste di connessione non vengano eliminate. Applicazioni, siti Web, database e servizi online molto probabilmente crolleranno se la domanda diventasse eccessiva senza il bilanciamento del carico.
Centinaia di migliaia di richieste degli utenti possono essere inviate contemporaneamente a un singolo sito Web ad alto traffico. Sono necessari più server per popolare correttamente le pagine Web con il contenuto richiesto, come testo, immagini, video e streaming audio. Il bilanciamento del carico è comunemente impiegato nelle server farm di siti Web ad alto traffico, nonché nei server DNS, nei database e nei siti FTP (File Transfer Protocol).
Se un singolo server è sovraccaricato, questo potrebbe funzionare male o addirittura bloccarsi. I sistemi di bilanciamento del carico riducono la possibilità di tempi di inattività distribuendo le richieste degli utenti in modo uniforme tra una raccolta di server. Se uno dei server del gruppo si guasta, il traffico viene reindirizzato ad altri server del gruppo. Un servizio di bilanciamento del carico aggiunge automaticamente nuovi server nel processo di distribuzione del traffico quando vengono aggiunti al pool di server.
Come funziona il bilanciamento del carico?
Funziona come segue:
- Quando un client riceve una richiesta, ad esempio tramite un browser o un'applicazione, tenta di connettersi al server.
- Quando un servizio di bilanciamento del carico riceve una richiesta, la instrada a uno dei server in un gruppo di server in base ai modelli stabiliti dall'algoritmo (o dalla farm).
- Il server riceve la richiesta di connessione e risponde al client tramite il servizio di bilanciamento del carico.
- Quando il sistema di bilanciamento del carico riceve la risposta, fa corrispondere l'indirizzo IP del client con l'indirizzo IP del server selezionato. Successivamente, la risposta viene trasmessa con il pacchetto.
- L'offload SSL è il processo di decrittografia dei dati utilizzando il protocollo di crittografia Security Socket Layer in modo che i server non debbano farlo.
- Il processo viene ripetuto fino al termine della sessione.
Metodi di bilanciamento del carico
Per selezionare quale dei server in una server farm riceve la richiesta successiva, ciascuna tecnica di bilanciamento del carico utilizza una serie di criteri. Esistono cinque approcci tipici per il bilanciamento del carico:
- Round Robin: Questo è l'approccio predefinito e funziona esattamente come sembra. Il sistema di bilanciamento del carico distribuisce le richieste a rotazione, partendo dal primo server del gruppo e procedendo fino in fondo, dove attende di essere richiamato di nuovo. Questo metodo garantisce che ogni server gestisca all'incirca lo stesso numero di connessioni.
- Round Robin ponderato: Questo approccio assegna a ciascun server un peso (o preferenza) generalmente proporzionale alla sua capacità. Più richieste riceve un server, maggiore è il peso. Ad esempio, un server con un valore di peso pari a due riceve il doppio delle richieste di un server con un valore di peso pari a uno.
- Sessione appiccicosa: questo approccio, noto anche come persistenza della sessione, connette determinati client e server per la durata di una sessione. Per stabilire il collegamento, il sistema di bilanciamento del carico utilizza un cookie o l'indirizzo IP dell'utente per identificare un attributo utente. Una volta stabilita la connessione, le richieste dell'utente vengono indirizzate allo stesso server fino al termine della sessione. Ciò ottimizza le risorse di rete migliorando al contempo l'esperienza dell'utente.
- Least Connections: questa strategia presuppone che tutte le richieste comportino un uguale carico del server. Di conseguenza, il server con il minor numero di richieste riceve la richiesta successiva.
- Hash IP: questo algoritmo genera una chiave hash univoca basata sugli indirizzi IP di origine e destinazione del client e del server. La chiave viene utilizzata per instradare la richiesta e consente di riprendere una connessione persa con lo stesso server.
Hardware vs. Software di bilanciamento del carico
Bilanciatore del carico hardware
L'hardware fisico, come un'appliance, costituisce i bilanciatori del carico hardware. Questi instradano il traffico ai server in base a fattori quali il numero di connessioni esistenti, l'utilizzo del processore e le prestazioni del server. I sistemi di bilanciamento del carico hardware dispongono di un firmware proprietario che deve essere mantenuto e aggiornato quando diventano disponibili nuove versioni e correzioni di sicurezza.
I bilanciatori del carico hardware spesso forniscono prestazioni e controllo più elevati, nonché una gamma più ampia di funzionalità come l'autenticazione Kerberos e l'accelerazione hardware SSL, ma richiedono un certo livello di esperienza di gestione e manutenzione. Poiché i bilanciatori del carico hardware sono meno flessibili e scalabili rispetto ai bilanciatori del carico software, c'è una propensione all'over-provisioning dei bilanciatori del carico hardware.
Software di bilanciamento del carico
I bilanciatori del carico software sono in genere più facili da configurare rispetto alle loro controparti hardware. Sono anche più convenienti e adattabili e funzionano bene con gli ambienti di sviluppo software. Il metodo software consente di personalizzare il servizio di bilanciamento del carico in base ai requisiti esatti del proprio ambiente. La maggiore flessibilità può venire a scapito del tempo aggiuntivo speso per configurare il sistema di bilanciamento del carico.
I bilanciatori software offrono una maggiore flessibilità per apportare modifiche e aggiornamenti rispetto a quelli hardware, che hanno un approccio più chiuso. Le macchine virtuali preconfezionate possono essere usate come software di bilanciamento del carico (VM). Le macchine virtuali ti faranno risparmiare tempo, ma potrebbero non avere tutte le funzionalità disponibili nelle loro controparti hardware.
Semplice implementazione del bilanciamento del carico
Useremo la libreria Spring Cloud per creare app che si connettono ad altre app in modo bilanciato. Durante l'elaborazione delle richieste di servizi remoti, possiamo facilmente costruire il bilanciamento del carico utilizzando la tecnica che ci piace. Considera il codice seguente come esempio. Inizieremo con un'applicazione server di base.
Il server avrà un solo endpoint HTTP e verrà utilizzato in diverse istanze. Quindi creeremo un'app client che utilizza Load Balancer per distribuire le richieste su diverse istanze del server.
server
Iniziamo con una base Stivale primaverile applicazione per il nostro server di esempio:
Per iniziare, iniettiamo una variabile personalizzabile chiamata instance_ID. Questo ci aiuta a distinguere tra numerose istanze che stanno operando. Successivamente, creiamo un singolo endpoint HTTP GET che restituisce un messaggio e un ID istanza.
L'istanza predefinita con ID 1 funzionerà sulla porta 8080. Abbiamo solo bisogno di aggiungere alcuni parametri del programma per avviare una seconda istanza:
.
Diamo ora un'occhiata al codice client. È qui che entra in gioco Load Balancer, quindi iniziamo incorporandolo nella nostra applicazione:
Successivamente, sviluppiamo un'implementazione di ServiceInstanceListSupplier. Questa è una delle interfacce più importanti in Load Balancer. Specifica come individuiamo le istanze del servizio accessibile.
Codificheremo due istanze separate del nostro server di esempio nella nostra applicazione di esempio. Funzionano sullo stesso sistema ma utilizzano porte separate:
Crea ora una classe LoadBalancerConfiguration:
Questa classe ha un solo scopo: crea un builder WebClient con bilanciamento del carico per effettuare richieste remote. La nostra annotazione utilizza un nome fittizio per il servizio.
Ciò è dovuto al fatto che molto probabilmente non conosceremo i nomi host e le porte precisi per l'esecuzione delle istanze in anticipo. Di conseguenza, utilizziamo un nome fittizio come segnaposto e il framework sostituirà le informazioni effettive quando seleziona un'istanza in esecuzione.
Quindi, creiamo una classe Configuration che verrà utilizzata per creare un'istanza della fornitura di istanze del servizio. Tieni presente che utilizziamo lo stesso alias di prima:
Ora possiamo creare l'applicazione client reale. Inviamo 10 query al server di esempio utilizzando il bean WebClient di prima:
Possiamo vedere dall'output che stiamo bilanciando il carico tra due istanze separate:
Bilanciamento del carico nei microservizi
L'architettura di microservizi è utilizzata da diverse aziende, come Netflix e Amazon, per sviluppare applicazioni aziendali come un insieme di servizi liberamente connessi. L'iperscalabilità e la distribuzione continua per applicazioni complicate sono solo due dei motivi per passare a questa architettura distribuita e poco connessa.
I team di queste aziende hanno implementato strategie Agile e DevOps per produrre app più velocemente e con un tasso di errore inferiore rispetto ai metodi tradizionali. Tuttavia, è necessario trovare un equilibrio tra la complessità dell'architettura distribuita e le richieste dell'applicazione, i requisiti di scalabilità e le limitazioni del time-to-market.
Per così tanti anni, gli Application Delivery Controller (ADC) sono stati fondamentali per soddisfare i requisiti del livello di servizio per le applicazioni aziendali ospitate on-premise o nel cloud. Un client che interagisce con un'applicazione basata su microservizi non ha bisogno di conoscere le istanze che la forniscono per far crescere il client e i microservizi in modo indipendente.
Questo è precisamente il disaccoppiamento fornito da un proxy inverso o da un bilanciamento del carico. Anche in questo caso, il bilanciamento del carico è la soluzione per garantire che i microservizi possano gestire domanda, sicurezza e disponibilità.
Quando si combina il tradizionale bilanciamento del carico nord-sud tra le app basate su client e microservizi con la distribuzione est-ovest per la scalabilità orizzontale, si ottiene una spinta sostanziale. L'obiettivo è mantenere l'ambiente sicuro e regolamentato richiesto dall'IT senza sacrificare l'agilità di sviluppo o Automazione DevOps requisiti.
Benefici
Il bilanciamento del carico offre vari vantaggi migliorando l'utilizzo delle risorse, la consegna dei dati e i tempi di risposta per i siti Web e le app ad alto traffico, nonché per i database che ricevono un gran numero di query. Il bilanciamento del carico garantisce che le richieste degli utenti vengano soddisfatte in modo rapido e corretto in scenari ad alto traffico.
Risparmiano agli utenti l'aggravamento della gestione di programmi e risorse lente. Il bilanciamento del carico aiuta anche a evitare i tempi di inattività e a semplificare la sicurezza, riducendo il rischio di perdita di produttività e guadagni per la tua azienda.
- Il bilanciamento del carico offre la flessibilità di aggiungere e rimuovere server in base alla richiesta, oltre a gestire il traffico con un'efficienza ottimale. Poiché il traffico viene deviato ad altri server durante la manutenzione, è anche possibile eseguire la manutenzione del server senza interrompere gli utenti.
- Il bilanciamento del carico fornisce la ridondanza incorporata dividendo il traffico tra una serie di server. È possibile deviare immediatamente il carico su altri server in caso di guasto, riducendo al minimo l'impatto sugli utenti.
- Se l'utilizzo di un'applicazione o di un sito Web aumenta, l'aumento del traffico potrebbe ridurne le prestazioni se non gestito in modo efficace. Con il bilanciamento del carico, puoi aggiungere un server reale o virtuale per soddisfare la domanda senza interrompere il servizio. Il sistema di bilanciamento del carico identifica i nuovi server man mano che vengono online e li incorpora senza sforzo nell'operazione. Questo metodo è preferibile alla migrazione di un sito Web da un server sovraccaricato a uno nuovo, che spesso comporta tempi di inattività.
Conclusione
Il bilanciamento del carico è un componente critico dei sistemi contemporanei a tolleranza di errore. Possiamo semplicemente costruire app che distribuiscono le richieste a più istanze del servizio utilizzando vari approcci di bilanciamento del carico. Le aziende devono supportare sistemi IT complicati per fornire applicazioni in modo sicuro.
La configurazione, la distribuzione e la manutenzione di microservizi tra domini possono essere soggette a errori, costose e dispendiose in termini di tempo. L'IT dovrebbe utilizzare le migliori pratiche e tecnologie di automazione, visibilità, analisi e orchestrazione compatibili con i propri processi agili e DevOps per semplificare la configurazione e la manutenzione di questi microservizi.
Lascia un Commento