Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Spot instances: capirle, adottarle e risparmiare

By Matan BordoDec 12, 20237 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Con le Spot instances può ridurre i costi di compute fino al 90%. Vediamo insieme cosa sono, perché conviene usarle e qual è il momento giusto per farlo.

Pur consentendo di tagliare i costi di compute dal 20 all'80% e di rendere indirettamente le applicazioni più resilienti, le Spot instances (o Spot VM su Google Cloud) sono ancora utilizzate molto meno di quanto dovrebbero.

Le ragioni sono diverse: la loro natura poco prevedibile, il timore di interruzioni dei workloads, la complessità di configurazione e gestione. Ma il motivo più ricorrente è semplicemente la scarsa familiarità con questo strumento.

Imparare ad aggirare questi ostacoli, però, le permetterà di sbloccare risparmi sul compute finora inesplorati.

In questa serie in due parti troverà tutto ciò che serve per ottenere il massimo dalle Spot instances.

Nella prima parte vedremo cosa sono, perché conviene usarle e quando ha senso farlo. Nella seconda parte spiegheremo come ottimizzarne l'utilizzo con gli Auto Scaling groups e come massimizzare il risparmio con Spot Scaling.

Cosa sono le Spot instances?

Le Spot instances funzionano un po' come i voli last-minute scontati, disponibili a seguito di cancellazioni dell'ultimo momento o di posti rimasti invenduti. Le compagnie aeree abbassano drasticamente i prezzi pur di riempire quei posti vuoti prima del decollo.

Allo stesso modo, i provider cloud offrono risorse di calcolo on-demand inutilizzate a prezzi molto inferiori rispetto alle istanze on-demand — fino al 90% in meno — per valorizzare la capacità in eccesso.

Le basta impostare un prezzo di offerta per la Spot instance — il massimo che è disposto a pagare all'ora — e, se lo Spot price (il prezzo corrente sul mercato spot) è inferiore alla sua offerta, l'istanza viene avviata.

Tenga presente, però, che il provider cloud può richiedere indietro le Spot instances con appena due minuti di preavviso, qualora la domanda di istanze on-demand a prezzo pieno aumenti, con il rischio di interrompere la sua applicazione.

Spot instances e biglietti aerei hanno qualcosa in comune: entrambi permettono di ottenere qualcosa (potenza di calcolo nel primo caso, un posto in aereo nel secondo) a un costo ridotto. C'è però un certo livello di incertezza e di rischio: le Spot instances possono essere richiamate se il prezzo di mercato supera la sua offerta, e i biglietti last-minute possono sparire se qualcun altro li acquista prima.

Le interruzioni si verificano in genere in due situazioni:

  1. quando c'è un picco di domanda per istanze on-demand o reserved;
  2. quando i prezzi spot superano l'offerta (oggi un'eventualità meno probabile).

Perché conviene usare le Spot instances (anticipazione: non è solo una questione di risparmio)

