Questo documento illustra le best practice per ottimizzare i job Dataflow al fine di ridurre al minimo i costi. Spiega i fattori che influiscono sui costi e fornisce tecniche per monitorarli e gestirli.
Per ulteriori informazioni su come vengono calcolati i costi per i job Dataflow, consulta Prezzi di Dataflow.
Diversi fattori possono avere un grande impatto sul costo del job:
- Impostazioni di runtime
- Prestazioni della pipeline
- Requisiti di throughput della pipeline
Le sezioni che seguono forniscono dettagli su come monitorare i job, i fattori che influiscono sul costo dei job e suggerimenti su come migliorare l'efficienza della pipeline.
Definire 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 pipeline richiede una latenza di importazione end-to-end ridotta, 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, la pipeline potrebbe richiedere una capacità aggiuntiva, con un conseguente aumento dei costi.
Monitora i job
Per determinare come ottimizzare il job, devi prima comprenderne il comportamento. Utilizza gli strumenti di monitoraggio di 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 di dati. Per molte pipeline, questa tecnica può fornire un'estimativa dei costi.
- Utilizza la pagina Costo nell'interfaccia di monitoraggio di Dataflow per monitorare il costo stimato dei job. Il costo stimato potrebbe non riflettere il costo effettivo del job per vari motivi, ad esempio gli sconti contrattuali, ma può fornire una buona base di riferimento per l'ottimizzazione dei costi. Per ulteriori informazioni, consulta Monitoraggio dei costi.
- Esportare i dati di fatturazione Cloud in BigQuery ed eseguire un'analisi dei costi nelle tabelle di esportazione della fatturazione. L'esportazione della fatturazione Cloud consente di esportare automaticamente i dati di fatturazione dettagliati di Google Cloud 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 hai definito. Per ulteriori informazioni, consulta Utilizzare Cloud Monitoring per le pipeline Dataflow.
Monitoraggio dei job
Monitora i 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 dettagli di esecuzione per ogni pipeline. Entrambi questi strumenti possono aiutarti a comprendere la pipeline e identificare fasi lente, fasi bloccate o passaggi con troppo tempo di esecuzione.
- 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 i dati sul rendimento. - Per le pipeline che richiedono un'elevata intensità di risorse della 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 con i dati. Il campionamento dei dati ti consente di osservare i dati in ogni passaggio di una pipeline Dataflow. Poiché mostrano gli input e gli output effettivi di un job in esecuzione o completato, queste informazioni possono aiutarti a eseguire il debug dei problemi relativi alla pipeline.
Sconsigliamo di registrare le metriche di elaborazione per elemento nelle pipeline con volumi elevati, 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 in streaming o un job batch
- Il servizio utilizzato 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
- La 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 modalità almeno una volta)
Questa sezione descrive le potenziali modifiche che puoi apportare per ottimizzare il tuo job. Per determinare se questi suggerimenti sono appropriati per il tuo carico di lavoro, 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 ulteriori informazioni, consulta Eseguire piccoli esperimenti per job di grandi dimensioni in "Best practice per le pipeline con 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 dal job.
- Crea il bucket Cloud Storage per archiviare i file temporanei e di staging dei job nella stessa regione del job. Per ulteriori informazioni, consulta le opzioni della pipeline
gcpTempLocation
etemp_location
.
Modificare 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. Modifica il tipo di macchina come necessario in base ai requisiti della pipeline. Ad esempio, i job di streaming con pipeline che richiedono un'elevata intensità di CPU a volte traggono vantaggio dal cambio del tipo di macchina rispetto a quello predefinito. Per ulteriori informazioni, consulta Tipo di macchina.
- Per i carichi di lavoro che richiedono molta memoria o molta potenza di calcolo, utilizza i tipi di macchina appropriati. Per ulteriori informazioni, consulta I punteggi CoreMark delle VM per famiglia.
- Imposta il numero iniziale di worker. Quando un job viene scalato verso l'alto, il lavoro deve essere ridistribuito alle nuove VM. Se sai quanti worker sono necessari per i tuoi job,
puoi evitare questo costo impostando il numero iniziale di worker. Per impostare il numero iniziale di worker, utilizza l'opzione della pipeline
numWorkers
onum_workers
. - Imposta il numero massimo di worker. Impostando un valore per questo parametro, puoi potenzialmente limitare il costo totale del job. Quando provi la pipeline per la prima volta, inizia con un valore massimo relativamente basso. Poi aumenta il valore finché non è sufficientemente elevato per eseguire un carico di lavoro di produzione. Valuta gli SLO della pipeline prima di impostare un valore massimo. Per ulteriori informazioni, consulta Scalabilità automatica orizzontale.
- Alcune pipeline traggono vantaggio dall'utilizzo delle GPU. Per ulteriori informazioni, consulta GPU con Dataflow.
- Assicurati di disporre di larghezza di banda di rete sufficiente per accedere ai dati dalle VM di lavoro, 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 vengono eseguite in sequenza, il che può influire su prestazioni e costi.
Utilizzare la pianificazione flessibile delle risorse
Se il job batch non è urgente, puoi utilizzare la pianificazione flessibile delle risorse (FlexRS). FlexRS riduce i costi di elaborazione batch trovando il momento migliore per avviare il job, quindi 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, in modo da ridurre il costo totale. Utilizzando una combinazione di VM prerilasciabili e VM standard, FlexRS contribuisce ad assicurare che la pipeline avanzi 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 comporta un costo, pertanto l'esecuzione di meno job su più dati può migliorare l'efficienza.
Assicurati che la funzionalità Dataflow Shuffle sia attivata. Per impostazione predefinita, i job batch utilizzano l'ordinamento casuale di Dataflow.
Modificare le impostazioni di scalabilità automatica
Per impostazione predefinita, i job batch utilizzano la scalabilità automatica. Per alcuni job, ad esempio quelli di breve durata, la scalabilità automatica non è necessaria. Se ritieni che la tua pipeline non tragga vantaggio dalla scalabilità automatica, disattivala. Per ulteriori informazioni, consulta la sezione Scalabilità automatica orizzontale.
Puoi anche utilizzare la scalabilità dinamica dei thread per consentire a Dataflow di ottimizzare 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 della pipeline numberOfWorkerHarnessThreads
o number_of_worker_harness_threads
.
Interrompere i job a lunga esecuzione
Imposta i job in modo che si arrestino automaticamente se superano un tempo di esecuzione predeterminato. Se
sai approssimativamente quanto tempo impiega il job per essere eseguito, utilizza la
max_workflow_runtime_walltime_seconds
opzione di servizio
per interrompere automaticamente il job se l'esecuzione dura più del previsto.
Ottimizzare le impostazioni per i job di streaming
Questa sezione fornisce suggerimenti per ottimizzare le impostazioni di runtime per i job 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 tuoi job di streaming.
Valuta la modalità almeno una volta
Dataflow supporta due modalità per i job in streaming: la modalità Esattamente una volta e la modalità Almeno una volta. Se il tuo carico di lavoro può tollerare record duplicati, la modalità Almeno una volta può ridurre notevolmente il costo del job. Prima di attivare la modalità Almeno una volta, valuta se la tua pipeline richiede l'elaborazione esattamente una volta dei record. Per ulteriori informazioni, consulta Impostare la modalità di streaming della pipeline.
Scegli il tuo modello di determinazione dei prezzi
Gli sconti per impegno di utilizzo (CUD) per i job di streaming di Dataflow offrono prezzi scontati in cambio del tuo impegno a utilizzare continuamente una determinata quantità di risorse di calcolo di Dataflow per un anno o più. Gli sconti per impegno di utilizzo (CUD) di Dataflow sono utili quando la spesa per la capacità di calcolo di Dataflow per i job di streaming prevede un minimo prevedibile a cui puoi impegnarti per almeno un anno. Utilizzando le CUD, puoi potenzialmente ridurre il costo dei tuoi job Dataflow.
Valuta anche la possibilità di utilizzare la fatturazione basata sulle risorse. Con la fatturazione basata sulle risorse, le risorse di Streaming Engine consumate dal tuo job vengono misurate in unità di calcolo Streaming Engine. Ti vengono addebitate la CPU, la memoria e le unità di calcolo di Streaming Engine dei worker.
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 in streaming che utilizzano Streaming Engine, puoi aggiornare le impostazioni di ottimizzazione automatica senza interrompere o sostituire il job. Per ulteriori informazioni, consulta Aggiornamento dell'opzione di job in esecuzione.
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 della pipeline numberOfWorkerHarnessThreads
o number_of_worker_harness_threads
.
Interrompere i job a lunga esecuzione
Per i job di streaming, Dataflow riprova gli elementi di lavoro non riusciti indefinitamente. Il job non è stato terminato. Tuttavia, il job potrebbe bloccarsi finché il problema non viene risolto. Crea criteri di monitoraggio per rilevare i segni di una pipeline in stallo, ad esempio un aumento della latenza del sistema e una diminuzione della correttezza dei dati. Implementa la registrazione degli errori nel codice della pipeline per identificare gli elementi di lavoro che non vanno a buon fine ripetutamente.
- Per monitorare gli errori della pipeline, consulta Conteggio log errori del worker.
- Per risolvere gli errori, consulta la sezione Risolvere gli errori di Dataflow.
Prestazioni della pipeline
Le pipeline che funzionano più velocemente potrebbero avere un costo inferiore. 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:
- Scopri di più sul modello Apache Beam e sul modello di esecuzione Apache Beam.
- Scopri di più sul ciclo di vita della pipeline, incluso come Dataflow gestisce la parallellizzazione e le strategie di ottimizzazione che utilizza. I job Dataflow utilizzano più VM worker e ogni worker esegue più thread. I bundle di elementi di un
PCollection
vengono distribuiti a ogni thread di lavoro.
Segui queste best practice quando scrivi il codice della pipeline:
- Se possibile, utilizza la versione dell'SDK Apache Beam supportata più recente. Consulta le note di rilascio per comprendere le modifiche nelle diverse versioni.
- Segui le best practice per la scrittura del codice della pipeline.
- Segui le best practice per i connettori di I/O.
- Per le pipeline Python, ti consigliamo di utilizzare container personalizzati. Le dipendenze pre-pacchettizzate riducono il tempo di avvio del worker.
Logging
Segui queste best practice per i log:
- Un logging eccessivo può influire negativamente sulle prestazioni.
- Per ridurre il volume dei log, valuta la possibilità di modificare il livello di log della pipeline. Per ulteriori informazioni, consulta Controllare il volume dei log.
- Non registrare i singoli elementi. Attiva invece il campionamento dei dati.
- Utilizza un pattern di casella morto per gli errori per elemento, anziché registrare ogni errore.
Test
Il test della pipeline offre molti vantaggi, tra cui 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'elevata intensità di risorse della CPU, possono essere testate localmente senza dover eseguire un job su Dataflow.
Testa le pipeline su larga scala con dati di test realistici per il tuo carico di lavoro, tra cui il numero totale di elementi per le pipeline batch, il numero di elementi al secondo per le pipeline in streaming, le dimensioni degli elementi e il numero di chiavi. Testa le tue pipeline in due modalità: in uno stato stabile e durante l'elaborazione di un backlog elevato per simulare un recupero da arresto anomalo.
Per ulteriori informazioni sulla creazione di test di unità, test di integrazione e test end-to-end, consulta Eseguire il test della pipeline.
Per esempi di test, consulta il
dataflow-ordered-processing
repository GitHub.
Passaggi successivi
- Pianifica la pipeline Dataflow
- Sviluppare e testare le pipeline Dataflow
- Risolvere i problemi relativi alle pipeline