Bonnes pratiques pour optimiser les coûts Dataflow

Ce document décrit les bonnes pratiques pour optimiser vos jobs Dataflow afin de minimiser les coûts. Il explique les facteurs qui ont un impact sur les coûts et fournit des techniques pour les surveiller et les gérer.

Pour en savoir plus sur le calcul des coûts des jobs Dataflow, consultez la page Tarifs de Dataflow.

Plusieurs facteurs peuvent avoir une incidence importante sur le coût d'un job :

  • Paramètres d'exécution
  • Performances des pipelines
  • Exigences de débit du pipeline

Les sections suivantes expliquent comment surveiller vos jobs, les facteurs qui ont un impact sur leur coût et comment améliorer l'efficacité du pipeline.

Définir des SLO

Avant de commencer l'optimisation, définissez les objectifs de niveau de service (SLO) de votre pipeline, en particulier pour le débit et la latence. Ces exigences vous aideront à réfléchir aux compromis entre le coût et d'autres facteurs.

  • Si votre pipeline nécessite une faible latence d'ingestion de bout en bout, les coûts du pipeline peuvent être plus élevés.
  • Si vous devez traiter des données arrivées tardivement, le coût global du pipeline peut être plus élevé.
  • Si votre pipeline de streaming présente des pics de données à traiter, il peut avoir besoin d'une capacité supplémentaire, ce qui peut augmenter les coûts.

Surveiller les jobs

Pour déterminer comment optimiser votre job, vous devez d'abord comprendre son comportement. Utilisez les outils de surveillance Dataflow pour observer votre pipeline lors de son exécution. Utilisez ensuite ces informations pour améliorer vos performances et votre efficacité.

Surveillance des coûts

Utilisez les techniques suivantes pour prédire et surveiller les coûts.

  • Avant d'exécuter le pipeline en production, exécutez une ou plusieurs tâches plus petites sur un sous-ensemble de vos données. Pour de nombreux pipelines, cette technique peut fournir une estimation des coûts.
  • Utilisez la page Coût de l'interface de surveillance Dataflow pour surveiller le coût estimé de vos jobs. Le coût estimé peut ne pas refléter le coût réel d'un job pour diverses raisons, comme les remises contractuelles, mais il peut fournir une bonne base pour l'optimisation des coûts. Pour en savoir plus, consultez la section Surveillance des coûts.
  • Exportez les données Cloud Billing vers BigQuery et effectuez une analyse des coûts sur les tables d'exportation des données de facturation. L'exportation Cloud Billing vous permet d'exporter automatiquement des données de facturation Google Cloud détaillées tout au long de la journée vers un ensemble de données BigQuery. Les données de facturation incluent l'utilisation, les estimations de coûts et les données tarifaires.
  • Pour éviter les coûts inattendus, créez des alertes de surveillance lorsque votre job Dataflow dépasse un seuil que vous définissez. Pour en savoir plus, consultez Utiliser Cloud Monitoring pour les pipelines Dataflow.

Surveillance des jobs

Surveillez vos jobs et identifiez les domaines dans lesquels vous pourriez améliorer l'efficacité du pipeline.

  • Utilisez l'interface de surveillance des jobs Dataflow pour identifier les problèmes dans vos pipelines. L'interface de surveillance affiche un graphique de job et les détails de l'exécution pour chaque pipeline. Ces deux outils peuvent vous aider à comprendre votre pipeline et à identifier les étapes lentes, bloquées ou celles qui prennent trop de temps écoulé.
  • Utilisez l'explorateur de métriques pour afficher des métriques détaillées sur les jobs Dataflow. Vous pouvez utiliser des métriques personnalisées pour capturer les données de performances. La métrique Distribution est particulièrement utile pour collecter des données sur les performances.
  • Pour les pipelines gourmands en ressources de processeur, utilisez Cloud Profiler pour identifier les parties du code de pipeline qui consomment le plus de ressources.
  • Utilisez l'échantillonnage des données pour identifier les problèmes liés à vos données. L'échantillonnage de données vous permet d'observer les données à chaque étape d'un pipeline Dataflow. En affichant les entrées et sorties réelles d'un job en cours ou terminé, ces informations peuvent vous aider à résoudre les problèmes liés à votre pipeline.
  • Personnalisez le tableau de bord de surveillance des projets pour afficher les jobs potentiellement coûteux. Pour en savoir plus, consultez Personnaliser le tableau de bord de surveillance Dataflow.

