Best practice per l'ottimizzazione dei costi di Dataflow

Questo documento spiega le best practice per ottimizzare i job Dataflow con l'obiettivo di ridurre al minimo i costi. Spiega i fattori che influiscono sui costi e fornisce tecniche per monitorare e gestire questi costi.

Per ulteriori informazioni su come vengono calcolati i costi per i job Dataflow, consulta Prezzi di Dataflow.

Diversi fattori possono avere un impatto significativo sul costo del lavoro:

  • Impostazioni di runtime
  • Prestazioni della pipeline
  • Requisiti di throughput della pipeline

Le sezioni che seguono forniscono dettagli su come monitorare i job, sui fattori che influiscono sul costo dei job e suggerimenti su come migliorare l'efficienza della pipeline.

Definisci gli SLO

Prima di iniziare l'ottimizzazione, definisci gli obiettivi del livello di servizio (SLO) della pipeline, in particolare per il throughput e la latenza. Questi requisiti ti aiuteranno a valutare i compromessi tra costi e altri fattori.

  • Se la tua pipeline richiede una bassa latenza di importazione end-to-end, i costi della pipeline potrebbero essere più elevati.
  • Se devi elaborare dati in ritardo, il costo complessivo della pipeline potrebbe essere più elevato.
  • Se la pipeline di streaming presenta picchi di dati che devono essere elaborati, potrebbe essere necessaria una capacità aggiuntiva, il che può aumentare i costi.

Monitorare i job

Per determinare come ottimizzare il job, devi prima comprenderne il comportamento. Utilizza gli strumenti di monitoraggio Dataflow per osservare la pipeline durante l'esecuzione. Poi utilizza queste informazioni per migliorare il rendimento e l'efficienza.

Monitoraggio dei costi

Utilizza le seguenti tecniche per prevedere e monitorare i costi.

  • Prima di eseguire la pipeline in produzione, esegui uno o più job più piccoli su un sottoinsieme dei tuoi dati. Per molte pipeline, questa tecnica può fornire una stima dei costi.
  • Utilizza la pagina Costo nell'interfaccia di monitoraggio Dataflow per monitorare il costo stimato dei tuoi job. Il costo stimato potrebbe non riflettere il costo effettivo del job per vari motivi, ad esempio sconti contrattuali, ma può fornire una buona base di riferimento per l'ottimizzazione dei costi. Per ulteriori informazioni, consulta Monitoraggio dei costi.
  • Esporta i dati di fatturazione Cloud in BigQuery ed esegui un'analisi dei costi nelle tabelle di esportazione della fatturazione. L'esportazione della fatturazione Cloud ti consente di esportare automaticamente dati di fatturazione Google Cloud dettagliati durante la giornata in un set di dati BigQuery. I dati di fatturazione includono utilizzo, stime dei costi e dati sui prezzi.
  • Per evitare costi imprevisti, crea avvisi di monitoraggio quando il job Dataflow supera una soglia che definisci. Per ulteriori informazioni, consulta Utilizzare Cloud Monitoring per le pipeline Dataflow.

Monitoraggio dei job

Monitora i tuoi job e identifica le aree in cui potresti migliorare l'efficienza della pipeline.

  • Utilizza l'interfaccia di monitoraggio dei job di Dataflow per identificare i problemi nelle pipeline. L'interfaccia di monitoraggio mostra un grafico dei job e i dettagli di esecuzione per ogni pipeline. Entrambi questi strumenti possono aiutarti a comprendere la tua pipeline e a identificare le fasi lente, quelle bloccate o i passaggi con un tempo di esecuzione troppo lungo.
  • Utilizza Metrics Explorer per visualizzare le metriche dettagliate dei job Dataflow. Puoi utilizzare le metriche personalizzate per acquisire i dati sul rendimento. La metrica Distribution è particolarmente utile per raccogliere dati sul rendimento.
  • Per le pipeline che utilizzano molta CPU, utilizza Cloud Profiler per identificare le parti del codice della pipeline che consumano più risorse.
  • Utilizza il campionamento dei dati per identificare i problemi relativi ai dati. Il campionamento dei dati consente di osservare i dati in ogni passaggio di una pipeline Dataflow. Mostrando gli input e gli output effettivi in un job in esecuzione o completato, queste informazioni possono aiutarti a eseguire il debug dei problemi relativi alla pipeline.
  • Personalizza la dashboard di monitoraggio del progetto per mostrare i job potenzialmente costosi. Per ulteriori informazioni, consulta Personalizzare la dashboard di monitoraggio di Dataflow.

