PerfectScale

Quanto commitment sui Savings Plans AWS è quello giusto? Il problema del dimensionamento e come smettere di tirare a indovinare

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

Jul 27, 202615 min read
Mohammad Reza Saleh Sedghpour

About Mohammad Reza Saleh Sedghpour

Mohammad Reza Saleh Sedghpour is a Senior Software Engineer II at DoiT and a Cloud Engineer and Researcher with over a decade of experience in cloud computing and distributed systems. He holds a Ph.D. in Computer Science, specializing in resiliency patterns for microservices, and is an active open-source contributor who regularly publishes research and presents at international conferences. At DoiT, he works on the automation behind cloud cost-optimization tooling, including commitment management — helping businesses use cloud technologies for optimal performance, resilience, and cost.

My personal page

Ogni conversazione sui costi AWS che ho avuto prima o poi arriva alla stessa domanda. Qualcuno del finance, un engineering lead o un founder si sporge in avanti e chiede: "Quindi, su quanto dovremmo fare commitment?"

È l'istinto giusto e l'impostazione sbagliata. La domanda viene posta come si chiederebbe a quanto impostare il termostato: come se esistesse un unico numero corretto, e l'unico compito fosse trovarlo una volta e bloccarlo.

Non è così. Il commitment giusto sui Savings Plans non è un numero da scoprire. È un bersaglio mobile da continuare a centrare, mese dopo mese, mentre l'utilizzo vi cambia sotto i piedi.

E il costo di mancare quel bersaglio è asimmetrico, ed è questo a renderlo stressante. Se il commitment è troppo basso, vi lasciate sfuggire denaro vero: i Compute Savings Plans, per esempio, scontano le tariffe on-demand fino a circa il 66%, quindi ogni ora non coperta è un'ora pagata più del dovuto. Se è troppo alto, è peggio: avete firmato un contratto di uno o tre anni per capacità che potreste non usare. Un Savings Plan inutilizzato non è solo denaro sprecato: può costarvi più dell'utilizzo on-demand che avrebbe dovuto sostituire.

Traduciamolo in numeri. Supponiamo che la vostra baseline stabile — il compute che gira davvero 24 ore su 24 — sia di circa 60 $/ora, e che vi impegniate per 70 $. Quei 10 $/ora in più sono circa 7.200 $ al mese pagati per niente. E a differenza di un'istanza sovradimensionata che potete spegnere oggi pomeriggio, un Savings Plan vi concede solo una finestra di correzione molto stretta; dopodiché, in genere, non potete annullare, ridurre o ridimensionare il commitment. Quei 10 $/ora ve li tenete per tutto il resto della durata. Su un piano triennale, un singolo errore di dimensionamento come questi 10 $/ora si trasforma in una passività da un quarto di milione di dollari prima ancora della prima revisione.

Ecco la trappola. Il potenziale guadagno è limitato allo sconto. Il rovescio della medaglia è una passività pluriennale da cui è quasi impossibile uscire. Così la maggior parte dei team fa la cosa razionale in condizioni di incertezza: si impegna meno del necessario, si copre le spalle e paga in silenzio più del dovuto per anni.

Questo articolo spiega perché quel numero è davvero difficile da azzeccare, perché il processo manuale vi garantisce quasi sempre dati obsoleti, e come un modello mentale migliore, unito all'automazione, permette di centrare il bersaglio in modo continuo invece di tirare a indovinare ogni trimestre. (Se state ancora decidendo quale strumento di commitment usare, partite dalla nostra guida alla scelta tra Savings Plans e Reserved Instances e dalla rassegna dei 7 errori più comuni nei commitment AWS. Questo post presuppone che abbiate già scelto i Savings Plans e che siate alle prese con la domanda del "quanto".)

La risposta breve

Se da questo post vi portate via una sola cosa, che sia questa: fate commitment sulla vostra baseline stabile — il compute che è davvero acceso 24 ore su 24 — non sulla settimana media, e nemmeno sul picco. Trasformatela in una policy di copertura difendibile (quanta parte della spesa volete sotto commitment, più un tetto da non superare), poi aggiungete commitment a piccoli passi verso quell'obiettivo invece che con un unico grande acquisto.

