Paolo Arcagni, Systems Engineer Manager Italy&Malta di F5 Networks, sottolinea l’importanza dei sistemi di bilanciamento di carico in ambito cloud e suggerisce le best practice per una implementazione efficiente.
La scalabilità richiede il bilanciamento del carico, ma cosa succede se non è fatto in modo efficiente?
Non è la prima volta che sentiamo dire che il cloud può essere troppo costoso e dubito che sarà l’ultima. La conferma viene anche da Alexei Rodriguez, VP of operations di Evernote, un gigante nel mondo digitale, che sul palco di Structure 2014 ha affermato:
È interessante notare come questa presa di posizione – non diversamente dal passato – venga da aziende che possiamo definire “mostri del web “, cioè, come suggerisce il nome, organizzazioni per le quali il web viene prima di tutto (e di solito è l’unico che conta) e che vantano milioni (o miliardi) di utenti. I mostri del web moderni hanno generalmente una sola applicazione di cui sono responsabili, come nel caso di Evernote, Netflix, Facebook e altri.
È improbabile che la maggior parte delle aziende si trovi davanti a una sfida di una portata simile, dove in pratica il cloud costa più di un approccio fai da te per i progetti di breve durata. Difficilmente una campagna di marketing, promozioni e offerte stagionali e altro andranno mai incontro ai livelli di consumo di Facebook o Evernote e, di conseguenza, i loro costi saranno quasi certamente inferiori nel cloud che se gestiti in casa.
Ciò non significa però che le aziende non incorrano in questo problema o non abbiano la necessità di valutare attentamente i costi a lungo termine del cloud per un’applicazione in modo che non si ripercuotano sulla capacità di renderla disponibile, soprattutto ora che l’Internet of Things sta diventando una realtà ed esercita una pressione notevole sulle connessioni di data center spesso già stracolmi.
Una delle cause che porta il cloud a costare di più è la scelta che viene effettuata rispetto al bilanciamento del carico.
Il bilanciamento del carico è il cuore di qualsiasi modello di cloud computing. Senza un load balancing di qualsiasi tipo non è possibile scalare, e la scalabilità è uno dei principali benefici del cloud, oltre ad essere uno dei principali driver della sua adozione secondo North Bridge Ventures 2014 Future of Cloud.
Il load balancing, chiaramente, distribuisce il carico su istanze multiple di un’applicazione per permettere di scalare, migliorare le prestazioni e mantenere la disponibilità. Nella maggior parte degli ambienti cloud, in cui sono disponibili servizi di bilanciamento del carico forniti dai provider, questi servizi si basano su un modello in scala, ovvero la scalabilità si basa esclusivamente sulla clonazione di nuove istanze delle applicazioni quando la domanda raggiunge una certa soglia (di solito definita dall’utente).
Ora, in genere tutti i provider offrono servizi di bilanciamento del carico con una scalabilità di questo tipo. Ciò che invece farebbe la differenza è la capacità di ottimizzare lato server (virtuale o fisico) l’utilizzo delle risorse, per sfruttare al massimo le capacità senza giungere a compromessi con altri aspetti essenziali come le prestazioni. Questo obiettivo si può raggiungere utilizzando una varietà di ottimizzazioni TCP pensate per scaricare il sovraccarico del protocollo dal server (istanza), come il TCP Multiplexing e le capacità di buffering di risposta, che consentono, ad esempio, di migliorare la portata dei server mediamente del 25%. Ovviamente se un server è in grado di processare il 25% in più delle richieste degli utenti, non sarà necessario scalare così rapidamente. In altre parole, non si dovranno sostenere costi aggiuntivi così spesso per ottenere più istanze. Un aspetto decisamente interessante!
I servizi di load balancing offerti in genere dai provider implicano l’utilizzo di algoritmi di bilanciamento del carico, da quello di base, round robin, fino ad algoritmi più sofisticati.
Anche da questo punto di vista scalare in modo efficiente può essere problematico. L’algoritmo di base infatti è agnostico rispetto alle applicazioni e al carico del server e non si preoccupa se una prima istanza selezionata ha 400 connessioni mentre una seconda ne ha solo 50, continua comunque a inviare la richiesta rispettando la fila.
E’ vero che non è automatico, un minor numero di collegamenti non significa sempre possedere l’algoritmo migliore, ma è sicuramente possibile ottenere una conoscenza maggiore del carico dell’applicazione. Ad esempio, molti algoritmi di bilanciamento promossi dalle aziende prendono in considerazione il carico rispetto a una determinata istanza applicativa – valutando i pesi o conteggiando i collegamenti. Piuttosto che distribuire semplicemente le richieste, tentano di allocarle efficacemente ed equamente in modo da massimizzare l’utilizzo delle risorse senza compromettere le prestazioni e la disponibilità.
Pertanto, l’utilizzo di servizi semplicistici di bilanciamento del carico con il supporto di algoritmi rudimentali e una visione apatica rispetto al carico dei server (istanze) porta a distribuire il carico in modo diseguale.
A qualcosa, in realtà ,questi servizi di bilanciamento del carico servono: a garantire che vengano lanciate più istanze e utilizzata una larghezza di banda maggiore, comportando necessariamente dei costi aggiuntivi.
In sintesi, il servizio di bilanciamento del carico che si sceglie di adottare influisce sul costo complessivo del cloud. Certo, non rappresenta il primo e nemmeno l’unico aspetto alla base della considerazione iniziale di organizzazioni come Evernote, ma certamente contribuisce anch’esso.