Il est déconseillé de consigner les métriques de traitement par élément dans les pipelines à volume élevé, car la journalisation est soumise à des limites. Une journalisation excessive peut dégrader les performances des jobs.

Optimiser les paramètres d'exécution

Les paramètres d'exécution suivants peuvent avoir une incidence sur les coûts :

  • Que vous exécutiez un job par flux ou par job par lot
  • Le service que vous utilisez pour exécuter le job, tel que Streaming Engine ou FlexRS
  • Le type de machine, la taille du disque et le nombre de GPU dans les VM de nœud de calcul
  • Mode autoscaling
  • Nombre initial de nœuds de calcul et nombre maximal de nœuds de calcul
  • Mode de traitement en flux continu (mode "exactement une fois" ou "au moins une fois")

Cette section décrit les modifications potentielles que vous pouvez apporter pour optimiser votre tâche. Pour déterminer si ces suggestions sont adaptées à votre charge de travail, tenez compte de la conception et des exigences de votre pipeline. Toutes les suggestions ne sont pas appropriées ni utiles pour tous les pipelines.

Avant d'apporter des modifications à grande échelle, testez-les sur de petits pipelines qui utilisent un sous-ensemble de vos données. Pour en savoir plus, consultez Exécuter de petits tests pour les grands jobs dans "Bonnes pratiques pour les grands pipelines par lot".

Lieu de travail

La plupart des jobs Dataflow interagissent avec d'autres services tels que les magasins de données et les systèmes de messagerie. Réfléchissez à leur emplacement.

  • Exécutez votre job dans la même région que les ressources qu'il utilise.
  • Créez votre bucket Cloud Storage pour stocker les fichiers de préproduction et temporaires de votre job dans la même région que votre job. Pour en savoir plus, consultez les options de pipeline gcpTempLocation et temp_location.

Ajuster les types de machines

Les ajustements suivants apportés aux VM de nœud de calcul peuvent améliorer la rentabilité.

  • Exécutez votre job avec le plus petit type de machine requis. Ajustez le type de machine en fonction des exigences du pipeline. Par exemple, les jobs de streaming avec des pipelines gourmands en ressources de processeur peuvent parfois bénéficier d'un changement de type de machine par rapport à celui par défaut. Pour en savoir plus, consultez Type de machine.
  • Pour les charges de travail exigeantes en mémoire ou en calcul, utilisez les types de machines appropriés. Pour en savoir plus, consultez Scores CoreMark des VM par famille.
  • Définissez le nombre initial de nœuds de calcul. Lorsqu'un job est mis à l'échelle, le travail doit être redistribué aux nouvelles VM. Si vous connaissez le nombre de nœuds de calcul dont vos jobs ont besoin, vous pouvez éviter ce coût en définissant le nombre initial de nœuds de calcul. Pour définir le nombre initial de nœuds de calcul, utilisez l'option de pipeline numWorkers ou num_workers.
  • Définissez le nombre maximal de nœuds de calcul. En définissant une valeur pour ce paramètre, vous pouvez potentiellement limiter le coût total de votre job. Lorsque vous testez le pipeline pour la première fois, commencez par un maximum relativement faible. Augmentez ensuite la valeur jusqu'à ce qu'elle soit suffisamment élevée pour exécuter une charge de travail de production. Tenez compte des SLO de votre pipeline avant de définir un maximum. Pour en savoir plus, consultez la section Autoscaling horizontal.
  • Utilisez l'adaptation des ressources pour personnaliser les besoins en ressources d'étapes de pipeline spécifiques.
  • Certains pipelines bénéficient de l'utilisation de GPU. Pour en savoir plus, consultez GPU avec Dataflow. En utilisant le fitting approprié, vous pouvez configurer des GPU pour des étapes spécifiques du pipeline.
  • Assurez-vous de disposer d'une bande passante réseau suffisante pour accéder aux données de vos VM de nœud de calcul, en particulier lorsque vous devez accéder à des données sur site.