I potenziali risparmi su EC2 (fino all'80%!) vengono spesso indicati come il principale vantaggio delle Spot instances, ma non sono l'unico.

Usare le Spot instances non rende di per sé le applicazioni più resilienti, ma di norma richiede che le applicazioni possiedano già un certo livello di resilienza per poter assorbire le potenziali interruzioni.

Per esempio, dato che le applicazioni in esecuzione su Spot instances andrebbero idealmente progettate per gestire le interruzioni in modo elegante, dovrebbe aver già previsto checkpoint, meccanismi di salvataggio automatico o la distribuzione dei workloads su più istanze.

In questo modo la sua infrastruttura:

  1. gestisce meglio le fluttuazioni;
  2. mantiene le prestazioni nei momenti di picco;
  3. mitiga i rischi legati a potenziali interruzioni o guasti.

Durante i picchi di carico, le Spot instances possono essere integrate nel suo sistema per assorbire l'aumento della domanda, garantendo che le fluttuazioni di traffico o di workload non si traducano in un calo delle prestazioni.

Con istanze più economiche può destinare più risorse a meccanismi di ridondanza e failover, distribuendo i workloads su un numero maggiore di istanze.

E se un'istanza viene interrotta, le altre possono continuare a elaborare parti del workload, riducendo al minimo l'impatto del singolo guasto. I suoi workloads si spostano così in modo trasparente su un'altra istanza, senza ripercussioni significative sui costi.

EC2 Instance Pools: come funzionano

Per sfruttare al meglio le AWS Spot instances è importante avere ben chiaro il concetto di EC2 instance pool. Un EC2 instance pool rappresenta la capacità totale di un determinato tipo di istanza (per esempio m5.xlarge) in una specifica regione.

Quando in un instance pool è presente capacità inutilizzata, quella capacità in eccesso prende il nome di Spot Capacity pool.

Instance Pool

Ogni famiglia di istanze, dimensione, availability zone e regione ha i propri EC2 instance pools distinti e, di conseguenza, i propri Spot capacity pools.

Per questo conviene non "mettere tutte le uova nello stesso paniere". Più pool è in grado di sfruttare, più diversificata sarà la sua selezione potenziale di istanze, riducendo al minimo il rischio che le Spot instances non siano disponibili quando le servono.

Quando usare le Spot instances

In generale, le Spot instances danno il meglio con workloads che:

  • sono flessibili;
  • non hanno vincoli temporali specifici;
  • sono distribuibili o suddivisibili in attività eseguibili in parallelo;
  • tollerano le interruzioni.

A breve vedremo i casi d'uso specifici in cui ha senso utilizzare le Spot instances. Intanto, ecco tre domande per capire se i suoi workloads sono adatti:

  1. I miei workloads sono fault-tolerant?

Poiché le Spot instances possono essere interrotte, i workloads devono essere progettati per gestire le interruzioni senza causare guasti critici o perdita di dati. I workloads fault-tolerant continuano a funzionare oppure si ripristinano rapidamente quando le istanze vengono interrotte o terminate. 2. Il workload può essere arrestato in meno di 2 minuti? I workloads devono poter essere fermati con un breve preavviso, per evitare perdite di dati o disservizi. Se il suo workload può essere arrestato in meno di due minuti, diventa molto più semplice rispondere alle interruzioni delle Spot instances. Per questo motivo le applicazioni stateless sono particolarmente adatte: non memorizzando dati di sessione, possono migrare in modo trasparente tra istanze senza perdere funzionalità o dati, risultando resilienti alle interruzioni. 3. Posso essere flessibile su tipi di istanza e availability zone? Distribuire i workloads su più istanze e availability zone riduce la vulnerabilità alle interruzioni, perché distribuisce il rischio. Ricordi che la capacità è una proprietà dello Spot instance pool: ogni tipo di istanza in ogni availability zone costituisce un pool a sé. Quando può attingere a più pool, il rischio di interruzioni simultanee in tutti i pool è inferiore a quello di un'interruzione in un singolo pool. Distribuirsi su più availability zone riduce la dipendenza da un singolo pool e garantisce la continuità anche se una zona subisce vincoli di capacità o picchi di prezzo.

Più nello specifico, dovrebbe valutare l'uso delle Spot instances nelle situazioni che seguono.

Ambienti di test e CI/CD

Gli ambienti di testing/sviluppo e le attività di CI/CD di solito non richiedono uptime continuo, perché vengono utilizzati in modo intermittente per lavorare su funzionalità specifiche o testare modifiche. Inoltre, le attività di sviluppo e test possono essere riavviate, oppure messe in pausa e riprese (se pianificate per tempo), senza perdita di dati critici: di conseguenza tollerano bene le interruzioni.

Questi workloads sono spesso flessibili anche sul fronte delle risorse e possono adattarsi a diversi tipi di istanza o availability zone senza compromettere il lavoro in corso.

Attività di batch processing

Le attività di batch processing e i job ETL spesso non hanno vincoli temporali stringenti, e questa flessibilità si sposa perfettamente con le Spot instances.

Possono inoltre essere suddivise in unità più piccole e indipendenti, distribuibili su più istanze senza un impatto significativo in caso di interruzione di una di esse.

In questo modo, l'interruzione di un'istanza non blocca il completamento dell'intero job, perché il workload può essere ridistribuito sulle altre istanze disponibili. E se in un dato momento non ci sono istanze disponibili, i job possono essere strutturati per salvare stati intermedi e riprendere dall'ultimo checkpoint in caso di interruzioni.

High-performance computing (HPC) e big data processing

Le attività di high-performance computing implicano la gestione e l'analisi di enormi quantità di dati. Le Spot instances sono particolarmente indicate per questo tipo di workloads, perché tali attività si prestano a essere distribuite su più istanze e consentono di scalare facilmente verso l'alto e verso il basso.

Di norma queste attività sono costose, perché elaborare dataset di grandi dimensioni richiede notevoli risorse di calcolo; con le Spot instances, però, il costo di ogni istanza è molto più basso e, moltiplicato per migliaia di istanze, il risparmio diventa rapidamente significativo.

Web server

I web server sono candidati ideali per le Spot instances, perché di solito sono stateless. In genere non memorizzano dati localmente né si appoggiano a informazioni di sessioni precedenti, quindi possono essere interrotti senza un impatto rilevante.

In molti scenari ogni richiesta a un web server viene elaborata in modo indipendente, senza fare affidamento su informazioni di sessione memorizzate.

Workloads containerizzati / Kubernetes

Anche le applicazioni containerizzate sono spesso progettate per essere stateless, il che le rende ottime candidate per le Spot instances.

Poiché i container in genere non memorizzano dati specifici della sessione, è possibile avviarne di nuovi o terminarli senza ripercussioni sul sistema nel suo complesso.

Inoltre, dato che i container suddividono le applicazioni in unità più piccole e indipendenti, i workloads containerizzati si adattano facilmente a diversi tipi di istanza o availability zone. Una flessibilità che si sposa perfettamente con la natura variabile delle Spot instances.

Abbiamo visto tutto ciò che le serve sapere sulle Spot instances: dal concetto di base a come sfruttarne i vantaggi in modo efficace, fino ai casi d'uso che ne valorizzano al meglio i benefici.

Nella seconda parte della serie parleremo degli Auto Scaling groups (ASG), che aiutano a gestire le interruzioni Spot e a ottimizzarne l'utilizzo, e di Spot Scaling, che semplifica la configurazione e la gestione degli ASG per massimizzare i risparmi Spot e la disponibilità delle applicazioni.