Informazioni sui carichi di lavoro altamente paralleli HPC di Dataflow

I carichi di lavoro altamente paralleli, noti anche come carichi di lavoro imbarazzantemente paralleli, sono comuni nelle aziende dei settori finanziario, dei media e delle scienze biologiche. Per carichi di lavoro paralleli come questi, le aziende in genere implementano un cluster di nodi di calcolo. Ogni nodo può eseguire attività di elaborazione indipendenti, in una configurazione denominata grid computing. Per elaborare i dati per carichi di lavoro paralleli, puoi utilizzare Apache Beam con Dataflow. Per saperne di più su Apache Beam, consulta la guida alla programmazione di Apache Beam.

L'utilizzo di Dataflow per i workload altamente paralleli offre molti vantaggi.

Inoltre, Dataflow include varie funzionalità di sicurezza:

Questi carichi di lavoro richiedono la distribuzione dei dati a funzioni che vengono eseguite su molti core. Questa distribuzione spesso richiede letture con concorrenza molto elevata seguite da un'ampia distribuzione dei dati, assorbiti dai sistemi downstream. Le competenze principali di Dataflow sono la distribuzione dei carichi di lavoro batch e di streaming tra le risorse e la gestione della scalabilità automatica e del ribilanciamento dinamico del lavoro tra queste risorse. Pertanto, quando utilizzi Dataflow per i tuoi carichi di lavoro altamente paralleli, le esigenze di prestazioni, scalabilità, disponibilità e sicurezza vengono gestite automaticamente.

Incorporare codice esterno nella pipeline

Apache Beam dispone attualmente di SDK integrati per Java, Python e Go. Tuttavia, molti carichi di lavoro altamente paralleli utilizzano codice scritto in C++. Puoi utilizzare Dataflow e altri servizi Google Cloud per eseguire i file binari (librerie) C++ come codice esterno utilizzando Apache Beam. L'inclusione di binari C++ ti consente di sbloccare questi tipi di carichi di lavoro utilizzando servizi completamente gestiti. Inoltre, ti consente di creare pipeline complete utilizzando un sofisticato grafo diretto aciclico (DAG).

Lo stesso approccio per l'esecuzione di file binari C++ è valido anche per il codice scritto in altri linguaggi in cui è possibile compilare un file binario autonomo.

Pipeline end-to-end altamente parallele

Con Dataflow, puoi eseguire l'elaborazione di lettura/scrittura di I/O, l'analisi e l'output delle attività nella stessa pipeline, il che ti consente di eseguire pipeline complete altamente parallele

Ad esempio, un carico di lavoro HPC altamente parallelo potrebbe incorporare i seguenti passaggi:

  1. Importa dati non elaborati, sia da origini interne che esterne. I dati potrebbero provenire da origini senza limiti o con limiti. Le origini illimitate vengono per lo più convertite in origini limitate per adattarsi alle tecnologie utilizzate per la suddivisione delle attività.

  2. Pre-elabora i dati non elaborati in una forma e una codifica dei dati che il componente di task farming può utilizzare.

  3. Utilizza un sistema per distribuire i calcoli agli host e recuperare i dati da un'origine, quindi materializza i risultati per l'analisi successiva.

  4. Esegui l'analisi post-elaborazione per convertire i risultati in output.

Puoi utilizzare Dataflow per gestire tutti questi passaggi in un'unica pipeline sfruttando i vantaggi delle funzionalità di Dataflow:

  • Poiché un unico sistema è responsabile di tutte le fasi, non hai bisogno di un sistema di orchestrazione esterno per coordinare l'esecuzione di più pipeline.

  • Con la località dei dati, non è necessario materializzare e dematerializzare esplicitamente tra i limiti dello stage, aumentando l'efficienza.

  • Grazie a una migliore telemetria nel sistema, sono disponibili informazioni sul numero totale di byte nella fase, il che aiuta a progettare le fasi successive.

  • Con la scalabilità automatica, quando i dati si trovano nel sistema, le risorse vengono scalate in base ai volumi di dati man mano che i dati si spostano nelle fasi della pipeline.

La pipeline Dataflow HPC altamente parallela principale utilizza motori di esecuzione DAG moderni. Tutti i processi tipici della pipeline possono essere completati in un unico DAG e, pertanto, in un'unica pipeline Dataflow. Puoi utilizzare un DAG generato da Apache Beam per definire la forma della pipeline.

Se esegui la migrazione da un sistema di task farm a un flusso di lavoro altamente parallelo, devi passare dalle attività ai dati. Un PTransform contiene un DoFn, che ha una funzione di elaborazione che accetta un elemento di dati. Il punto dati può essere qualsiasi oggetto con una o più proprietà.

Utilizzando un DAG e una singola pipeline, puoi caricare tutti i dati all'interno del sistema durante l'intero flusso di lavoro. Non è necessario inviare i dati a database o spazio di archiviazione.

Componenti di Google Cloud Platform utilizzati con flussi di lavoro altamente paralleli

