Bonnes pratiques pour optimiser les coûts Dataflow

Ce document décrit les bonnes pratiques à suivre pour optimiser vos tâches Dataflow afin de réduire 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 tâches Dataflow, consultez la page Tarifs de Dataflow.

Plusieurs facteurs peuvent avoir une incidence majeure sur le coût de la mission:

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

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

Définir des SLO

Avant de commencer à optimiser, 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, ses coûts peuvent être plus élevés.
  • Si vous devez traiter des données arrivées en retard, 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 de capacité supplémentaire, ce qui peut augmenter les coûts.

Surveiller les jobs

Pour déterminer comment optimiser votre tâche, vous devez d'abord comprendre son comportement. Utilisez les outils de surveillance Dataflow pour observer votre pipeline pendant son exécution. Utilisez ensuite ces informations pour améliorer les performances et l'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 de 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, telles que les remises contractuelles, mais il peut fournir une bonne référence pour l'optimisation des coûts. Pour en savoir plus, consultez la section Surveillance des coûts.
  • Exportez des données Cloud Billing vers BigQuery et effectuez une analyse des coûts sur les tables d'exportation de la facturation. L'exportation Cloud Billing vous permet d'exporter automatiquement des données de facturation détaillées Google Cloud tout au long de la journée vers un ensemble de données BigQuery. Les données de facturation incluent les données d'utilisation, les estimations de coût et les données tarifaires.
  • Pour éviter les coûts inattendus, créez des alertes de surveillance lorsque votre tâche Dataflow dépasse un seuil que vous définissez. Pour en savoir plus, consultez la section Utiliser Cloud Monitoring pour les pipelines Dataflow.

Surveillance des jobs

Surveillez vos tâches 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 tâches et des détails d'exécution pour chaque pipeline. Ces deux outils peuvent vous aider à comprendre votre pipeline et à identifier les étapes lentes, les étapes bloquées ou les étapes avec trop de temps réel.
  • Utilisez l'explorateur de métriques pour afficher les métriques détaillées des jobs Dataflow. Vous pouvez utiliser des métriques personnalisées pour collecter des données sur les performances. La métrique Distribution est particulièrement utile pour collecter des données de performances.
  • Pour les pipelines gourmands en CPU, utilisez Cloud Profiler pour identifier les parties du code de pipeline qui consomment le plus de ressources.
  • Utilisez l'échantillonnage de 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'une tâche en cours ou terminée, ces informations peuvent vous aider à déboguer les problèmes liés à votre pipeline.

Il est déconseillé de consigner les métriques de traitement par élément dans les pipelines à fort volume, car la journalisation est soumise à des limites et une journalisation excessive peut dégrader les performances des tâches.

Optimiser les paramètres d'exécution

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

  • Si vous exécutez une tâche par flux ou par lot
  • Le service que vous utilisez pour exécuter la tâche (Streaming Engine ou FlexRS, par exemple)
  • Type de machine, taille de disque et nombre de GPU dans les VM de nœud de calcul
  • Mode autoscaling
  • Nombre initial et maximal de nœuds de calcul
  • Le 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, examinez la conception et les exigences de votre pipeline. Toutes les suggestions ne sont pas adapté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 la section Exécuter de petits tests pour de grandes tâches dans "Bonnes pratiques pour les pipelines de traitement par lot de grande envergure".

Lieu de l'emploi

La plupart des tâches Dataflow interagissent avec d'autres services tels que les magasins de données et les systèmes de messagerie. Réfléchissez à l'emplacement de ces éléments.

  • Exécutez votre tâche dans la même région que les ressources qu'elle utilise.
  • Créez votre bucket Cloud Storage pour stocker les fichiers de préproduction et temporaires de la tâche dans la même région que votre tâche. 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 travail peuvent améliorer la rentabilité.

  • Exécutez votre tâche avec le type de machine le plus petit requis. Ajustez le type de machine si nécessaire en fonction des exigences du pipeline. Par exemple, il est parfois préférable de modifier le type de machine par défaut pour les tâches de streaming avec des pipelines gourmands en processeur. Pour en savoir plus, consultez la section 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 la section Scores CoreMark des VM par famille.
  • Définissez le nombre initial de nœuds de calcul. Lorsqu'une tâche est mise à l'échelle, le travail doit être redistribué aux nouvelles VM. Si vous connaissez le nombre de nœuds de calcul dont vos tâches 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 tâche. Lorsque vous testez le pipeline pour la première fois, commencez avec un nombre maximal 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.
  • Certains pipelines bénéficient de l'utilisation de GPU. Pour en savoir plus, consultez la page GPU avec Dataflow.
  • 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 des tâches par lot

