Ottimizza i 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 i costi delle tue macchine virtuali (VM), dei container e delle risorse serverless in Google Cloud.

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

Le risorse di calcolo sono la parte più importante dell'infrastruttura cloud. Quando esegui la migrazione dei tuoi carichi di lavoro in Google Cloud, in genere la prima scelta è Compute Engine, che consente di eseguire il provisioning e la gestione delle VM in modo efficiente nel cloud. Compute Engine offre un'ampia 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 consentono di eseguire il provisioning di VM che offrono una capacità di calcolo simile a quella dell'infrastruttura on-premise, consentendoti di accelerare il processo di migrazione. Compute Engine ti offre il vantaggio di pagare solo per l'infrastruttura che utilizzi e offre 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 di eventi).

Oltre ai suggerimenti generali, questo documento fornisce indicazioni per aiutarti a ottimizzare il costo delle risorse di computing quando utilizzi i seguenti prodotti:

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

Consigli generali

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

Monitorare l'utilizzo e i costi

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

Controlla il provisioning delle risorse

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

  • Per garantire che il consumo e il costo delle risorse non superino la previsione, utilizza le quotas delle risorse.
  • Esegui il provisioning delle risorse nella regione a basso costo 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.

Usufruisci di sconti per impegno di utilizzo

Gli sconti per impegno di utilizzo (CUD) sono ideali per i carichi di lavoro con esigenze prevedibili in termini di risorse. Dopo aver eseguito la migrazione del carico di lavoro a Google Cloud, trova la base di riferimento per le risorse richieste e ricevi sconti maggiori per l'utilizzo per impegno di utilizzo. Ad esempio, acquista un impegno di uno o tre anni e ricevi 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:

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

  • Per un'applicazione con diversi 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 tuoi report di fatturazione Cloud impostando i filtri richiesti e raggruppando i dati in base alle esigenze (ad esempio per progetti, servizi o etichette).

Promuovi una cultura del risparmio sui costi

Forma gli sviluppatori e gli operatori sulla tua infrastruttura cloud. Crea e promuovi programmi di apprendimento utilizzando corsi convenzionali o online, gruppi di discussione, revisioni di pari, programmazione di accoppiamento e giochi economici. Come dimostrato nella ricerca DORA di Google, la cultura organizzativa è un fattore chiave per migliorare le prestazioni, ridurre il rilavoramento e il burnout e ottimizzare i costi. Offrendo visibilità ai dipendenti, puoi aiutarli ad allineare le priorità e le attività agli scopi e ai vincoli aziendali.

Compute Engine

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

Informazioni sul modello di fatturazione

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

Analizza il consumo delle risorse

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

Recupera risorse inattive

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

  • Utilizza il motore per suggerimenti VM inattive per identificare le VM non attive e i dischi permanenti in base alle metriche di utilizzo.
  • Prima di eliminare le risorse, valuta il potenziale impatto dell'azione e pianifica di ricrearle, se necessario.
  • Prima di eliminare una VM, ti consigliamo di creare uno snapshot. Quando elimini una VM, i dischi collegati vengono eliminati, a meno che tu non abbia selezionato l'opzione Conserva disco.
  • Se possibile, valuta la possibilità di arrestare le VM anziché eliminarle. Quando arresti una VM, l'istanza viene terminata, ma i dischi e gli indirizzi IP vengono conservati finché non li scolleghi o li elimini.
  • Quando vuoi sospendere la fatturazione per le risorse della CPU allocate a una VM inattiva, ma non vuoi eliminare o arrestare la VM, puoi sospendere la VM e poi riprenderla quando necessario. Questa opzione può essere utile per i carichi di lavoro in cui le attività di inizializzazione o avvio richiedono molto tempo.

Regola la capacità per soddisfare la 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 potenzialmente ridurre i costi del 75% arrestandola durante le 128 ore della settimana in cui non è in uso.

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 utilizzo della CPU o capacità di bilanciamento del carico).

Scegli tipi di macchina appropriati

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

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

Per i carichi di lavoro di elaborazione batch a tolleranza di errore, valuta 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 sulle VM spot. Per un esempio di come Descartes Labs abbia ridotto i costi di analisi utilizzando VM prerilasciabili (la versione precedente delle VM spot) per l'elaborazione delle 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 in Google Cloud, potresti riuscire a ridurre i costi applicando il modello BYOL (Bring Your Own License). Ad esempio, per eseguire il deployment delle VM di 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. Quindi paghi solo per l'infrastruttura VM che utilizzi su Google Cloud. Questa strategia ti consente di continuare a trarre valore dagli investimenti esistenti in licenze di terze parti.

Se decidi di utilizzare un approccio BYOL, ti consigliamo di seguire questi passaggi:

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

Se i tuoi carichi di lavoro di terze parti richiedono hardware dedicato per soddisfare i requisiti di sicurezza o conformità, puoi utilizzare le tue licenze nei nodi single-tenant.

Google Kubernetes Engine

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