Le applicazioni di grid computing richiedono che i dati vengano distribuiti alle funzioni in esecuzione su molti core. Questo pattern spesso richiede letture a concorrenza elevata ed è spesso seguito da un'ampia distribuzione dei dati assorbiti dai sistemi downstream.

Dataflow è integrato con altri servizi gestiti di Google Cloud Platform che possono assorbire I/O di dati parallelizzati su larga scala:

  • Pub/Sub: archivio a colonne larghe per la memorizzazione nella cache e la pubblicazione
  • Bigtable: servizio di importazione di flussi di eventi globali
  • Cloud Storage: archivio di oggetti unificato
  • BigQuery: servizio di data warehouse su scala petabyte

Se utilizzati insieme, questi servizi forniscono una soluzione convincente per i carichi di lavoro altamente paralleli.

L'architettura comune per i workload altamente paralleli in esecuzione su Google Cloud Platform include quanto segue:

  • Dataflow Runner per Apache Beam. Questo runner distribuisce il lavoro ai nodi della griglia con un flusso di elaborazione derivato da un DAG. Un singolo DAG Apache Beam consente di definire pipeline complesse in più fasi in cui le fasi parallele della pipeline possono essere riunite utilizzando input secondari o join.

  • Cloud Storage. Questo servizio fornisce una posizione in cui organizzare i file binari C++. Quando è necessario archiviare file di grandi dimensioni, come in molti casi d'uso multimediali, questi file risiedono anche in Cloud Storage.

  • Bigtable, BigQuery e Pub/Sub. Questi servizi vengono utilizzati sia come origini che come destinazioni.

Il seguente diagramma mostra l'architettura di alto livello per un flusso di lavoro di esempio.

Architettura di una soluzione di grid computing

Puoi anche utilizzare altri sistemi di archiviazione. Per maggiori dettagli, consulta l'elenco dei sistemi di archiviazione e delle origini di streaming nella pagina I/O della pipeline nella documentazione di Apache Beam.

Runner Dataflow per Apache Beam

Utilizza Dataflow per trasformare e arricchire i dati in modalità sia streaming che batch. Dataflow si basa su Apache Beam.

Cloud Storage

Cloud Storage è un'archiviazione di oggetti unificata che comprende data serving in tempo reale, analisi dei dati, machine learning (ML) e archiviazione dei dati. Per carichi di lavoro altamente paralleli con Dataflow, Cloud Storage fornisce l'accesso ai file binari C++. In alcuni casi d'uso, Cloud Storage fornisce anche la posizione dei dati necessari per la fase di elaborazione.

Per i carichi di lavoro ad alta intensità richiesti dal grid computing, devi comprendere le caratteristiche delle prestazioni di Cloud Storage. Per ulteriori informazioni sulle prestazioni di pubblicazione dei dati di Cloud Storage, consulta le linee guida per tasso di richieste e distribuzione degli accessi nella documentazione di Cloud Storage.

Bigtable

Bigtable è un servizio di database NoSQL ad alte prestazioni ottimizzato per carichi di lavoro analitici e operativi di grandi dimensioni. Bigtable è complementare a Dataflow. Le caratteristiche principali di Bigtable, letture e scritture a bassa latenza (6 ms al 90° percentile), consentono di gestire molte migliaia di client simultanei e carichi di lavoro con picchi elevati. Queste funzionalità rendono Bigtable ideale come sink e come origine dati all'interno della funzione DoFn nella fase di elaborazione di Dataflow.

BigQuery

BigQuery è un data warehouse aziendale veloce, economico e completamente gestito per l'analisi di dati su larga scala. I risultati a griglia vengono spesso utilizzati per l'analisi e consentono di eseguire aggregazioni su larga scala rispetto all'output dei dati della griglia.

Pub/Sub

Pub/Sub è un servizio di messaggistica asincrono e scalabile che disaccoppia i servizi che producono messaggi dai servizi che li elaborano. Puoi utilizzare Pub/Sub per le pipeline di analisi dei flussi di dati e integrazione dei dati per importare e distribuire i dati. È altrettanto efficace come middleware orientato alla messaggistica per l'integrazione di servizi o come coda per parallelizzare le attività.

Il DAG Dataflow

L'SDK Apache Beam ti consente di creare DAG espressivi, che a loro volta ti consentono di creare pipeline multi-stadio in modalità flusso o batch. Lo spostamento dei dati viene gestito dal runner, con i dati espressi come oggetti PCollection, che sono raccolte di elementi paralleli immutabili.

Il seguente diagramma illustra questo flusso.

Flusso che utilizza il DAG

L'SDK Apache Beam consente di definire un DAG. Nel DAG puoi includere codice definito dall'utente come funzioni. Normalmente, per la dichiarazione del DAG e per il codice definito dall'utente viene utilizzato lo stesso linguaggio di programmazione (Java, Python o Go). Puoi anche utilizzare codice non integrato, ad esempio C++, per il codice definito dall'utente.

Passaggi successivi

  • Scopri le best practice per lavorare con le pipeline altamente parallele di Dataflow HPC.

  • Segui il tutorial per creare una pipeline che utilizza container personalizzati con librerie C++.