Scalabilità dinamica dei thread

La scalabilità dinamica dei thread è una parte della suite di risorse verticali di Dataflow le funzionalità di scalabilità. Completa la funzionalità di scalabilità automatica orizzontale di Dataflow regolando il numero di attività parallele, note anche come bundle, eseguite da ciascun worker Dataflow. L'obiettivo è aumentare le entrate complessive della tua pipeline Dataflow.

Quando Dataflow esegue una pipeline, l'elaborazione viene distribuita su più macchine virtuali (VM) Compute Engine, note anche come worker. Un thread è una singola attività eseguibile in esecuzione all'interno di un processo più grande. Dataflow avvia diversi thread su ogni worker.

Con la scalabilità dinamica dei thread abilitata, il servizio Dataflow sceglie automaticamente il numero appropriato di thread da eseguire su ciascun worker Dataflow. Poiché ogni thread esegue un'attività, l'aumento del numero di thread consente di eseguire più attività in parallelo su un worker. Quando utilizzi questa funzionalità con la scalabilità automatica orizzontale caratteristica, il numero totale di thread utilizzati dalla pipeline rimane lo stesso, ma vengono utilizzati meno worker.

La scalabilità dinamica dei thread utilizza un algoritmo per determinare il numero thread di cui ciascun worker ha bisogno in base agli indicatori di utilizzo delle risorse generati durante l'esecuzione della pipeline. Per ulteriori informazioni, consulta la sezione Come funziona di questa pagina.

Vantaggi

La scalabilità dinamica dei thread offre i seguenti potenziali vantaggi.

  • Consente ai worker Dataflow di elaborare i dati in modo più efficiente migliorando di utilizzo di CPU e memoria per worker.
  • Migliora l'elaborazione parallela regolando il numero di thread worker disponibili per eseguire attività in parallelo durante l'esecuzione della pipeline.
  • Riduce il numero di worker necessari per elaborare set di dati di grandi dimensioni, ridurre i costi.

Supporto e limitazioni

  • La scalabilità dinamica dei thread è disponibile per le pipeline che utilizzano i linguaggi Java, Python, e Go.
  • Il job Dataflow deve utilizzare Runner v2.
  • Sono supportate solo pipeline in modalità batch.
  • Le pipeline che richiedono molta CPU o memoria potrebbero non trarre vantaggio la scalabilità dinamica dei thread.
  • La scalabilità dinamica dei thread non riduce la quantità di tempo necessaria Job Dataflow da completare.

Come funziona

La scalabilità dinamica dei thread utilizza i principi di ottimizzazione automatica per fare lo scale up o lo scale down del conteggio dei thread su ciascun worker nel worker Dataflow piscina. Il numero di thread viene scalato in modo indipendente su ogni worker. Ogni thread esegue un'attività. L'aumento del numero di thread consente di eseguire più attività in parallelo su un worker. Man mano che le attività vengono completate e i thread non sono più necessari, il numero di thread viene ridotto. Un algoritmo determina il numero di thread necessari per ogni worker.

Il numero di thread su un worker viene scalato fino a un massimo di due thread per vCPU quando vengono soddisfatte entrambe le seguenti condizioni:

  • L'utilizzo della memoria sul worker è inferiore al 50%.
  • L'utilizzo della CPU sul worker è inferiore al 65%.

Il conteggio dei thread su un worker viene ridotto a un minimo di un thread per vCPU quando la seguente condizione è soddisfatta:

  • L'utilizzo della memoria sul worker è superiore al 70%.

Per visualizzare l'utilizzo della memoria e della CPU per il job, utilizza la scheda Metriche job dell'interfaccia web di Dataflow.

Per garantire che i suggerimenti siano validi, Dataflow attende che la risorsa l'utilizzo per stabilizzarsi prima di inviare suggerimenti ai worker. Ad esempio: e l'utilizzo della CPU potrebbero essere nell'intervallo di scalabilità, ma poiché di risorse è ancora in crescita, Dataflow non invia un consiglio. Dopo che l'utilizzo delle risorse si è stabilizzato, Dataflow invia un consiglio.

Se si verifica un errore di esaurimento della memoria (OOM), la scalabilità dei thread viene disattivata automaticamente e la pipeline viene eseguita con un thread per vCPU.

Attivare il scaling dinamico dei thread

Per abilitare la scalabilità dinamica dei thread, utilizza persone che seguo Opzione di servizio Dataflow.

Java

--dataflowServiceOptions=enable_dynamic_thread_scaling

Python

