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 impatto significativo sul costo del job:
- Impostazioni runtime
- Prestazioni della pipeline
- Requisiti di velocità effettiva della pipeline
Le sezioni che seguono forniscono dettagli su come monitorare i job, sui fattori che influiscono sul costo del 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 la velocità effettiva e la latenza. Questi requisiti ti aiuteranno a ragionare sui compromessi tra costo e altri fattori.
- Se la pipeline richiede una bassa latenza di importazione end-to-end, i costi della pipeline potrebbero essere più elevati.
- Se devi elaborare i dati in arrivo in ritardo, il costo complessivo della pipeline potrebbe essere più elevato.
- Se la pipeline in modalità flusso presenta picchi di dati che devono essere elaborati, potrebbe essere necessaria una capacità aggiuntiva, che può aumentare i costi.
Monitorare i job
Per determinare come ottimizzare un job, devi prima comprenderne il comportamento. Utilizza gli strumenti di monitoraggio di Dataflow per osservare la pipeline durante l'esecuzione. Quindi, utilizza queste informazioni per migliorare le prestazioni 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 dati. Per molte pipeline, questa tecnica può fornire una stima 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 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 sulle tabelle di esportazione della fatturazione. L'esportazione della fatturazione Cloud ti consente di esportare dati di fatturazione dettagliati Google Cloud automaticamente durante la giornata in un set di dati BigQuery. I dati di fatturazione includono dati relativi a utilizzo, stime dei costi e prezzi.
- Per evitare costi imprevisti, crea avvisi di monitoraggio quando il job Dataflow supera una soglia da te definita. 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 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 a identificare le fasi lente, le fasi bloccate o i passaggi con un tempo totale di esecuzione eccessivo.
- Utilizza Esplora metriche per visualizzare le metriche dettagliate dei job Dataflow. Puoi utilizzare metriche personalizzate per acquisire i dati sul rendimento. La metrica
Distributionè particolarmente utile per raccogliere i dati sul rendimento. - Per le pipeline ad alta intensità di 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 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 della 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 nelle pipeline ad alto volume , perché la registrazione è soggetta a limiti e una registrazione eccessiva può peggiorare il rendimento del job.
Ottimizzare le impostazioni di runtime
Le seguenti impostazioni di runtime possono influire sul costo:
- Se esegui un job in modalità flusso o un job batch
- Il servizio che utilizzi per eseguire il job, ad esempio Streaming Engine o FlexRS
- Il tipo di macchina, la dimensione 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 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, prova le modifiche su pipeline di piccole dimensioni che utilizzano un sottoinsieme dei dati. Per ulteriori informazioni, consulta Eseguire piccoli esperimenti per job di grandi dimensioni in "Best practice per pipeline batch di grandi dimensioni".
Località del job
La maggior parte dei job Dataflow interagisce con altri servizi come datastore e sistemi di messaggistica. Considera la loro posizione.
- Esegui il job nella stessa regione delle risorse utilizzate.
- Crea il bucket Cloud Storage per l'archiviazione dei file di gestione temporanea e temporanei del job nella stessa regione del job. Per ulteriori informazioni, consulta le opzioni della pipeline
gcpTempLocationetemp_location.
Regolare i tipi di macchine
Le seguenti modifiche alle VM worker potrebbero migliorare l'efficienza dei 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 in modalità flusso con pipeline ad alta intensità di CPU a volte traggono vantaggio dalla modifica del tipo di macchina rispetto a quello predefinito. Per ulteriori informazioni, consulta Tipo di macchina.
- Per i workload ad alta intensità di memoria o di calcolo, utilizza i tipi di macchine appropriati. Per ulteriori informazioni, consulta Punteggi CoreMark delle VM in base alla famiglia.
- Imposta il numero iniziale di worker. Quando un job viene scalato orizzontalmente, il lavoro deve essere ridistribuito alle nuove VM. Se conosci il numero di worker necessari per i job, puoi evitare questo costo impostando il numero iniziale di worker. Per impostare
il numero iniziale di worker, utilizza l'opzione della pipeline
numWorkersonum_workers. - Imposta il numero massimo di worker. Impostando un valore per questo parametro, puoi potenzialmente limitare il costo totale del job. Quando testi la pipeline per la prima volta, inizia con un massimo relativamente basso. Quindi, aumenta il valore finché non è sufficientemente alto da eseguire un workload di produzione. Prima di impostare un valore massimo, considera gli SLO della pipeline. Per ulteriori informazioni, consulta Scalabilità orizzontale automatica.
- Utilizza la funzionalità di dimensionamento corretto per personalizzare i requisiti delle risorse per passaggi specifici della pipeline.
- Alcune pipeline traggono vantaggio dall'utilizzo delle GPU. Per ulteriori informazioni, consulta GPU con Dataflow. Utilizzando la funzionalità di dimensionamento corretto, 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 l'ottimizzazione delle impostazioni di runtime per i job batch. Per i job batch, le fasi del job vengono eseguite in sequenza, il che può influire sul rendimento e sul costo.
Utilizzare la pianificazione flessibile delle risorse
Se il job batch non è sensibile al tempo, valuta la possibilità di utilizzare la pianificazione flessibile delle risorse (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 esegue il prerilascio delle VM prerilasciabili.
Evitare di eseguire job molto piccoli
Quando possibile, evita di eseguire job che elaborano quantità di dati molto piccole. 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. Per impostazione predefinita, i job batch utilizzano Dataflow Shuffle.
Regolare le impostazioni di scalabilità automatica
Per impostazione predefinita, i job batch utilizzano la scalabilità automatica. Per alcuni job, ad esempio i job a esecuzione breve, la scalabilità automatica non è necessaria. Se ritieni che la pipeline non tragga vantaggio dalla scalabilità automatica, disattivala. Per ulteriori informazioni, consulta Scalabilità orizzontale automatica.
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'
numberOfWorkerHarnessThreads o number_of_worker_harness_threads
opzione della pipeline.
Arrestare i job a esecuzione prolungata
Imposta i job in modo che si arrestino automaticamente se superano un tempo di esecuzione predeterminato. Se
conosci approssimativamente il tempo di esecuzione del job, utilizza l'
max_workflow_runtime_walltime_seconds
opzione del servizio
per arrestare automaticamente il job se viene eseguito più a lungo del previsto.
Ottimizzare le impostazioni per i job in modalità flusso
Questa sezione fornisce suggerimenti per l'ottimizzazione delle impostazioni di runtime per i job in modalità flusso.
Utilizzare Streaming Engine
Streaming Engine trasferisce l'esecuzione della pipeline dalle VM worker al backend del servizio Dataflow per una maggiore efficienza. È consigliabile utilizzare Streaming Engine per i job in modalità flusso.
Considerare la modalità Almeno una volta
Dataflow supporta due modalità per i job in modalità flusso: la modalità Esattamente una volta e la modalità Almeno una volta. Se il tuo workload può tollerare i 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 ulteriori informazioni, consulta Impostare la modalità flusso di dati della pipeline.
Scegliere il modello di prezzi
Gli sconti per impegno di utilizzo (CUD) per i job in modalità flusso di Dataflow offrono prezzi scontati in cambio dell'impegno a utilizzare continuamente una determinata quantità di risorse di calcolo di Dataflow per un anno o più. I CUD di Dataflow sono utili quando la spesa per la capacità di calcolo di Dataflow per i job in modalità flusso comporta un minimo prevedibile a cui puoi impegnarti per almeno un anno. Utilizzando i CUD, puoi potenzialmente ridurre il costo dei job Dataflow.
Valuta anche la possibilità di utilizzare la fatturazione basata sulle risorse. Con la fatturazione basata sulle risorse, le risorse di Streaming Engine utilizzate dal tuo job vengono misurate e misurate in unità di calcolo di Streaming Engine. Ti vengono addebitati i costi per la CPU worker, la memoria worker e le unità di calcolo di Streaming Engine.
Regolare 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à orizzontale automatica per le pipeline in modalità flusso. Per i job in modalità flusso che utilizzano Streaming Engine, puoi aggiornare le impostazioni di ottimizzazione automatica senza arrestare o sostituire il job. Per ulteriori informazioni, consulta Aggiornamento dell'opzione del job in transito.
Se ritieni che la pipeline non tragga vantaggio dalla scalabilità automatica, disattivala. Per ulteriori informazioni, consulta Scalabilità orizzontale automatica.
Se conosci il numero ottimale di thread per il job, imposta esplicitamente il
numero di thread per worker utilizzando numberOfWorkerHarnessThreads o
number_of_worker_harness_threads
l'opzione della pipeline.
Arrestare i job a esecuzione prolungata
Per i job in modalità flusso, Dataflow ritenta indefinitamente gli elementi di lavoro non riusciti. Il job non viene terminato. Tuttavia, il job potrebbe bloccarsi finché il problema non viene risolto. Crea policy di monitoraggio per rilevare i segni di una pipeline bloccata, come un aumento della latenza del sistema e una diminuzione dell'aggiornamento dei dati. Implementa la registrazione degli errori nel codice della pipeline per identificare gli elementi di lavoro che non riescono ripetutamente.
- Per monitorare gli errori della pipeline, consulta Conteggio log errori del worker.
- Per risolvere gli errori, consulta Risolvere i problemi relativi a Dataflow.
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 di I/O e dei codificatori utilizzati nella pipeline
- La località dei dati
Il primo passo per migliorare il rendimento 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 il modo in cui Dataflow gestisce la parallelizzazione 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 una
PCollectionvengono distribuiti a ogni thread di lavoro.
Segui queste best practice quando scrivi il codice della pipeline:
- Quando possibile, utilizza la versione più recente dell'SDK Apache Beam supportata Apache Beam SDK version. Consulta le note di rilascio per comprendere le modifiche apportate alle 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, valuta la possibilità di utilizzare container personalizzati. Il pre-packaging delle dipendenze riduce il tempo di avvio del worker.
Logging
Segui queste best practice per la registrazione:
- Una registrazione eccessiva può influire negativamente sul rendimento.
- 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 il campionamento dei dati invece.
- Utilizza un pattern di messaggi non recapitati per gli errori per elemento, anziché registrare ogni errore.
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 delle trasformazioni personalizzate ad alta intensità di 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 workload, inclusi il numero totale di elementi per le pipeline batch, il numero di elementi al secondo per le pipeline in modalità flusso, la dimensione dell'elemento e il numero di chiavi. Testa le 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, consulta
Testare la pipeline.
Per esempi di test, consulta il
dataflow-ordered-processing
repository GitHub.