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
ettemp_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
ounum_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.
- Pour surveiller les erreurs de pipeline, consultez Nombre de journaux d'erreur de nœud de calcul.
- Pour résoudre les erreurs, consultez Résoudre les erreurs Dataflow.
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 :
- Dans la mesure du possible, utilisez la dernière version compatible du SDK Apache Beam. Consultez les notes de version pour comprendre les modifications apportées aux différentes versions.
- Suivez les bonnes pratiques pour écrire le code du pipeline.
- Suivez les bonnes pratiques concernant les connecteurs d'E/S.
- Pour les pipelines Python, envisagez d'utiliser des conteneurs personnalisés. Le pré-packaging des dépendances réduit le temps de démarrage des nœuds de calcul.
Journalisation
Suivez ces bonnes pratiques lorsque vous enregistrez des journaux :
- Une journalisation excessive peut nuire aux performances.
- Pour réduire le volume des journaux, envisagez de modifier le niveau de journalisation du pipeline. Pour en savoir plus, consultez Contrôler le volume des journaux.
- Ne journalisez pas les éléments individuels. Activez plutôt l'échantillonnage de données.
- Utilisez un modèle de lettre morte pour les erreurs par élément, au lieu de consigner chaque erreur.
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
- Planifier votre pipeline Dataflow
- Développer et tester des pipelines Dataflow
- Résoudre les problèmes liés aux pipelines