Optimiser les paramètres pour les jobs par lot

Cette section fournit des suggestions pour optimiser les paramètres d'exécution des jobs par lot. Pour les jobs par lot, les étapes du job s'exécutent de manière séquentielle, ce qui peut affecter les performances et les coûts.

Utiliser la planification flexible des ressources

Si votre job par lot n'est pas sensible au temps, envisagez d'utiliser la planification flexible des ressources (FlexRS). FlexRS réduit les coûts de traitement par lot en trouvant le meilleur moment pour démarrer le job, puis en utilisant une combinaison d'instances de VM préemptives et de VM standards. Les VM préemptives sont disponibles à un prix beaucoup plus bas que les VM standards, ce qui peut réduire le coût total. En utilisant une combinaison de VM préemptives et standards, FlexRS contribue à garantir que votre pipeline progresse même si Compute Engine préempte les VM préemptives.

Éviter d'exécuter des tâches très petites

Si possible, évitez d'exécuter des jobs qui traitent de très petites quantités de données. Si possible, exécutez moins de tâches sur des ensembles de données plus volumineux. Le démarrage et l'arrêt des VM de nœud de calcul entraînent des coûts. Par conséquent, l'exécution de moins de jobs sur plus de données peut améliorer l'efficacité.

Assurez-vous que Dataflow Shuffle est activé. Les tâches par lot utilisent Dataflow Shuffle par défaut.

Ajuster les paramètres d'autoscaling

Par défaut, les jobs par lot utilisent l'autoscaling. Pour certains jobs, tels que les jobs de courte durée, l'autoscaling n'est pas nécessaire. Si vous pensez que votre pipeline ne bénéficie pas de l'autoscaling, désactivez-le. Pour en savoir plus, consultez Autoscaling horizontal.

Vous pouvez également utiliser le scaling dynamique de threads pour permettre à Dataflow d'ajuster le nombre de threads en fonction de l'utilisation du processeur. Vous pouvez également définir explicitement le nombre de threads par nœud de calcul à l'aide de l'option de pipeline numberOfWorkerHarnessThreads ou number_of_worker_harness_threads si vous connaissez le nombre optimal de threads pour le job.

Arrêter les tâches de longue durée

Configurez vos jobs pour qu'ils s'arrêtent automatiquement s'ils dépassent une durée d'exécution prédéterminée. Si vous savez approximativement combien de temps votre job prendra à s'exécuter, utilisez l'option de service max_workflow_runtime_walltime_seconds pour arrêter automatiquement le job s'il s'exécute plus longtemps que prévu.

Optimiser les paramètres des jobs de flux

Cette section fournit des suggestions pour optimiser les paramètres d'exécution des jobs de streaming.

Utiliser Streaming Engine

Streaming Engine transfère l'exécution du pipeline depuis les VM de nœud de calcul vers le backend du service Dataflow pour une efficacité accrue. Nous vous recommandons d'utiliser Streaming Engine pour vos jobs de streaming.

Envisager le mode "au moins une fois"

Dataflow accepte deux modes pour les tâches de traitement en flux continu : le mode "exactement une fois" et le mode "au moins une fois". Si votre charge de travail peut tolérer les enregistrements en double, le mode "au moins une fois" peut considérablement réduire le coût de votre job. Avant d'activer le mode "au moins une fois", évaluez si votre pipeline nécessite un traitement de type "exactement une fois" des enregistrements. Pour en savoir plus, consultez Définir le mode de traitement en flux continu du pipeline.

Choisir votre modèle de tarification

Les remises sur engagement d'utilisation pour les jobs de traitement de flux Dataflow offrent des prix réduits en échange de votre engagement à utiliser de manière continue une certaine quantité de ressources de calcul Dataflow pendant un an ou plus. Les remises sur engagement d'utilisation de Dataflow sont utiles lorsque vos dépenses en capacité de calcul Dataflow pour les jobs de traitement de flux impliquent un minimum prévisible sur lequel vous pouvez vous engager pour au moins un an. En utilisant des remises sur engagement d'utilisation, vous pouvez potentiellement réduire le coût de vos jobs Dataflow.