Tutto quello che segue spiega perché questa è la risposta giusta, perché il processo abituale la rende difficile e come applicarla in modo continuo senza dover sorvegliare un foglio di calcolo.

Perché il "quanto" è davvero difficile

Partiamo dalle due parole che tutti usano come sinonimi e che sinonimi non sono: copertura e utilizzo.

  • La copertura indica quanta parte della vostra spesa on-demand idonea è sotto commitment. Se spendete circa 80 $/ora in compute idoneo ai Savings Plans e 60 $/ora sono coperti, siete al 75% di copertura.
  • L'utilizzo indica quanta parte del commitment acquistato viene effettivamente usata. Se vi impegnate per 70 $/ora e si presentano solo 60 $/ora di utilizzo corrispondente, siete a circa l'86% di utilizzo — e state comunque pagando la tariffa impegnata per il 14% rimasto inattivo.

Ed ecco la parte scomoda: queste due metriche si muovono in direzioni opposte quando provate a spingerle. Inseguite una copertura più alta e comprerete più commitment, rendendo più facile che l'utilizzo scivoli se la spesa cala. Proteggete l'utilizzo comprando con prudenza e la copertura — e con lei i risparmi — resterà bassa. Dimensionare un commitment significa scegliere dove posizionarsi su questa altalena. La maggior parte dei team non fa mai questa scelta in modo esplicito: si limita a reagire.

media

Poi ci sono le leve, ognuna delle quali cambia i conti:

Scelta Opzioni Il compromesso
Durata 1 anno vs. 3 anni Il triennale aumenta lo sconto ma triplica il lock-in su cui state scommettendo.
Pagamento No / Partial / All Upfront Pagare di più in anticipo garantisce una tariffa leggermente migliore, ma immobilizza liquidità e alza la posta in caso di errore.
Tipo di piano Compute SP vs. EC2 Instance SP Il Compute SP (fino a ~66% di sconto) è flessibile su famiglia di istanze, dimensione, regione, OS, tenancy e perfino Fargate/Lambda. L'EC2 Instance SP (fino a ~72% di sconto) sconta un po' di più ma vi vincola a una famiglia di istanze in una regione. Di nuovo: flessibilità contro sconto.

