Informazioni sui carichi di lavoro HPC a elevata parallelismo di Dataflow

I carichi di lavoro altamente paralleli, noti anche come carichi di lavoro imbarazzabilmente paralleli, sono comuni nelle imprese finanziarie, dei media e delle scienze biologiche. Per carichi di lavoro paralleli come questi, le aziende solitamente eseguono il deployment di 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 ulteriori informazioni su Apache Beam, consulta la guida alla programmazione Apache Beam.

L'utilizzo di Dataflow per carichi di lavoro altamente paralleli offre molti vantaggi.

Inoltre, Dataflow include varie funzionalità di sicurezza:

Questi carichi di lavoro richiedono la distribuzione dei dati a funzioni eseguite su molti core. Questa distribuzione spesso richiede letture di contemporaneità molto elevate seguite da un grande fan-out di dati, assorbita dai sistemi downstream. Le competenze principali di Dataflow sono la distribuzione di carichi di lavoro in modalità flusso e batch tra le risorse e la gestione della scalabilità automatica e del ribilanciamento dinamico del lavoro tra queste risorse. Di conseguenza, quando utilizzi Dataflow per i tuoi carichi di lavoro a elevata parallelismo, le esigenze di prestazioni, scalabilità, disponibilità e sicurezza vengono gestite automaticamente.

Incorporare il codice esterno nella pipeline

Al momento Apache Beam dispone 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 programmi binari (librerie) C++ come codice esterno utilizzando Apache Beam. L'inclusione di programmi binari C++ consente di sbloccare questi tipi di carichi di lavoro utilizzando servizi completamente gestiti. Consente inoltre di creare pipeline complete utilizzando un sofisticato grafico aciclico diretto (DAG).

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

Pipeline end-to-end altamente parallele

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

Ad esempio, un carico di lavoro HPC a elevata parallelismo potrebbe incorporare i seguenti passaggi:

  1. Importa dati non elaborati, sia da origini interne che da origini esterne. I dati possono provenire da origini illimitate o limitate. Le origini illimitate vengono per lo più convertite in origini limitate per supportare le tecnologie utilizzate per il task farming.

  2. Pre-elabora i dati non elaborati in un formato dati e codifica che può essere utilizzato dal componente di attività farming.

  3. Utilizza un sistema per distribuire i calcoli agli host e per recuperare i dati da un'origine, quindi materializzare i risultati per la post-analisi.

  4. Eseguire una post-analisi per convertire i risultati in output.

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

  • Poiché un singolo sistema è responsabile di tutte le fasi, non è necessario 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 confini della fase per aumentare l'efficienza.

  • Con una migliore telemetria nel sistema, sono disponibili informazioni sui byte totali nello stage, il che aiuta a progettare le fasi successive.

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

La pipeline HPC a elevata parallelismo di Dataflow utilizza moderni motori di esecuzione DAG. Tutti i processi tipici della pipeline possono essere completati in un singolo DAG e, di conseguenza, in una singola pipeline Dataflow. Puoi usare un DAG generato da Apache Beam per definire la forma della pipeline.

Se stai passando 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 acquisisce un elemento di dati. Il punto dati può essere qualsiasi oggetto con una o più proprietà.

L'utilizzo di un DAG e di una pipeline singola consente di caricare tutti i dati all'interno del sistema durante l'intero flusso di lavoro. Non è necessario eseguire l'output dei dati nei database o nello spazio di archiviazione.

Componenti di Google Cloud utilizzati con flussi di lavoro altamente paralleli

Le applicazioni di grid computing richiedono la distribuzione dei dati a funzioni eseguite su molti core. Questo pattern richiede spesso letture a elevata contemporaneità ed è spesso seguito da un grande fan-out dei dati assorbiti dai sistemi downstream.

Dataflow è integrato con altri servizi gestiti di Google Cloud in grado di assorbire l'I/O di dati parallelizzati su larga scala:

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

Questi servizi, se utilizzati insieme, forniscono una soluzione efficace per carichi di lavoro altamente paralleli.

L'architettura comune per i carichi di lavoro altamente paralleli in esecuzione su Google Cloud include:

  • 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 multifase complesse in cui è possibile riunire le fasi con pipeline parallele utilizzando input lato o join.

  • Cloud Storage. Questo servizio fornisce una posizione per l'archiviazione dei file binari di 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 sink.

Il seguente diagramma illustra 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 flusso nella pagina I/O della pipeline nella documentazione di Apache Beam.

L'esecutore di Dataflow per Apache Beam

Utilizza Dataflow per trasformare e arricchire i dati in modalità flusso e batch. Dataflow è basato su Apache Beam.

Cloud Storage

Cloud Storage è uno spazio di archiviazione di oggetti unificato che include pubblicazione di dati in tempo reale, analisi dei dati, machine learning (ML) e archiviazione dei dati. Per carichi di lavoro altamente paralleli con Dataflow, Cloud Storage fornisce accesso ai programmi binari di C++. In alcuni casi d'uso, Cloud Storage fornisce anche la località dei dati richiesti dalla fase di elaborazione.

Per i carichi a burst elevati richiesti dal grid computing, è necessario comprendere le caratteristiche delle prestazioni di Cloud Storage. Per ulteriori informazioni sulle prestazioni della gestione 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), gli consentono di gestire molte migliaia di client simultanei e carichi di lavoro intensivi. 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 della griglia vengono spesso utilizzati per l'analisi e consentono di eseguire aggregazioni su larga scala sull'output di dati della griglia.

Pub/Sub

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

Il DAG Dataflow

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

Il seguente diagramma illustra questo flusso.

Flusso con DAG

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

Passaggi successivi

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

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