Ottimizzazione dei costi: computing, container e serverless

Last reviewed 2023-07-12 UTC

Questo documento nel framework dell'architettura Google Cloud fornisce suggerimenti per aiutarti a ottimizzare il costo delle macchine virtuali (VM), dei container e delle risorse serverless in Google Cloud.

Le indicazioni in questa sezione sono rivolte ad architetti, sviluppatori e amministratori responsabili del provisioning e della gestione delle risorse di calcolo per i carichi di lavoro nel cloud.

Le risorse di calcolo sono la parte più importante della tua infrastruttura cloud. Quando esegui la migrazione dei carichi di lavoro a Google Cloud, una prima scelta tipica è Compute Engine, che ti consente di eseguire il provisioning e la gestione delle VM in modo efficiente nel cloud. Compute Engine offre una vasta gamma di tipi di macchine ed è disponibile a livello globale in tutte le regioni di Google Cloud. I tipi di macchine predefinite e personalizzate di Compute Engine ti consentono di eseguire il provisioning di VM che offrono capacità di calcolo simile a quella della tua infrastruttura on-premise, consentendoti di accelerare il processo di migrazione. Compute Engine offre il vantaggio economico di pagare solo per l'infrastruttura che utilizzi e fornisce risparmi significativi man mano che utilizzi più risorse di calcolo con sconti per utilizzo sostenuto.

Oltre a Compute Engine, Google Cloud offre container e servizi di computing serverless. L'approccio serverless può essere più conveniente per i nuovi servizi che non sono sempre in esecuzione (ad esempio API, elaborazione dati ed elaborazione eventi).

Insieme ai consigli generali, questo documento fornisce indicazioni per aiutarti a ottimizzare il costo delle risorse di calcolo quando utilizzi i seguenti prodotti:

  • Compute Engine
  • Google Kubernetes Engine (GKE)
  • Cloud Run
  • Cloud Functions
  • App Engine

Consigli generali

I suggerimenti seguenti sono applicabili a tutti i servizi di computing, container e serverless in Google Cloud che sono illustrati in questa sezione.

Monitoraggio di utilizzo e costi

Utilizza i seguenti strumenti e tecniche per monitorare l'utilizzo e il costo delle risorse:

Controlla il provisioning delle risorse

Utilizza i suggerimenti seguenti per controllare la quantità di risorse di cui è stato eseguito il provisioning nel cloud e la località in cui vengono create le risorse:

  • Per assicurarti che il consumo e il costo delle risorse non superino la previsione, utilizza le quote delle risorse.
  • Esegui il provisioning delle risorse nella regione a costo più basso che soddisfa i requisiti di latenza del tuo carico di lavoro. Per controllare dove viene eseguito il provisioning delle risorse, puoi utilizzare il vincolo del criterio dell'organizzazione gcp.resourceLocations.

Ricevi sconti per impegno di utilizzo

Gli sconti per impegno di utilizzo (CUD) sono ideali per carichi di lavoro con esigenze prevedibili in termini di risorse. Dopo aver eseguito la migrazione del carico di lavoro su Google Cloud, trova la base di riferimento per le risorse richieste e ottieni sconti maggiori per l'utilizzo con impegno. Ad esempio, acquista un impegno di uno o tre anni e ottieni uno sconto sostanziale sui prezzi delle VM di Compute Engine.

Automatizza il monitoraggio dei costi utilizzando le etichette

Definisci e assegna le etichette in modo coerente. Di seguito sono riportati alcuni esempi di come utilizzare le etichette per automatizzare il monitoraggio dei costi:

  • Per le VM utilizzate solo dagli sviluppatori durante l'orario di apertura, assegna l'etichetta env: development. Puoi utilizzare Cloud Scheduler per configurare una Cloud Function serverless per arrestare queste VM dopo l'orario di lavoro e riavviarle quando necessario.

  • Per un'applicazione con più servizi Cloud Run e istanze Cloud Functions, assegna un'etichetta coerente a tutte le risorse Cloud Run e Cloud Functions. Identifica le aree ad alto costo e intervieni per ridurre i costi.

Personalizzare i report di fatturazione

Configura i report di fatturazione Cloud configurando i filtri richiesti e raggruppando i dati secondo necessità (ad esempio per progetti, servizi o etichette).

Promuovere una cultura a risparmio sui costi