Non è consigliabile registrare le metriche di elaborazione per elemento in pipeline ad alto volume, perché la registrazione è soggetta a limiti e una registrazione eccessiva può peggiorare le prestazioni del job.

Ottimizzare le impostazioni di runtime

Le seguenti impostazioni di runtime possono influire sul costo:

  • Se esegui un job di streaming o un job batch
  • Il servizio che utilizzi per eseguire il job, ad esempio Streaming Engine o FlexRS
  • Il tipo di macchina, le dimensioni del disco e il numero di GPU nelle VM worker
  • Modalità di scalabilità automatica
  • Il numero iniziale di worker e il numero massimo di worker
  • La modalità flusso di dati (modalità esattamente una volta o almeno una volta)

Questa sezione descrive le potenziali modifiche che puoi apportare per ottimizzare il job. Per determinare se questi suggerimenti sono appropriati per il tuo workload, considera la progettazione e i requisiti della pipeline. Non tutti i suggerimenti sono appropriati o utili per tutte le pipeline.

Prima di apportare modifiche su larga scala, testa le modifiche su piccole pipeline che utilizzano un sottoinsieme dei tuoi dati. Per saperne di più, consulta la sezione Esegui piccoli esperimenti per job di grandi dimensioni in "Best practice per pipeline batch di grandi dimensioni".

Località del lavoro

La maggior parte dei job Dataflow interagisce con altri servizi, come datastore e sistemi di messaggistica. Considera dove si trovano.

  • Esegui il job nella stessa regione delle risorse utilizzate.
  • Crea il bucket Cloud Storage per archiviare i file temporanei e di staging dei job nella stessa regione del job. Per saperne di più, consulta le gcpTempLocation e temp_location opzioni della pipeline.

Modifica i tipi di macchina

I seguenti aggiustamenti alle VM worker potrebbero migliorare l'efficienza in termini di costi.

  • Esegui il job con il tipo di macchina più piccolo richiesto. Regola il tipo di macchina in base alle esigenze della pipeline. Ad esempio, i job di streaming con pipeline che richiedono un utilizzo intensivo della CPU a volte traggono vantaggio dalla modifica del tipo di macchina rispetto a quello predefinito. Per saperne di più, consulta Tipo di macchina.
  • Per i carichi di lavoro che richiedono molta memoria o potenza di calcolo, utilizza i tipi di macchina appropriati. Per ulteriori informazioni, consulta Punteggi CoreMark delle VM per famiglia.
  • Imposta il numero iniziale di worker. Quando un job viene scalato, il lavoro deve essere ridistribuito alle nuove VM. Se sai di quanti worker hanno bisogno i tuoi job, puoi evitare questo costo impostando il numero iniziale di worker. Per impostare il numero iniziale di worker, utilizza l'opzione pipeline numWorkers o num_workers.
  • Imposta il numero massimo di worker. Impostando un valore per questo parametro, puoi potenzialmente limitare il costo totale del job. Quando testi per la prima volta la pipeline, inizia con un valore massimo relativamente basso. Aumenta il valore finché non è sufficiente per eseguire un carico di lavoro di produzione. Considera gli SLO della pipeline prima di impostare un valore massimo. Per saperne di più, consulta la sezione Scalabilità automatica orizzontale.
  • Utilizza l'adattamento giusto per personalizzare i requisiti di risorse per passaggi specifici della pipeline.
  • Alcune pipeline traggono vantaggio dall'utilizzo delle GPU. Per ulteriori informazioni, consulta GPU con Dataflow. Utilizzando il dimensionamento ottimale, puoi configurare le GPU per passaggi specifici della pipeline.
  • Assicurati di avere una larghezza di banda di rete sufficiente per accedere ai dati dalle VM worker, in particolare quando devi accedere ai dati on-premise.