Oltre ai seguenti, 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 bin packing o calcolare la capacità necessaria per i carichi di lavoro.
  • Perfeziona 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 ottimizzazione-utilizzo di scalabilità automatica per contribuire a migliorare l'utilizzo del cluster.
  • Utilizza il provisioning automatico dei nodi per estendere il gestore della scalabilità automatica dei cluster GKE e per creare ed eliminare in modo efficiente pool di nodi in base alle specifiche dei pod in attesa senza overprovisioning.
  • Usa pool di nodi separati: un pool di nodi statico per carico statico e pool di nodi dinamici con gruppi di scalabilità automatica dei cluster per 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 ti aiuta a garantire che il pool di nodi con VM a costo inferiore (in questo caso, il pool di nodi con VM spot) venga scalato per primo.
  • Scegli tipi di macchine convenienti (ad esempio: E2, N2D, T2D), che garantiscono un aumento del 20-40% in termini di prestazioni rispetto al prezzo.
  • Utilizza la misurazione dell'utilizzo di GKE per analizzare i profili di utilizzo dei tuoi cluster per spazi dei nomi ed etichette. Identifica il team o l'applicazione che sta spendendo di più, l'ambiente o il componente che ha causato picchi di utilizzo o dei costi e il team che sta sprecando risorse.
  • Utilizza le quote delle risorse nei cluster multi-tenant per impedire a qualsiasi tenant di utilizzare una quota di risorse del cluster superiore a quella assegnata.
  • Pianifica il downscaling 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, consulta i consigli generali discussi in precedenza:

  • Modifica l'impostazione relativa alla 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 preservare le prestazioni, ovvero 130 istanze per 100 secondi di traffico.
  • Per ridurre l'impatto degli avvii a freddo, configura un numero minimo di istanze. Quando queste istanze sono inattive, vengono fatturate a un decimo del prezzo.
  • Monitora l'utilizzo della CPU e regola i limiti della CPU di conseguenza.
  • Utilizza la gestione del traffico per determinare una configurazione ottimale per i costi.
  • Valuta la possibilità di utilizzare 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ù regioni, perché il trasferimento di dati tra continenti può essere costoso. Questa struttura è consigliata se utilizzi un bilanciatore del carico e una rete CDN.
  • Riduci i tempi di avvio per le tue istanze, poiché anche il tempo di avvio è 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, consulta i consigli generali discussi in precedenza:

  • Osserva il tempo di esecuzione delle tue funzioni. Sperimenta e analizza la funzione più piccola che soddisfi la soglia di prestazioni richiesta.
  • Se i carichi di lavoro di Cloud Functions sono eseguiti costantemente, ti consigliamo di utilizzare GKE o Compute Engine per la gestione dei carichi di lavoro. I container o le VM potrebbero essere opzioni più economiche per carichi di lavoro sempre in esecuzione.
  • Limita il numero di istanze di funzione che possono coesistere.
  • Confronta le prestazioni di runtime dei linguaggi di programmazione di Cloud Functions con il carico di lavoro della tua funzione. I programmi nei linguaggi compilati hanno avvii a freddo più lunghi, ma vengono eseguiti più velocemente. I programmi nei linguaggi interpretati sono più lenti, ma hanno un overhead di avvio a freddo inferiore. Le funzioni brevi eseguite di frequente potrebbero avere un costo minore in un linguaggio interpretato.
  • Elimina i file temporanei scritti sul disco locale, che è un file system in memoria. I file temporanei consumano memoria allocata alla funzione e, a volte, rimangono invariati tra una chiamata e l'altra. Se non elimini questi file, potrebbe verificarsi un errore di esaurimento della memoria e attivare un avvio a freddo, che aumenta il tempo e i costi di esecuzione.

App Engine

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

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

  • Imposta il numero massimo di istanze in base al traffico e alla latenza delle richieste. In genere App Engine 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 disponibile per la tua applicazione, imposta una classe di istanza. Per le applicazioni che consumano molta CPU, alloca più CPU. Prova alcune configurazioni per determinare la dimensione ottimale.
  • Confronta il tuo carico di lavoro App Engine con diversi linguaggi di programmazione. Ad esempio, un carico di lavoro implementato in una lingua potrebbe richiedere meno istanze e costi inferiori per completare le attività in tempo rispetto allo stesso carico di lavoro programmato in un altro linguaggio.
  • Ottimizza per meno avvii a freddo. Se possibile, riduci le attività che richiedono un uso intensivo della CPU o le attività a lunga esecuzione che si verificano in ambito globale. Prova a suddividere l'attività in operazioni più piccole che possono essere caricate tramite caricamento lento nel contesto di una richiesta.
  • Se prevedi del traffico intenso, configura un numero minimo di istanze inattive in preparazione. Se non prevedi del traffico, puoi configurare il numero minimo di istanze inattive impostandole 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, apporta le modifiche necessarie e decidi la configurazione a cui inviare il traffico.
  • Configura la contemporaneità delle richieste e imposta il numero massimo di richieste in parallelo superiore a quello predefinito. Maggiore è il numero di richieste che ogni istanza è in grado di gestire contemporaneamente, più efficiente potrai utilizzare le istanze esistenti per gestire il traffico.

Passaggi successivi