--dataflow_service_options=enable_dynamic_thread_scaling

Vai

--dataflow_service_options=enable_dynamic_thread_scaling

Quando la scalabilità dinamica dei thread è abilitata, puoi anche impostare i valori iniziale e di worker disponibili per la pipeline durante l'esecuzione. Per maggiori informazioni le informazioni, vedi Opzioni pipeline.

Verificare che la scalabilità dinamica dei thread sia abilitata

Quando il scaling dinamico dei thread è abilitato, nei file di log dei worker viene visualizzato il seguente messaggio:

Enabling thread vertical scaling feature in worker.

Per visualizzare i file di log dei worker, in Esplora log, utilizza il riquadro Query per filtrare i log in base a Nome log. Utilizza il seguente nome di log nel filtro:

projects/PROJECT_ID/logs/dataflow.googleapis.com%2Fharness

Puoi vedere il numero consigliato di thread nei file di log dei worker. La seguente messaggio include il numero consigliato di thread:

worker_thread_scaling_report_response { recommended_thread_count: NUMBER }

Se l'utilizzo delle risorse non è compreso nell'intervallo di scalabilità, equivale al numero di vCPU sul worker.

Puoi anche utilizzare la console Google Cloud per verificare se il ridimensionamento dinamico dei thread è attivo. Una volta abilitato, nel riquadro Informazioni job di Dataflow, nella riga dataflowServiceOptions del Sezione Opzioni pipeline, viene visualizzata la dicitura enable_dynamic_thread_scaling.

Risoluzione dei problemi

Questa sezione fornisce istruzioni per la risoluzione dei problemi comuni relativi al scaling dinamico dei thread.

Le prestazioni peggiorano con la scalabilità dinamica dei thread abilitata

L'aumento del numero di thread potrebbe causare problemi di prestazioni nei seguenti casi: casi:

  • Quando più processi tentano di utilizzare la stessa risorsa, un processo è in grado di utilizzarla mentre gli altri devono attendere. Questa situazione è nota come contesa delle risorse. Quando si verifica la contesa delle risorse, le prestazioni della pipeline potrebbero diminuire.
  • Quando si verificano errori di esaurimento della memoria, il ridimensionamento dinamico dei thread è disabilitato. Nella alcuni casi, gli errori di memoria insufficiente potrebbero causare un errore della pipeline.

Verifica se il numero di thread è aumentato. Per informazioni su come verificare il numero di thread consigliato, consulta Verifica che il ridimensionamento dei thread sia abilitato in questa pagina.

Se il ridimensionamento dei thread è abilitato, per risolvere il problema, quando esegui il pipeline, non includere l'opzione di servizio di scalabilità dei thread dinamici.

Lavoratore unificato … sia abilitato che disabilitato

Dopo aver attivato il scaling dinamico dei thread, il job potrebbe non riuscire con il seguente errore:

The workflow could not be created. Causes: (ID): Unified worker misconfigured by user and was both enabled and disabled.

Questo errore si verifica quando Runner v2 è disabilitato esplicitamente.

Per risolvere il problema, attiva Runner v2. Per ulteriori informazioni, consulta la sezione Attivare Dataflow Runner v2 nella pagina "Utilizzare Dataflow Runner v2".

Esegui l'upgrade dell'SDK

Dopo aver abilitato la scalabilità dinamica dei thread, il job potrebbe non riuscire con i seguenti errori errore:

Java

Dataflow Runner v2 requires the Apache Beam Java SDK version 2.29.0 or higher. Please upgrade your SDK and resubmit your job.

Python

Dataflow Runner v2 requires the Apache Beam SDK, version 2.21.0 or higher. Please upgrade your SDK and resubmit your job.

Questo errore si verifica quando non è possibile abilitare Runner v2 perché la versione SDK non lo supporta.

Per risolvere il problema, utilizza una versione dell'SDK che supporti Runner 2.

Impossibile abilitare la funzionalità di scalabilità verticale del thread

Dopo aver abilitato la scalabilità dinamica dei thread, il job potrebbe non riuscire con i seguenti errori errore:

The workflow could not be created. Causes: (ID): Thread vertical scaling feature can not be enabled while number_of_worker_harness_threads is specified.

Questo errore si verifica quando la pipeline imposta esplicitamente il numero di thread per worker utilizzando l'opzione della pipeline numberOfWorkerHarnessThreads o number_of_worker_harness_threads.

Per risolvere il problema, rimuovi numberOfWorkerHarnessThreads o Opzione number_of_worker_harness_threads della pipeline.