Ce document explique les bonnes pratiques pour optimiser vos jobs 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 surveiller et gérer ces coûts.
Pour en savoir plus sur le calcul des coûts des jobs Dataflow, consultez la page Tarifs de Dataflow.
Plusieurs facteurs peuvent avoir un impact important sur le coût d'un job :
- Paramètres d'exécution
- Performances des pipelines
- Exigences de débit des pipelines
Les sections suivantes fournissent des informations sur la surveillance de vos jobs, les facteurs qui ont un impact sur le coût des jobs et des suggestions pour améliorer l'efficacité des pipelines.
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 arrivant en retard, le coût global du pipeline peut être plus élevé.
- Si votre pipeline de traitement en flux continu présente des pics de données qui doivent être traités, il peut avoir besoin de 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 les performances et l'efficacité.
Surveillance des coûts
Utilisez les techniques suivantes pour prévoir et surveiller les coûts.
- Avant d'exécuter le pipeline en production, exécutez un ou plusieurs jobs plus petits sur un sous-ensemble de vos données. Pour de nombreux pipelines, cette technique peut fournir une estimation des coûts.
- Utilisez la page Cost (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 du job pour diverses raisons, telles que des 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 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 l'utilisation, les estimations de coûts et les données de tarification.
- 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 la section Utiliser Cloud Monitoring pour les pipelines Dataflow.
Surveillance des jobs
Surveillez vos jobs et identifiez les points où vous pouvez améliorer l'efficacité des pipelines.
- 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 d'exécution de chaque pipeline. Ces deux outils peuvent vous aider à comprendre votre pipeline et à identifier les étapes lentes, bloquées ou celles qui prennent trop de durée d'exécution.
- 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 des données sur les performances. La métrique
Distributionest particulièrement utile pour collecter des données sur les performances. - Pour les pipelines gourmands en ressources processeur, utilisez Cloud Profiler pour identifier les parties du code du 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'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 la section Personnaliser le tableau de bord de surveillance Dataflow.
Il n'est pas recommandé de consigner les métriques de traitement par élément dans les pipelines à volume élevé , car la journalisation est soumise à des limites et 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 un impact sur les coûts :
- Si vous exécutez un job de traitement en flux continu ou un 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
- Le mode d'autoscaling
- Le nombre initial et maximal de nœuds de calcul
- Le mode de traitement en flux continu (mode "exactement une fois" ou mode "au moins une fois")
Cette section décrit les modifications potentielles que vous pouvez apporter pour optimiser votre job. Pour déterminer si ces suggestions sont appropriées pour votre charge de travail, tenez compte de la conception et des exigences de votre pipeline. Toutes les suggestions ne sont pas appropriées ou 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 petites expériences pour les jobs volumineux dans "Bonnes pratiques pour les pipelines par lot volumineux".
Zone géographique concernée par l'offre d'emploi
La plupart des jobs Dataflow interagissent avec d'autres services tels que des magasins de données et des systèmes de messagerie. Tenez compte de 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 job temporaires et de préparation dans la même région que votre job. Pour en savoir plus, consultez les options de pipeline
gcpTempLocationettemp_location.
Ajuster les types de machines
Les ajustements suivants apportés aux VM de nœud de calcul peuvent améliorer l'efficacité des coûts.
- 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 traitement en flux continu avec des pipelines gourmands en ressources processeur bénéficient parfois d'un changement de type de machine par rapport à celui par défaut. Pour en savoir plus, consultez la section Type de machine.
- Pour les charges de travail gourmandes 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'un job est mis à l'échelle, le travail doit être redistribué aux nouvelles VM. Si vous savez de combien de nœuds de calcul 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
numWorkersounum_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'ajustement approprié pour personnaliser les exigences en ressources pour des étapes de pipeline spécifiques.
- Certains pipelines bénéficient de l'utilisation de GPU. Pour en savoir plus, consultez la section GPU avec Dataflow. En utilisant l'ajustement 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 à partir de vos VM de nœud de calcul, en particulier lorsque vous devez accéder aux données sur site.
Optimiser les paramètres des 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 permet de s'assurer que votre pipeline progresse même si Compute Engine préempte les VM préemptives.
Éviter d'exécuter des jobs très petits
Dans la mesure du possible, évitez d'exécuter des jobs qui traitent de très petites quantités de données. Si possible, exécutez moins de jobs 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 jobs 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 la section Autoscaling horizontal.
Vous pouvez également utiliser
le scaling dynamique des threads pour laisser
Dataflow 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 jobs 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 met à s'exécuter, utilisez l'
max_workflow_runtime_walltime_seconds
option de service
pour arrêter automatiquement le job s'il s'exécute plus longtemps que prévu.
Optimiser les paramètres des jobs de traitement en flux continu
Cette section fournit des suggestions pour optimiser les paramètres d'exécution des jobs de traitement en flux continu.
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 plus grande efficacité. Il est recommandé d'utiliser Streaming Engine pour vos jobs de traitement en flux continu.
Envisager le mode "au moins une fois"
Dataflow accepte deux modes pour les jobs 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 dupliqués, le mode "au moins une fois" peut réduire considérablement le coût de votre job. Avant d'activer le mode "au moins une fois", déterminez 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 jobs Dataflow.
Vous pouvez aussi 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 conseils d'autoscaling pour ajuster vos paramètres d'autoscaling. Pour en savoir plus, consultez la section 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'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.
Vous pouvez également définir explicitement le
nombre de threads par nœud de calcul à l'aide de l'option denumberOfWorkerHarnessThreads ou
number_of_worker_harness_threads
pipeline si vous connaissez le nombre optimal de threads pour le job.
Arrêter les jobs 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 la section Nombre d'entrées de journal d'erreurs de nœud de calcul.
- Pour résoudre les erreurs, consultez la section 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 des pipelines :
- Le parallélisme disponible pour votre job
- L'efficacité des transformations, des connecteurs d'E/S et des encodeurs utilisés dans le pipeline
- L'emplacement des données
La première étape pour améliorer les performances des pipelines consiste à comprendre le modèle de traitement :
- Découvrez le modèle Apache Beam et le modèle d'exécution Apache Beam.
- En savoir plus sur le cycle de vie des pipelines,
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 bundles d'éléments d'une
PCollectionsont distribués à chaque thread de travail.
Appliquez 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éemballage des dépendances réduit le temps de démarrage des nœuds de calcul.
Journalisation
Appliquez les bonnes pratiques suivantes lors de la journalisation :
- 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 la section 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 lettres mortes pour les erreurs par élément, au lieu de journaliser chaque erreur.
Tests
Le test de votre pipeline présente de nombreux avantages, notamment pour les mises à niveau du SDK, la refactorisation des pipelines et les examens de code. De nombreuses optimisations, telles que la refonte des transformations personnalisées gourmandes en ressources processeur, 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 traitement en flux continu, la taille des éléments et le nombre de clés. Testez vos pipelines dans deux modes : en état stable et en traitant un backlog important pour simuler une récupération après un 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
dataflow-ordered-processing
dépôt GitHub.