Addestra sviluppatori e operatori sull'infrastruttura cloud. Crea e promuovi programmi di apprendimento utilizzando lezioni tradizionali o online, gruppi di discussione, recensioni di colleghi, programmazione di abbinamento e giochi per risparmiare. Come mostra la ricerca DORA di Google, la cultura dell'organizzazione è un fattore chiave per migliorare le prestazioni, ridurre le rielaborazioni e il burnout e ottimizzare i costi. Fornendo ai tuoi dipendenti visibilità sul costo delle loro risorse, li aiuti ad allineare le loro priorità e le tue attività agli obiettivi e ai vincoli commerciali.

Compute Engine

Questa sezione fornisce indicazioni per aiutarti a ottimizzare il costo delle risorse Compute Engine. Oltre a queste indicazioni, ti consigliamo di seguire i consigli generali descritti in precedenza.

Il modello di fatturazione

Per scoprire le opzioni di fatturazione per Compute Engine, consulta Prezzi.

Analizzare il consumo di risorse

Esporta i dati sull'utilizzo in BigQuery per comprendere il consumo di risorse in Compute Engine. Esegui una query sul datastore BigQuery per analizzare le tendenze di utilizzo della CPU virtuale (vCPU) del tuo progetto e determinare il numero di vCPU che puoi rivendicare. Se hai definito delle soglie per il numero di core per progetto, analizza le tendenze di utilizzo per individuare le anomalie e intraprendere azioni correttive.

Rivendica le risorse inattive

Utilizza i seguenti consigli per identificare e recuperare VM e dischi inutilizzati, come le VM per i progetti proof of concept a cui è stata ridotta la priorità:

  • Utilizza il motore per suggerimenti di VM inattive per identificare le VM e i dischi permanenti inattivi in base alle metriche di utilizzo.
  • Prima di eliminare le risorse, valuta il potenziale impatto dell'azione e pianifica la ricreazione delle risorse se necessario.
  • Prima di eliminare una VM, valuta la possibilità di acquisire uno snapshot. Quando elimini una VM, i dischi collegati vengono eliminati, a meno che tu non abbia selezionato l'opzione Conserva disco.
  • Se possibile, ti consigliamo di arrestare le VM anziché eliminarle. Quando interrompi una VM, l'istanza viene terminata, ma i dischi e gli indirizzi IP vengono conservati fino a quando non li scolleghi o li elimini.

Regola la capacità in base alla domanda

Pianifica l'avvio e l'arresto automatico delle VM. Ad esempio, se una VM viene utilizzata solo otto ore al giorno per cinque giorni a settimana (ossia 40 ore alla settimana), puoi ridurre i costi del 75% arrestando la VM durante le 128 ore della settimana in cui la VM non viene utilizzata.

Scala automaticamente la capacità di calcolo in base alla domanda utilizzando i gruppi di istanze gestite. Puoi scalare automaticamente la capacità in base ai parametri importanti per la tua attività, ad esempio l'utilizzo della CPU o la capacità di bilanciamento del carico.

Scegli i tipi di macchina appropriati

Dimensiona le VM in modo che corrispondano ai requisiti di calcolo del carico di lavoro utilizzando il motore per suggerimenti tipo di macchina VM.

Per i carichi di lavoro con requisiti di risorse prevedibili, personalizza il tipo di macchina in base alle tue esigenze e risparmia utilizzando le VM personalizzate.

Per i carichi di lavoro di elaborazione batch a tolleranza di errore, considera l'utilizzo di VM spot. Computing ad alte prestazioni (HPC), big data, transcodifica multimediale, pipeline di integrazione continua e distribuzione continua (CI/CD) e applicazioni web stateless sono esempi di carichi di lavoro di cui è possibile eseguire il deployment su VM spot. Per un esempio di come Descartes Labs ha ridotto i costi di analisi utilizzando le VM prerilasciabili (la versione precedente delle Spot VM) per elaborare le immagini satellitari, consulta il case study di Descartes Labs.

Valuta le opzioni di licenza

Quando esegui la migrazione di carichi di lavoro di terze parti a Google Cloud, potresti essere in grado di ridurre i costi trasferendo le tue licenze (BYOL). Ad esempio, per eseguire il deployment delle VM Microsoft Windows Server, invece di utilizzare un'immagine premium che comporta costi aggiuntivi per la licenza di terze parti, puoi creare e utilizzare un'immagine BYOL di Windows personalizzata. Paghi solo per l'infrastruttura delle VM che utilizzi su Google Cloud. Questa strategia ti consente di continuare a ottenere valore dai tuoi investimenti esistenti in licenze di terze parti.