Ottimizzare le impostazioni per i job batch

Questa sezione fornisce suggerimenti per ottimizzare le impostazioni di runtime per i job batch. Per i job batch, le fasi del job vengono eseguite in sequenza, il che può influire su prestazioni e costi.

Utilizzare la pianificazione flessibile delle risorse

Se il tuo job batch non è sensibile al tempo, valuta la possibilità di utilizzare Flexible Resource Scheduling (FlexRS). FlexRS riduce i costi di elaborazione batch trovando il momento migliore per avviare il job e utilizzando una combinazione di istanze di VM prerilasciabili e VM standard. Le VM prerilasciabili sono disponibili a un prezzo molto inferiore rispetto alle VM standard, il che può ridurre il costo totale. Utilizzando una combinazione di VM prerilasciabili e standard, FlexRS contribuisce a garantire che la pipeline progredisca anche se Compute Engine prerilascia le VM prerilasciabili.

Evita di eseguire job molto piccoli

Se possibile, evita di eseguire job che elaborano quantità molto piccole di dati. Se possibile, esegui meno job su set di dati più grandi. L'avvio e l'arresto delle VM worker comportano un costo, quindi l'esecuzione di meno job su più dati può migliorare l'efficienza.

Assicurati che Dataflow Shuffle sia abilitato. I job batch utilizzano Dataflow Shuffle per impostazione predefinita.

Modificare le impostazioni di scalabilità automatica

Per impostazione predefinita, i job batch utilizzano la scalabilità automatica. Per alcuni job, ad esempio quelli a esecuzione breve, la scalabilità automatica non è necessaria. Se ritieni che la tua pipeline non tragga vantaggio dalla scalabilità automatica, disattivala. Per ulteriori informazioni, consulta Scalabilità automatica orizzontale.

Puoi anche utilizzare la scalabilità dinamica dei thread per consentire a Dataflow di regolare il numero di thread in base all'utilizzo della CPU. In alternativa, se conosci il numero ottimale di thread per il job, imposta esplicitamente il numero di thread per worker utilizzando l'opzione pipeline numberOfWorkerHarnessThreads o number_of_worker_harness_threads.

Arrestare i job di lunga durata

Imposta l'interruzione automatica dei job se superano un tempo di esecuzione predeterminato. Se sai approssimativamente quanto tempo impiega il tuo job per essere eseguito, utilizza l'opzione di servizio max_workflow_runtime_walltime_seconds per arrestare automaticamente il job se viene eseguito più a lungo del previsto.

Ottimizzare le impostazioni per i job di streaming

Questa sezione fornisce suggerimenti per ottimizzare le impostazioni di runtime per i job di streaming.

Utilizzare Streaming Engine

Streaming Engine trasferisce l'esecuzione della pipeline dalle VM worker al backend del servizio Dataflow per una maggiore efficienza. Ti consigliamo di utilizzare Streaming Engine per i job di streaming.

Considera la modalità at-least-once

Dataflow supporta due modalità per i job di streaming: la modalità exactly-once e la modalità at-least-once. Se il tuo carico di lavoro può tollerare record duplicati, la modalità almeno una volta può ridurre significativamente il costo del job. Prima di attivare la modalità almeno una volta, valuta se la pipeline richiede l'elaborazione esattamente una volta dei record. Per saperne di più, vedi Impostare la modalità di streaming della pipeline.

Scegliere il modello di prezzi