Vous pouvez également envisager d'utiliser la facturation basée sur les ressources. Avec la facturation basée sur les ressources, les ressources Streaming Engine utilisées par votre job sont mesurées et quantifiées en unités de calcul Streaming Engine. Vous êtes facturé pour le processeur et la mémoire des nœuds de calcul et pour les unités de calcul Streaming Engine.

Ajuster les paramètres d'autoscaling

Utilisez des indications d'autoscaling pour ajuster vos paramètres d'autoscaling. Pour en savoir plus, consultez Ajuster l'autoscaling horizontal pour les pipelines de traitement en flux continu. Pour les jobs de traitement en flux continu qui utilisent Streaming Engine, vous pouvez mettre à jour les paramètres d'optimisation automatique sans arrêter ni remplacer le job. Pour en savoir plus, consultez Mise à jour des options de job en cours.

Si vous pensez que votre pipeline ne bénéficie pas de l'autoscaling, désactivez-le. Pour en savoir plus, consultez Autoscaling horizontal.

Si vous connaissez le nombre optimal de threads pour le job, définissez explicitement le nombre de threads par nœud de calcul à l'aide de l'option de pipeline numberOfWorkerHarnessThreads ou number_of_worker_harness_threads.

Arrêter les tâches de longue durée

Dans le cas des jobs de traitement en flux continu, Dataflow relance indéfiniment les éléments de travail ayant échoué. Le job n'est pas arrêté. Cependant, le job peut se bloquer jusqu'à ce que le problème soit résolu. Créez des règles de surveillance pour détecter les signes d'un pipeline bloqué, tels qu'une augmentation de la latence du système et une diminution de la fraîcheur des données. Mettez en œuvre la journalisation des erreurs dans le code de votre pipeline pour vous aider à identifier les éléments de travail qui échouent de manière répétée.

Performances des pipelines

Les pipelines qui s'exécutent plus rapidement peuvent coûter moins cher. Les facteurs suivants peuvent affecter les performances du pipeline :

  • Parallélisme disponible pour votre job
  • L'efficacité des transformations, des connecteurs d'E/S et des codeurs utilisés dans le pipeline
  • Emplacement des données

Pour améliorer les performances du pipeline, la première étape consiste à comprendre le modèle de traitement :

  • En savoir plus sur le modèle Apache Beam et le modèle d'exécution Apache Beam
  • En savoir plus sur le cycle de vie du pipeline, y compris sur la façon dont Dataflow gère la parallélisation et les stratégies d'optimisation qu'il utilise. Les jobs Dataflow utilisent plusieurs VM de nœud de calcul, et chaque nœud de calcul exécute plusieurs threads. Les groupes d'éléments d'un PCollection sont distribués à chaque thread de nœud de calcul.

Suivez ces bonnes pratiques lorsque vous écrivez le code de votre pipeline :

Journalisation

Suivez ces bonnes pratiques lorsque vous enregistrez des journaux :

Tests

Tester votre pipeline présente de nombreux avantages, y compris pour les mises à niveau du SDK, le refactoring du pipeline et les révisions de code. De nombreuses optimisations, comme la refonte des transformations personnalisées gourmandes en ressources CPU, peuvent être testées localement sans avoir à exécuter de job sur Dataflow.

Testez les pipelines à grande échelle avec des données de test réalistes pour votre charge de travail, y compris le nombre total d'éléments pour les pipelines par lot, le nombre d'éléments par seconde pour les pipelines de streaming, la taille des éléments et le nombre de clés. Testez vos pipelines dans deux modes : en état stable et en traitant un grand nombre de tâches en attente pour simuler une reprise après plantage.

Pour en savoir plus sur la création de tests unitaires, de tests d'intégration et de tests de bout en bout, consultez Tester votre pipeline. Pour obtenir des exemples de tests, consultez le dépôt GitHub dataflow-ordered-processing.

Étapes suivantes