Se decidi di utilizzare un approccio BYOL, ti consigliamo di procedere come segue:

  • Esegui il provisioning del numero richiesto di core CPU di computing indipendentemente dalla memoria utilizzando i tipi di macchine personalizzate e limita il costo delle licenze di terze parti al numero di core CPU necessari.
  • Riduci il numero di vCPU per core da 2 a 1 disattivando il multithreading simultaneo (SMT) e riduci i costi di licenza del 50%.

Se i carichi di lavoro di terze parti hanno bisogno di hardware dedicato per soddisfare requisiti di sicurezza o conformità, puoi portare le tue licenze sui nodi single-tenant.

Google Kubernetes Engine

Questa sezione fornisce indicazioni per aiutarti a ottimizzare il costo delle tue risorse GKE.

Oltre ai seguenti consigli, consulta i consigli generali discussi in precedenza:

  • Utilizza GKE Autopilot per consentire a GKE di massimizzare l'efficienza dell'infrastruttura del tuo cluster. Non è necessario monitorare l'integrità dei nodi, gestire il packing o calcolare la capacità necessaria ai carichi di lavoro.
  • Ottimizza la scalabilità automatica di GKE utilizzando Horizontal Pod Autoscaler (HPA), Vertical Pod Autoscaler (VPA), Cluster Autoscaler (CA) o provisioning automatico dei nodi in base ai requisiti del tuo carico di lavoro.
  • Per i carichi di lavoro batch non sensibili alla latenza di avvio, utilizza il profilo di scalabilità automatica dell'ottimizzazione-utilizzo per migliorare l'utilizzo del cluster.
  • Utilizza il provisioning automatico dei nodi per estendere il gestore della scalabilità automatica dei cluster GKE e creare ed eliminare in modo efficiente i pool di nodi in base alle specifiche dei pod in attesa senza provisioning eccessivo.
  • Utilizza pool di nodi separati: un pool di nodi statici per il carico statico e pool di nodi dinamici con gruppi di scalabilità automatica dei cluster per i carichi dinamici.
  • Utilizza le VM spot per i pool di nodi Kubernetes quando i pod sono a tolleranza di errore e possono terminare in modo controllato in meno di 25 secondi. Combinata con il gestore della scalabilità automatica dei cluster GKE, questa strategia consente di garantire che il pool di nodi con VM a costi inferiori (in questo caso, il pool di nodi con VM Spot) sia scalabile prima.
  • Scegli tipi di macchine a costi contenuti, ad esempio E2, N2D e T2D, che garantiscono un rapporto prezzo/prestazioni superiore del 20-40%.
  • Utilizza la misurazione dell'utilizzo di GKE per analizzare i profili di utilizzo dei cluster per spazi dei nomi ed etichette. Identifica il team o l'applicazione che spende di più, l'ambiente o il componente che ha causato picchi di utilizzo o costi e il team che spreca risorse.
  • Utilizza le quote di risorse nei cluster multi-tenant per impedire a qualsiasi tenant di utilizzare più della quota assegnata di risorse del cluster.
  • Pianifica lo scale down automatico degli ambienti di sviluppo e test dopo l'orario di lavoro.
  • Segui le best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.

Cloud Run

Questa sezione fornisce indicazioni per aiutarti a ottimizzare il costo delle risorse Cloud Run.

Oltre ai seguenti consigli, consulta i consigli generali discussi in precedenza:

  • Modifica l'impostazione della contemporaneità (valore predefinito: 80) per ridurre i costi. Cloud Run determina il numero di richieste da inviare a un'istanza in base all'utilizzo di CPU e memoria. Aumentando la contemporaneità delle richieste, puoi ridurre il numero di istanze richieste.
  • Imposta un limite per il numero di istanze di cui è possibile eseguire il deployment.
  • Stima il numero di istanze richieste utilizzando la metrica Tempo di istanza fatturabile. Ad esempio, se la metrica mostra 100s/s, sono state pianificate circa 100 istanze. Aggiungi un buffer del 30% per mantenere le prestazioni, ovvero 130 istanze per 100 secondi/s di traffico.
  • Per ridurre l'impatto degli avvii completi, configura un numero minimo di istanze. Quando queste istanze sono inattive, vengono fatturate a un decimo del prezzo.
  • Tieni traccia dell'utilizzo della CPU e modifica i limiti della CPU di conseguenza.
  • Utilizza la gestione del traffico per determinare una configurazione ottimale per i costi.
  • Prendi in considerazione l'utilizzo di Cloud CDN o Firebase Hosting per la pubblicazione di asset statici.
  • Per le app Cloud Run che gestiscono le richieste a livello globale, valuta la possibilità di eseguire il deployment dell'app in più aree geografiche, perché il traffico in uscita da più continenti può comportare dei costi. Questa progettazione è consigliata se utilizzi un bilanciatore del carico e una CDN.
  • Riduci i tempi di avvio delle istanze perché il tempo di avvio è anch'esso fatturabile.
  • Acquista sconti per impegno di utilizzo e risparmia fino al 17% sul prezzo on demand per un impegno di un anno.