Gli sconti per impegno di utilizzo (CUD) per i job di streaming Dataflow offrono prezzi scontati in cambio dell'impegno a utilizzare continuamente una determinata quantità di risorse di calcolo Dataflow per un anno o più. I CUD per Dataflow sono utili quando la spesa per la capacità di calcolo di Dataflow per i job di streaming comporta un minimo prevedibile a cui puoi impegnarti per almeno un anno. Utilizzando gli sconti per utilizzo continuo, puoi potenzialmente ridurre il costo dei tuoi job Dataflow.

Valuta anche l'utilizzo della fatturazione basata sulle risorse. Con la fatturazione basata sulle risorse, le risorse Streaming Engine utilizzate dal tuo job vengono misurate e conteggiate in unità di calcolo Streaming Engine. Ti vengono addebitati i costi per la CPU del worker, la memoria del worker e le unità di calcolo di Streaming Engine.

Modificare le impostazioni di scalabilità automatica

Utilizza i suggerimenti per la scalabilità automatica per ottimizzare le impostazioni di scalabilità automatica. Per ulteriori informazioni, consulta Ottimizzare la scalabilità automatica orizzontale per le pipeline di streaming. Per i job di streaming che utilizzano Streaming Engine, puoi aggiornare le impostazioni di ottimizzazione automatica senza interrompere o sostituire il job. Per saperne di più, vedi Aggiornamento dell'opzione del job in corso.

Se ritieni che la tua pipeline non tragga vantaggio dalla scalabilità automatica, disattivala. Per ulteriori informazioni, consulta Scalabilità automatica orizzontale.

Se conosci il numero ottimale di thread per il job, imposta esplicitamente il numero di thread per worker utilizzando l'opzione pipeline numberOfWorkerHarnessThreads o number_of_worker_harness_threads.

Arrestare i job di lunga durata

Per i job di streaming, Dataflow esegue nuovi tentativi per gli elementi di lavoro non riusciti indefinitamente. Il job non è terminato. Tuttavia, il job potrebbe bloccarsi finché il problema non viene risolto. Crea criteri di monitoraggio per rilevare i segni di una pipeline bloccata, ad esempio un aumento della latenza del sistema e una diminuzione della frequenza di aggiornamento dei dati. Implementa la registrazione degli errori nel codice della pipeline per identificare gli elementi di lavoro che non vanno a buon fine ripetutamente.

Prestazioni della pipeline

Le pipeline che vengono eseguite più velocemente potrebbero costare meno. I seguenti fattori possono influire sul rendimento della pipeline:

  • Il parallelismo disponibile per il job
  • L'efficienza delle trasformazioni, dei connettori I/O e dei codificatori utilizzati nella pipeline
  • La posizione dei dati

Il primo passo per migliorare le prestazioni della pipeline è comprendere il modello di elaborazione:

Segui queste best practice quando scrivi il codice della pipeline:

Logging

Segui queste best practice durante la registrazione:

Test

Il test della pipeline offre molti vantaggi, tra cui l'assistenza per gli upgrade dell'SDK, il refactoring della pipeline e le revisioni del codice. Molte ottimizzazioni, come la rielaborazione di trasformazioni personalizzate che richiedono un uso intensivo della CPU, possono essere testate localmente senza dover eseguire un job su Dataflow.

Testa pipeline su larga scala con dati di test realistici per il tuo carico di lavoro, inclusi il numero totale di elementi per le pipeline batch, il numero di elementi al secondo per le pipeline di streaming, le dimensioni degli elementi e il numero di chiavi. Testa le tue pipeline in due modalità: in uno stato stazionario e durante l'elaborazione di un backlog di grandi dimensioni per simulare un ripristino in caso di arresto anomalo.

Per ulteriori informazioni sulla creazione di test unitari, test di integrazione e test end-to-end, vedi Testare la pipeline. Per esempi di test, consulta il repository GitHub dataflow-ordered-processing.

Passaggi successivi