I carichi di lavoro altamente paralleli, noti anche come carichi di lavoro eccessivamente paralleli, sono comuni nelle aziende di finanza, media e scienze biologiche. Per i 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 indicata come grid computing. Per elaborare i dati per i carichi di lavoro paralleli, puoi utilizzare Apache Beam con Dataflow. Per ulteriori informazioni su Apache Beam, consulta la guida alla programmazione di Apache Beam.
L'utilizzo di Dataflow per i carichi di lavoro altamente paralleli offre molti vantaggi.
- Crea un flusso di lavoro completamente gestito, con elaborazione e orchestrazione dei dati nella stessa
pipeline.
- L'interfaccia utente e l'API di Dataflow includono funzionalità di osservabilità.
- Dataflow dispone di registrazione centralizzata per tutte le fasi della pipeline.
- Dataflow offre la scalabilità automatica per massimizzare le prestazioni e ottimizzare l'utilizzo delle risorse.
- Dataflow è a tolleranza di errore e offre il bilanciamento del carico dinamico.
- Dataflow offre rilevamento e correzione di elementi in ritardo.
- Utilizza un unico sistema per tutti gli aspetti della pipeline, sia per la pre-elaborazione e la post-elaborazione sia per l'elaborazione delle attività. Puoi persino utilizzare il codice C++ esistente nella pipeline.
- Utilizza l'elaborazione exactly-once integrata fornita da Dataflow.
Inoltre, Dataflow include varie funzionalità di sicurezza:
- Utilizza la chiave di crittografia gestita dal cliente (CMEK) con la pipeline.
- Definisci le regole del firewall per la rete associata al tuo job Dataflow.
- Utilizza una rete VPC.
Questi carichi di lavoro richiedono la distribuzione dei dati a funzioni che vengono eseguite su molti core. Questa distribuzione spesso richiede letture con una concorrenza molto elevata seguite da un'ampia distribuzione dei dati, assorbiti dai sistemi a valle. Le competenze di base di Dataflow sono la distribuzione dei carichi di lavoro batch e stream tra le risorse e la gestione della scalabilità automatica e della ridistribuzione dinamica 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 attualmente 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 i binari (librerie) C++ come codice esterno utilizzando Apache Beam. L'inclusione dei binari C++ 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 binari C++ è pertinente anche per il codice scritto in altri linguaggi in cui puoi compilare un binario autonomo.
Pipeline end-to-end altamente parallele
Con Dataflow puoi eseguire l'elaborazione di lettura/scrittura I/O, l'analisi e l'output delle attività tutte nella stessa pipeline, il che ti consente di eseguire pipeline complete altamente parallele
Ad esempio, un carico di lavoro HPC altamente parallelo potrebbe includere i seguenti passaggi:
Importa dati non elaborati, sia da origini interne che esterne. I dati potrebbero provenire da origini illimitate o limitate. Le origini illimitate vengono per lo più convertite in quelle limitate per supportare le tecnologie utilizzate per il farming di attività.
Pre-elabora i dati non elaborati in una forma e una codifica dei dati che il componente del farming delle attività può utilizzare.
Utilizza un sistema per distribuire i calcoli agli host e per recuperare i dati da un'origine, quindi materializza i risultati per l'analisi post-elaborazione.
Esegui un'analisi post-elaborazione per convertire i risultati in output.
Puoi utilizzare Dataflow per gestire tutti questi passaggi in un'unica pipeline, sfruttando al contempo le funzionalità di Dataflow:
Poiché un unico sistema è responsabile di tutte le fasi, non è necessario un sistema di orchestrazione esterno per coordinare l'esecuzione di più pipeline.
Con la localizzazione dei dati, non è necessario materializzare e dematerializzare esplicitamente tra i confini delle fasi, aumentando l'efficienza.
Grazie a una migliore telemetria in-system, sono disponibili informazioni sui byte totali nella fase, 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 man mano che questi passano attraverso le fasi della pipeline.
La pipeline HPC Dataflow di base altamente parallela utilizza motori di esecuzione DAG moderni. Tutti i processi tipici della pipeline possono essere completati in un singolo DAG e, di conseguenza, in una singola pipeline Dataflow. Puoi utilizzare un DAG generato da Apache Beam per definire la forma della pipeline.
Se stai eseguendo la migrazione da un sistema di farm di attività 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 riceve 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 esportare i dati in database o nello spazio di archiviazione.
Componenti Google Cloud utilizzati con flussi di lavoro altamente paralleli
Le applicazioni di calcolo distribuito richiedono la distribuzione dei dati alle funzioni in esecuzione su molti core. Questo pattern richiede spesso letture ad alta concorrenza ed è spesso seguito da un'ampia distribuzione dei dati assorbiti dai sistemi a valle.
Dataflow è integrato con altri servizi gestiti Google Cloud che possono assorbire E/O di dati parallelizzati su larga scala:
- Pub/Sub: magazzino a colonne larghe per la memorizzazione nella cache e il servizio
- Bigtable: servizio di importazione di stream di eventi a livello globale
- 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 carichi di lavoro altamente paralleli in esecuzione su Google Cloud 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 multi-stadio complesse in cui le fasi in pipeline parallele possono essere riunite utilizzando input secondari o join.
Cloud Storage. Questo servizio fornisce una posizione per eseguire lo staging dei binari C++. Quando è necessario archiviare file di grandi dimensioni, come in molti casi d'uso multimediali, questi file si trovano anche in Cloud Storage.
Bigtable, BigQuery e Pub/Sub. Questi servizi vengono utilizzati sia come origini sia come destinazioni.
Il seguente diagramma illustra l'architettura di alto livello di un flusso di lavoro di esempio.
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 della documentazione di Apache Beam.
Il runner Dataflow per Apache Beam
Utilizza Dataflow per trasformare e arricchire i dati sia in modalità flusso che in modalità batch. Dataflow si basa su Apache Beam.
Cloud Storage
Cloud Storage è un'archiviazione di oggetti unificata che include il data serving in tempo reale, l'analisi dei dati, il machine learning (ML) e l'archiviazione dei dati. Per i carichi di lavoro altamente paralleli con Dataflow, Cloud Storage fornisce l'accesso ai binari C++. In alcuni casi d'uso, Cloud Storage fornisce anche la posizione per i dati necessari per la fase di elaborazione.
Per i carichi con picchi elevati richiesti dal calcolo distribuito su grid computing, devi comprendere le caratteristiche di prestazioni di Cloud Storage. Per ulteriori informazioni sul rendimento del servizio 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 con picchi elevati. Queste funzionalità rendono Bigtable ideale come destinazione 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 scopi di analisi e ti consentono di eseguire aggregazioni su larga scala in base 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 di integrazione dei dati al fine di importare e distribuire i dati. È altrettanto efficace come middleware orientato alla messaggistica per l'integrazione di servizi o come coda per il parallellismo delle attività.
La DAG di Dataflow
L'SDK Apache Beam ti consente di creare DAG espressivi, che a loro volta ti consentono di creare pipeline multistadio in modalità flusso o batch. Lo spostamento dei dati viene gestito dal programma di esecuzione, con i dati espressi come oggetti PCollection
, che sono raccolte di elementi paralleli immutabili.
Il seguente diagramma illustra questo flusso.
L'SDK Apache Beam ti consente di definire un DAG. Nel DAG, puoi includere codice definito dall'utente come funzioni. In genere, 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 altamente parallele di Dataflow HPC.
Segui il tutorial per creare una pipeline che utilizza container personalizzati con librerie C++.