Cette section fournit des suggestions pour optimiser les paramètres d'exécution des tâches par lot. Pour les tâches par lot, les étapes de la tâche 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 tâche par lot n'est pas urgente, envisagez d'utiliser la planification flexible des ressources (FlexRS). FlexRS réduit les coûts de traitement par lot en déterminant le meilleur moment pour démarrer la tâche, 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 de très petites tâches

Dans la mesure du possible, évitez d'exécuter des tâches 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. Démarrer et arrêter des VM de nœud de calcul entraîne des coûts. Par conséquent, exécuter moins de tâches sur plus de données peut améliorer l'efficacité.

Assurez-vous que la fonctionnalité Mélange Dataflow est activée. 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 certaines tâches, telles que les tâches 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 la section Autoscaling horizontal.

Vous pouvez également utiliser le scaling dynamique des threads pour permettre à Dataflow d'ajuster le nombre de threads en fonction de l'utilisation du processeur. Si vous connaissez le nombre optimal de threads pour la tâche, définissez explicitement le nombre de threads par nœud de calcul à l'aide des options de pipeline numberOfWorkerHarnessThreads ou number_of_worker_harness_threads.

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

Configurez vos tâches pour qu'elles s'arrêtent automatiquement si elles dépassent une durée d'exécution prédéterminée. Si vous savez approximativement combien de temps votre tâche prend à s'exécuter, utilisez l'option de service max_workflow_runtime_walltime_seconds pour arrêter automatiquement la tâche si elle s'exécute plus longtemps que prévu.

Optimiser les paramètres des jobs par flux

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

Utiliser Streaming Engine

Streaming Engine transfère l'exécution du pipeline depuis les VM de calcul vers le backend du service Dataflow pour plus d'efficacité. Nous vous recommandons d'utiliser Streaming Engine pour vos jobs par flux.

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 tâche. Avant d'activer le mode "au moins une fois", vérifiez si votre pipeline nécessite un traitement de type "exactement une fois" des enregistrements. Pour en savoir plus, consultez la section 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 tâches Dataflow.

Envisagez également 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 conseils d'autoscaling pour ajuster vos paramètres d'autoscaling. Pour en savoir plus, consultez la section Configurer l'autoscaling horizontal pour les pipelines de traitement en flux. Pour les jobs de traitement en flux continu qui utilisent Streaming Engine, vous pouvez mettre à jour les paramètres d'ajustement automatique sans arrêter ni remplacer le job. Pour en savoir plus, consultez la section 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 la section Autoscaling horizontal.

Si vous connaissez le nombre optimal de threads pour la tâche, définissez explicitement le nombre de threads par nœud de calcul à l'aide des options de pipeline numberOfWorkerHarnessThreads ou number_of_worker_harness_threads.

Arrêter des 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 tâche
  • Efficacité des transformations, des connecteurs d'E/S et des codeurs utilisés dans le pipeline
  • Emplacement des données

La première étape pour améliorer les performances du pipeline consiste à comprendre le modèle de traitement:

  • Découvrez le modèle Apache Beam et le modèle d'exécution Apache Beam.
  • Découvrez le cycle de vie du pipeline, y compris 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 bundles d'éléments d'un PCollection sont distribués à chaque thread de travail.

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

Journalisation

Suivez ces bonnes pratiques lorsque vous effectuez une journalisation:

Tests

Tester votre pipeline présente de nombreux avantages, y compris pour faciliter les mises à niveau du SDK, le refactoring du pipeline et les examens du code. De nombreuses optimisations, telles que la refonte de transformations personnalisées gourmandes en CPU, peuvent être testées localement sans avoir à exécuter une tâche sur Dataflow.

Testez des 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 lots, 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 traitement d'un grand arriéré pour simuler une récupération 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 la section Tester votre pipeline. Pour obtenir des exemples de tests, consultez le dépôt GitHub dataflow-ordered-processing.

Étape suivante