Per capire quanto valgono queste scelte, guardate che effetto hanno sul prezzo di una singola istanza — la stessa c6a.8xlarge, una sola regione, prezzata sulle diverse durate e opzioni di pagamento del Compute Savings Plan (più l'on-demand):

media

Il divario è enorme: la stessa macchina passa da circa 1,22 $/ora on-demand a ~0,54 $/ora con un Compute Savings Plan triennale — un'oscillazione del ~56% decisa interamente da come comprate. E i delta non sono distribuiti in modo uniforme: passare da 1 a 3 anni quasi dimezza la tariffa, mentre la scelta dell'anticipo (No / Partial / All) la sposta solo di un paio di punti percentuali. La leva che sembra un dettaglio scritto in piccolo — la durata — è quella che sposta davvero i soldi.

Ognuna di queste scelte presuppone che sappiate come sarà il vostro workload per l'intera durata. Con un piano EC2 Instance triennale all-upfront non state dimensionando un commitment: state facendo una previsione sulla vostra architettura nel 2028. È questa la vera difficoltà. Il numero non è difficile da calcolare. È il futuro da cui dipende a essere difficile da conoscere.

Le cinque forze che continuano a spostare il bersaglio

Se il vostro utilizzo fosse una linea piatta, sarebbe un esercizio da foglio di calcolo. Non lo è mai. Cinque forze continuano a trascinare altrove il numero "giusto" dopo che vi siete impegnati.

media

1. L'utilizzo non è piatto. La spesa reale di compute oscilla di settimana in settimana: job batch, lanci, traffico stagionale, l'onboarding di un grande cliente. Un commitment dimensionato su una buona settimana diventa un commitment eccessivo in una settimana tranquilla. Dimensionate su una settimana intensa a 70 $/ora quando la vostra baseline stabile è in realtà di 60 $/ora, e appena le cose si calmano quei 10 $/ora in più sono commitment inattivo: circa 87.600 $ l'anno pagati per capacità che non state usando. Lo sconto che inseguivate è più piccolo dello spreco che avete creato.

2. Right-sizing e migrazioni riducono la baseline. È la forza che, in silenzio, immobilizza più denaro di tutte. Vi impegnate sull'utilizzo di oggi, poi il vostro team fa il suo lavoro: applica il right-sizing alle istanze sovradimensionate, sposta un servizio su Graviton, fa il refactoring di un monolite. Il vostro utilizzo scende, il vostro commitment no. Vi impegnate sulla baseline di 60 $/ora, poi il team migra a Graviton e la baseline si assesta a 50 $/ora. Da un giorno all'altro, quei ~10 $/ora di commitment restano senza utilizzo su cui atterrare — con circa due anni rimanenti su un piano triennale, all'incirca 175.000 $ immobilizzati. Avete fatto la cosa giusta dal punto di vista ingegneristico e siete stati puniti per questo. La mossa corretta è l'ordine inverso: prima il right-sizing, poi il commitment sullo stato stabile più snello. Non lo fa quasi nessuno, perché commitment e right-sizing vivono nei backlog di team diversi.

3. I commitments scadono, e le scadenze arrivano a grappoli. Un Savings Plan comprato un anno fa termina in un giorno preciso. Se ne avete comprati diversi tutti insieme, scadranno tutti insieme, e la vostra copertura crollerà da un giorno all'altro. Rinnovare significa rifare da capo tutto l'esercizio di dimensionamento, esattamente nel momento in cui è meno probabile che stiate guardando. Se ve lo perdete, tornate alle piene tariffe on-demand per la fetta scaduta.

4. Un target di copertura non è un risultato di utilizzo. Potete puntare all'80% di copertura e ritrovarvi comunque con un utilizzo scarso se la spesa cala dopo l'acquisto. I target si fissano sulla storia; l'utilizzo si realizza nel futuro. Il divario tra i due è puro spreco, e non lo vedete finché non arriva la fattura.

5. Il tempo stesso. Ogni giorno che aspettate per avere "abbastanza certezza" prima di impegnarvi è un giorno a tariffe on-demand. I team rimandano i commitments per mesi inseguendo una fiducia che non arriva mai, e lo sconto rimandato è perso per sempre. Come scriviamo nel post sugli errori nei commitment: anche durante migrazioni e periodi di incertezza, impegnare una parte batte non impegnare nulla.

Notate che nessuna di queste è una falla di pianificazione. È semplicemente la realtà. La vostra infrastruttura deve cambiare, è il suo mestiere. Il problema non è che il bersaglio si muove: è che la maggior parte dei processi di commitment è costruita come se non lo facesse.

Perché l'approccio manuale non regge

Ecco come avviene di solito il dimensionamento nella pratica.

Una volta al trimestre, qualcuno apre la raccomandazione di acquisto dei Savings Plans di AWS. AWS guarda indietro su una finestra — potete scegliere 7, 30 o fino a 60 giorni — e vi consegna un unico commitment orario suggerito, ottimizzato per il risparmio massimo. Qualcuno gli dà un'occhiata, magari lo riduce "per stare tranquilli", ottiene un'approvazione e compra.

In questo flusso ci sono tre problemi strutturali.

Primo: è un singolo numero ricavato da un singolo periodo di lookback. Le raccomandazioni a risparmio massimo assumono che il passato recente sia il vostro futuro e spingono in alto la copertura. Ottimo quando l'utilizzo è stabile; costoso nel momento in cui non lo è.

Secondo: è un acquisto big-bang. Prendete l'intera decisione di commitment del trimestre e la eseguite in un'unica transazione, in un solo giorno. Se quel giorno capita in cima a un picco di utilizzo, avete appena ancorato un anno di commitment a un picco.

Terzo: è già obsoleto. Quando la raccomandazione viene rivista, approvata e acquistata, sono passati giorni o settimane e l'utilizzo si è mosso. Non vi state impegnando sulla vostra realtà attuale: vi state impegnando su un'istantanea di una realtà che non c'è più.

Il problema più profondo è la cadenza. L'utilizzo cambia in continuazione; il processo manuale scatta ogni trimestre. State campionando un segnale in movimento quattro volte l'anno e agendo su ogni campione con settimane di ritardo. Nessun rigore da foglio di calcolo può risolvere un problema di frequenza di campionamento.

Un modello mentale migliore: dimensionare sulla baseline, poi arrivarci a scalini

La soluzione consiste in realtà in due lavori distinti, e dare loro un nome aiuta: il dimensionamento (scegliere il numero giusto) e il laddering (arrivarci in sicurezza). Due cambiamenti nel modo di pensare a ciascuno.

Primo cambiamento — dimensionamento: ancoratevi alla baseline stabile. Questo è il lavoro di scegliere il numero. Invece di chiedervi "qual è l'importo giusto in dollari", decidete quanta parte della spesa idonea volete coprire — ancorandovi alla baseline stabile, la parte che gira 24 ore su 24 — e lasciate che l'importo in dollari ne discenda. Trasforma una stima senza confini in una policy su cui potete ragionare:

  • Conservativa (~65% di copertura). Proteggete l'utilizzo e mantenete flessibilità. Rinunciate deliberatamente a una parte del risparmio. Adatta a utilizzi volatili o in rapido cambiamento.
  • Bilanciata (~80% di copertura). Il default per la maggior parte dei workloads di produzione stabili: risparmi significativi con un buffer comodo contro i cali.
  • Aggressiva (~90% di copertura). Massimo risparmio, buffer minimo. Appropriata solo quando la baseline è davvero stabile e prevedibile.

Perché non scegliere sempre l'aggressiva? Perché la copertura ha rendimenti decrescenti, e l'ultima fetta è quella pericolosa. La base del vostro utilizzo — la parte accesa 24/7/365 — è la più sicura da coprire, e lì lo sconto è praticamente denaro regalato. Man mano che spingete la copertura più in alto, iniziate a impegnarvi sulla parte variabile in cima al vostro utilizzo: le ore che esistono solo durante i picchi. Quella spesa marginale è esattamente la spesa che ha più probabilità di sparire, il che significa che la copertura aggiunta oltre l'~80% porta con sé la maggior parte del rischio di commitment eccessivo aggiungendo i risparmi meno affidabili. L'approccio giusto non è "coprire tutto". È "coprire in modo aggressivo la base stabile e con cautela la parte alta e volatile".

Secondo cambiamento — laddering: arrivateci a piccoli passi. Questo è un lavoro diverso: non quanto impegnare, ma come arrivarci. Invece di un unico grande acquisto, spezzate la distanza dal vostro target in una serie di piccoli commitments scaglionati nel tempo. Il laddering risolve in un colpo solo diverse delle cinque forze:

  • Passi piccoli e frequenti significano che nessun singolo acquisto si ancora a un picco. State mediando l'ingresso nel vostro commitment come fareste con un piano di accumulo su una posizione.
  • Date di inizio scaglionate significano scadenze scaglionate: nessun crollo al rinnovo, perché i piani arrivano a scadenza pochi alla volta invece che tutti insieme.
  • Impegnarsi gradualmente significa poter fermarsi o rallentare nel momento in cui la spesa cala, invece di scoprire il commitment eccessivo un anno dopo, dentro un contratto bloccato.

media

Ma tenete i due lavori separati. Il laddering gestisce il timing — la concentrazione degli acquisti e i crolli alle scadenze — non il dimensionamento. Non può salvare un target troppo aggressivo: fate laddering lentamente verso il numero sbagliato e finirete comunque sovraesposti, solo qualche settimana più tardi. Prima azzeccate la baseline; poi fate laddering verso di essa.

Il punto critico: dimensionare su una baseline in movimento, ricontrollare la copertura ogni settimana, correggere per le scadenze e mettere in pausa nei cali è un lavoro genuinamente continuo. Fatto a mano, è un ruolo part-time che nessuno ha. È esattamente il vuoto che l'automazione è nata per colmare.

Come PerfectScale for Commitments automatizza tutto questo

PerfectScale for Commitments è la risposta di DoiT al problema del dimensionamento. Esegue la versione continua di tutto quanto descritto sopra — dimensionamento, laddering e acquisto — così ottenete la copertura di una strategia aggressiva con la sicurezza di una conservativa, senza che nessuno debba sorvegliare un foglio di calcolo. Ecco come risponde a ciascuna di queste sfide.

Un motore di raccomandazioni sempre aggiornato. Anziché un'istantanea trimestrale, PerfectScale for Commitments aggiorna in continuo la sua analisi sul vostro utilizzo recente. Esclude deliberatamente la spesa già gestita altrove, come la copertura esistente e i piani in scadenza, così dimensiona il vostro vero fabbisogno netto aggiuntivo, senza doppi conteggi.

Profili di rischio che non sono altro che target di copertura. Lo schema conservativa / bilanciata / aggressiva descritto sopra è integrato sotto forma di profili selezionabili (Conservative ≈ 65%, Balanced ≈ 80%, Max Savings ≈ 90%). Voi scegliete l'approccio; il motore lo traduce in un commitment target e calibra gli acquisti per raggiungerlo. Balanced è il default perché è la risposta giusta per la maggior parte dei workloads di produzione.

Laddering eseguito settimanalmente, dove solo il passo successivo è attivo. PerfectScale for Commitments trasforma il vostro target in un calendario di piccoli passi settimanali. Aspetto cruciale: impegna sempre e solo il passo successivo — il resto della scala è una proiezione, e il piano viene ricalcolato a ogni ciclo su dati di utilizzo freschi. Se l'utilizzo cresce, la scala si fa più ripida; se cala, si appiattisce. Non siete mai bloccati in un piano disegnato settimane fa.

Una protezione contro gli acquisti in un momento di calo. Se la vostra spesa idonea cala di settimana in settimana oltre una certa soglia, PerfectScale for Commitments salta l'acquisto di quel ciclo invece di impegnarsi in una fase di discesa. È il modo più comune in cui i team si sovraespongono a mano, ed è gestito automaticamente.

Rinnovi automatici — niente crolli di copertura. I piani in scadenza vengono rilevati in anticipo e rinnovati come acquisti pianificati a sé stanti, così la copertura non crolla quando un piano termina. Il rinnovo è dimensionato in proporzione a ciò che scade, non appiccicato a una nuova stima.

Monitoraggio dello spreco dopo l'acquisto. Il dimensionamento non finisce con l'acquisto. PerfectScale for Commitments osserva l'utilizzo e segnala un calo significativo, così un commitment eccessivo emerge come alert nel giro di giorni, non come voce di fattura che notate al rinnovo.

Il controllo resta a voi. Per impostazione predefinita PerfectScale for Commitments funziona in modalità con approvazione obbligatoria: prepara ogni acquisto e chiede conferma prima di eseguirlo, quindi nulla accade senza un sì umano. I team che vogliono un'esperienza completamente hands-off potranno passare alla modalità autonoma (in arrivo). In entrambi i casi, impostate un tetto massimo di commitment che il sistema non supererà mai, potete mettere in pausa e riprendere in qualsiasi momento, e ogni passo che porterebbe il totale oltre un livello di commitment già approvato fa scattare di nuovo l'approvazione invece di passare inosservato.

Ogni acquisto automatizzato supera un controllo di validazione prima di poter essere eseguito: deve corrispondere alla durata, all'opzione di pagamento e al tetto che avete scelto, rientrare nella finestra di acquisto consentita, e non scatta se un altro acquisto di commitment è già in coda al di fuori del sistema — così non vi ritrovate con doppi acquisti accidentali che si accumulano uno sull'altro. Ogni piano acquistato da PerfectScale for Commitments viene etichettato come tale, così il vostro inventario mostra sempre con esattezza quali commitments sono stati automatizzati e quali avete comprato voi. Quando un acquisto viene effettuato o richiede la vostra approvazione, ricevete una notifica.

L'effetto netto: la decisione di dimensionamento smette di essere un evento trimestrale stressante e diventa una policy mantenuta in continuo. Scegliete una volta sola l'approccio di copertura e il tetto; il sistema fa il lavoro settimanale di centrare il bersaglio, schivare i cali e rinnovare le scadenze in sicurezza — con un audit trail completo.

Come si presenta un buon approccio: un rapido framework decisionale

Non vi serve l'automazione per pensare correttamente il dimensionamento. Vi serve per agire correttamente ogni settimana. Ecco come abbinerei l'approccio alla situazione:

La vostra situazione Approccio di copertura Automatizzare?
Baseline stabile e prevedibile; workload maturo Aggressiva (~90%) Sì: il vantaggio è reale e il rischio è basso, ma solo l'automazione mantiene in modo affidabile una copertura alta senza sforare.
Produzione stabile con normale varianza settimanale Bilanciata (~80%) Sì: è il punto di equilibrio; il laddering ammortizza la varianza.
Utilizzo a picchi, stagionale o in rapida crescita Conservativa (~65%), con laddering Decisamente sì: qui il bersaglio si muove più in fretta, quindi il dimensionamento manuale invecchia prima.
In piena migrazione o right-sizing attivo Conservativa, piccoli passi, prima il right-sizing Sì: impegnatevi gradualmente sulla baseline che si restringe; mai big-bang.
Spesa minima/piatta dove sbagliare costa poco Qualsiasi Facoltativo: lo sforzo potrebbe non ripagare ancora.

Il filo conduttore: più il vostro utilizzo si muove, più vi conviene fare commitment (i risparmi sono grandi) e più è difficile dimensionarlo a mano (il bersaglio non sta fermo). Questa combinazione di valore alto e difficoltà alta è esattamente il terreno in cui l'automazione si guadagna il suo posto.

TL;DR

  • Il commitment "giusto" è un bersaglio mobile, non un numero fisso. Il vostro utilizzo cambia, ed è previsto che cambi; il vostro processo di dimensionamento deve cambiare di conseguenza.
  • Fate commitment sulla baseline stabile: il compute acceso 24 ore su 24, non la settimana media e non il picco. Esprimetela come policy di copertura con un tetto.
  • Copertura e utilizzo sono metriche diverse in tensione tra loro. Dimensionare significa scegliere dove collocarsi tra "rinunciare a una parte del risparmio" e "pagare commitment inattivo".
  • Dimensionamento e laddering sono due lavori distinti. Il dimensionamento sceglie il numero giusto; il laddering lo raggiunge a piccoli passi per ridurre il rischio di timing e i crolli alle scadenze. Il laddering non può correggere un target troppo aggressivo.
  • Fate laddering verso la baseline invece di indovinare un importo in dollari e lasciate che un'automazione come PerfectScale for Commitments faccia il lavoro settimanale: dimensionamento continuo, laddering che tiene conto dei cali, rinnovi automatici, monitoraggio dello spreco e un tetto rigido di commitment sotto il vostro controllo.

Pronti a smettere di tirare a indovinare?

Se dimensionate i Savings Plans AWS a mano ogni trimestre, quasi certamente vi state lasciando sfuggire risparmi o vi state portando dietro commitment che non usate — di solito entrambe le cose, in angoli diversi della fattura. PerfectScale for Commitments trasforma tutto questo in una policy che impostate una volta sola e in un sistema che la mantiene, lasciando a voi il controllo del tetto e delle approvazioni.