Les charges de travail hautement parallèles, également appelées charges de travail à parallélisme embarrassant, sont courantes dans les secteurs de la finance, des médias et des sciences de la vie. Pour des charges de travail parallèles de ce type, les entreprises déploient généralement un cluster de nœuds de calcul. Chaque nœud peut effectuer des tâches de traitement indépendantes, dans une configuration désignée par le terme d'informatique en grille. Pour traiter les données de charges de travail parallèles, vous pouvez utiliser Apache Beam avec Dataflow. Pour plus d'informations sur Apache Beam, consultez le guide de programmation d'Apache Beam.
L'utilisation de Dataflow pour les charges de travail hautement parallèles offre de nombreux avantages.
- Créez un workflow entièrement géré, avec le traitement et l'orchestration des données dans le même pipeline.
- L'interface utilisateur et l'API Dataflow incluent des fonctionnalités d'observabilité.
- Dataflow dispose d'une journalisation centralisée pour toutes les étapes du pipeline.
- Dataflow propose l'autoscaling pour maximiser les performances et optimiser l'utilisation des ressources.
- Dataflow est tolérant aux pannes et fournit un équilibrage de charge dynamique.
- Dataflow propose la détection et la correction des retardataires.
- Utilisez un seul système pour tous les aspects du pipeline, à la fois pour le prétraitement et le post-traitement, et pour le traitement des tâches. Vous pouvez même utiliser votre code C++ existant dans le pipeline.
- Utiliser le traitement "exactement une fois" fourni par Dataflow.
En outre, Dataflow inclut diverses fonctionnalités de sécurité :
- Utilisez une clé de chiffrement gérée par le client (CMEK) avec votre pipeline.
- Définissez des règles de pare-feu pour le réseau associé à votre job Dataflow.
- Utilisez un réseau VPC.
Ces charges de travail nécessitent la distribution des données dans des fonctions qui s'exécutent sur de nombreux cœurs. Cette répartition nécessite souvent des lectures simultanées très élevées suivies d'une large distribution ramifiée des données, absorbée par les systèmes en aval. Les principales compétences de Dataflow sont la répartition des charges de travail par lot et par flux entre les ressources, ainsi que la gestion de l'autoscaling et du rééquilibrage dynamique du travail entre ces ressources. Par conséquent, lorsque vous utilisez Dataflow pour vos charges de travail hautement parallèles, les besoins en termes de performances, d'évolutivité, de disponibilité et de sécurité sont gérés automatiquement.
Intégrer du code externe dans votre pipeline
Apache Beam dispose actuellement de SDK pour Java, Python et Go. Cependant, de nombreuses charges de travail très parallèles utilisent du code écrit en C++. Vous pouvez utiliser Dataflow et d'autres services Google Cloud pour exécuter des binaires C++ (bibliothèques) en tant que code externe à l'aide d'Apache Beam. Inclure des binaires C++ vous permet de débloquer ces types de charges de travail à l'aide de services entièrement gérés. Il vous permet également de créer des pipelines complets à l'aide d'un graphe orienté acyclique (DAG, Directed Acyclic Graph) sophistiqué.
La même approche pour l'exécution de binaires C++ est également pertinente pour du code écrit dans d'autres langages où vous pouvez compiler un binaire autonome.
Pipelines hautement parallèles de bout en bout
Avec Dataflow, vous pouvez effectuer le traitement, l'analyse et le résultat des tâches d'E/S dans le même pipeline, ce qui vous permet d'exécuter des pipelines hautement parallèles complets.
Par exemple, une charge de travail HPC hautement parallèle peut intégrer les étapes suivantes :
Ingérer des données brutes, provenant de sources à la fois internes et externes. Les données peuvent provenir de sources illimitées ou limitées. Les sources illimitées sont le plus souvent converties en sources limitées pour s'adapter aux technologies utilisées pour les fermes de tâches.
Prétraiter les données brutes dans une forme et un encodage de données que le composant de ferme de tâches peut utiliser.
Utiliser un système pour distribuer les calculs sur les hôtes et pour récupérer les données d'une source, puis matérialiser les résultats en vue d'une post-analyse.
Effectuer une post-analyse pour convertir les résultats en sortie.
Vous pouvez utiliser Dataflow pour gérer toutes ces étapes dans un seul pipeline tout en tirant parti des fonctionnalités de Dataflow :
Étant donné qu'un seul système est responsable de toutes les étapes, vous n'avez pas besoin d'un système d'orchestration externe pour coordonner l'exécution de plusieurs pipelines.
Grâce à la localité des données, il n'est pas nécessaire de matérialiser et de dématérialiser explicitement entre les limites de l'étape, ce qui accroît l'efficacité.
Grâce à une meilleure télémétrie dans le système, des informations sur le nombre total d'octets dans l'étape sont disponibles, ce qui facilite la conception des étapes ultérieures.
Avec l'autoscaling, lorsque les données se trouvent dans le système, les ressources évoluent en fonction des volumes de données à mesure que les données progressent dans les étapes du pipeline.
Le pipeline HPC hautement parallèle de Dataflow utilise des moteurs d'exécution modernes de DAG. Tous les processus typiques du pipeline peuvent être exécutés dans un seul DAG et, par conséquent, dans un seul pipeline Dataflow. Vous pouvez utiliser un DAG généré par Apache Beam pour définir la forme du pipeline.
Si vous passez d'un système de fermes de tâches à un workflow hautement parallèle, vous devez passer des tâches aux données. Une fonction PTransform
contient un DoFn
, qui possède une fonction de processus qui prend un élément de données.
Le point de données peut être n'importe quel objet avec une ou plusieurs propriétés.
En utilisant un DAG et un pipeline unique, vous pouvez charger toutes les données du système tout au long du workflow. Vous n'avez pas besoin de générer de données vers des bases de données ou un espace de stockage.
Composants Google Cloud utilisés avec des workflows hautement parallèles
Les applications d'informatique en grille nécessitent que les données soient distribuées aux fonctions s'exécutant sur de nombreux cœurs. Ce modèle requiert donc souvent un grand nombre de lectures simultanées, fréquemment suivies d'une large distribution ramifiée des données absorbées par les systèmes en aval.
Dataflow est intégré à d'autres services gérés Google Cloud pouvant absorber les E/S de données en parallèle à grande échelle :
- Pub/Sub : magasin orienté colonnes pour la mise en cache et la diffusion
- Bigtable : service d'ingestion de flux d'événements global
- Cloud Storage : magasin d'objets unifié
- BigQuery : service d'entreposage de données à l'échelle du pétaoctet
Utilisés ensemble, ces services constituent une solution convaincante pour les charges de travail hautement parallèles.
L'architecture commune pour les charges de travail hautement parallèles exécutées sur Google Cloud comprend les éléments suivants :
L'exécuteur Dataflow pour Apache Beam. Cet exécuteur distribue les charges de travail vers les nœuds de la grille avec un flux de traitement issu d'un DAG. Un unique DAG Apache Beam vous permet de définir des pipelines complexes à plusieurs étapes, dans lesquels les étapes parallèles de pipeline peuvent être rassemblées à l'aide d'entrées secondaires ou de jointures.
Cloud Storage. Ce service fournit un emplacement pour stocker les binaires C++. Lorsque vous avez besoin de stocker des fichiers volumineux, comme c'est fréquemment le cas avec des fichiers multimédias, ces derniers résident également dans Cloud Storage.
Bigtable, BigQuery et Pub/Sub. Ces services sont utilisés à la fois comme sources et comme récepteurs.
Le diagramme suivant décrit une architecture de haut niveau pour un exemple de workflow.
Vous pouvez également utiliser d'autres systèmes de stockage. Pour plus de détails, consultez la liste des systèmes de stockage et des sources de diffusion en continu sur la page des E/S de pipeline dans la documentation d'Apache Beam.
Exécuteur Dataflow pour Apache Beam
Utilisez Dataflow pour transformer et enrichir les données en mode de traitement par flux ou par lot. Dataflow est basé sur Apache Beam.
Cloud Storage
Cloud Storage est une solution unifiée de stockage associant des fonctionnalités de diffusion de données en temps réel, de machine learning et d'archivage. Pour les charges de travail hautement parallèles avec Dataflow, Cloud Storage fournit un accès aux binaires C++. Dans certains cas d'utilisation, Cloud Storage assure également le stockage des données nécessaires à la phase de traitement.
Pour les charges en rafale requises par le calcul en grille, vous devez comprendre les caractéristiques de performance de Cloud Storage. Pour plus d'informations sur les performances des serveurs de données Cloud Storage, consultez la page Taux de demandes et consignes de distribution des accès dans la documentation de Cloud Storage.
Bigtable
Bigtable est un service de base de données NoSQL hautes performances optimisé pour les charges de travail analytiques et opérationnelles de grande envergure. Bigtable est complémentaire de Dataflow. Les principales caractéristiques de Bigtable, telles que les lectures et écritures à faible latence (6 ms au 90e centile), lui permettent de gérer les milliers de clients simultanés et les charges de travail intensives. Ces fonctionnalités font de Bigtable le candidat idéal aussi bien en tant que récepteur qu'en tant que source de données dans la fonction DoFn
utilisée pendant la phase de traitement de Dataflow.
BigQuery
BigQuery est un entrepôt de données d'entreprise rapide, économique et entièrement géré, destiné à l'analyse de données à grande échelle. Les résultats de calcul en grille sont souvent utilisés pour l'analyse et vous permettent de réaliser des agrégations à grande échelle à partir des données renvoyées par le calcul en grille.
Pub/Sub
Pub/Sub est un service de messagerie asynchrone et évolutif qui dissocie les services de production de messages des services qui traitent ces messages. Vous pouvez utiliser Pub/Sub pour les pipelines d'analyse de flux et d'intégration de données afin d'ingérer et de distribuer des données. Il est également efficace en tant que middleware de messagerie pour l'intégration des services ou comme file d'attente pour charger en parallèle des tâches.
Graphe orienté acyclique Dataflow
Le SDK Apache Beam vous permet de créer des graphes orientés acycliques expressifs, ce qui facilite la création de pipelines de traitement en flux continu ou par lots comportant plusieurs étapes. L'exécuteur gère le transfert des données, lesquelles sont exprimées sous la forme d'objets PCollection
, qui sont des collections d'éléments parallèles immuables.
Le schéma suivant illustre ce flux.
Le SDK Apache Beam vous permet de définir un graphe orienté acyclique, dans lequel vous pouvez inclure des fonctions sous la forme de code défini par l'utilisateur. Normalement, le même langage de programmation (Java, Python ou Go) est utilisé à la fois pour la déclaration du graphe orienté acyclique et pour le code défini par l'utilisateur. Vous pouvez également utiliser du code non intégré, tel que C++, pour le code défini par l'utilisateur.
Étapes suivantes
Découvrez les bonnes pratiques d'utilisation des pipelines Dataflow HPC hautement parallèles.
Suivez le tutoriel pour créer un pipeline utilisant des conteneurs personnalisés avec des bibliothèques C++.