Cloud Functions

Questa sezione fornisce indicazioni per aiutarti a ottimizzare il costo delle risorse Cloud Functions.

Oltre ai seguenti consigli, consulta i consigli generali discussi in precedenza:

  • Osserva il tempo di esecuzione delle tue funzioni. Esperimento e benchmark per progettare la funzione più piccola che soddisfi ancora la soglia di prestazioni richiesta.
  • Se i tuoi carichi di lavoro Cloud Functions vengono eseguiti costantemente, valuta di utilizzare GKE o Compute Engine per gestire i carichi di lavoro. I container o le VM potrebbero essere opzioni di costo inferiore per i carichi di lavoro sempre in esecuzione.
  • Limita il numero di istanze di funzione che possono coesistere.
  • Confronta le prestazioni del runtime dei linguaggi di programmazione di Cloud Functions rispetto al carico di lavoro della funzione. I programmi in lingue compilate hanno avvii a freddo più lunghi, ma più veloci. I programmi nelle lingue interpretate sono più lenti, ma hanno un overhead di avvio a freddo più basso. Le funzioni brevi e semplici che vengono eseguite di frequente potrebbero costare meno in una lingua interpretata.
  • Elimina i file temporanei scritti sul disco locale, che è un file system in memoria. I file temporanei consumano memoria allocata alla tua funzione e talvolta rimangono tra le chiamate. Se non elimini questi file, potrebbe verificarsi un errore di esaurimento della memoria e attivare un avvio completo che aumenta i tempi di esecuzione e i costi.

App Engine

Questa sezione fornisce indicazioni per aiutarti a ottimizzare il costo delle risorse App Engine.

Oltre ai seguenti consigli, consulta i consigli generali discussi in precedenza:

  • Imposta il numero massimo di istanze in base al traffico e alla latenza della richiesta. App Engine di solito scala la capacità in base al traffico ricevuto dalle applicazioni. Puoi controllare i costi limitando il numero di istanze che App Engine può creare.
  • Per limitare la memoria o la CPU disponibili per l'applicazione, imposta una classe istanza. Per applicazioni ad alta intensità di CPU, alloca più CPU. Testa alcune configurazioni per determinare la dimensione ottimale.
  • Confronta il tuo carico di lavoro App Engine in più lingue di programmazione. Ad esempio, un carico di lavoro implementato in una lingua potrebbe richiedere meno istanze e un costo inferiore per completare le attività in tempo rispetto allo stesso carico di lavoro programmato in un'altra lingua.
  • Ottimizza per ridurre gli avvii a freddo. Quando possibile, riduci le attività che richiedono molta CPU o a lunga esecuzione nell'ambito globale. Prova a suddividere l'attività in operazioni più piccole che possono essere eseguite con "caricamento lento" nel contesto di una richiesta.
  • Se prevedi traffico intenso, configura un numero minimo di istanze inattive preriscaldate. Se non prevedi il traffico, puoi configurare le istanze inattive minime su zero.
  • Per bilanciare prestazioni e costi, esegui un test A/B suddividendo il traffico tra due versioni, ciascuna con una configurazione diversa. Monitora le prestazioni e i costi di ogni versione, ottimizzala in base alle esigenze e decidi la configurazione a cui inviare il traffico.
  • Configurare la richiesta di contemporaneità e impostare il numero massimo di richieste in parallelo al valore predefinito. Maggiore è il numero di richieste che ogni istanza può gestire contemporaneamente, più efficacemente puoi utilizzare le istanze esistenti per gestire il traffico.

Passaggi successivi