Optimiser les coûts : calcul, conteneurs et sans serveur

Last reviewed 2023-07-12 UTC

Ce document du framework d'architecture Google Cloud fournit des recommandations pour vous aider à optimiser le coût de vos machines virtuelles (VM), conteneurs et ressources sans serveur dans Google Cloud.

Les conseils de cette section sont destinés aux architectes, aux développeurs et aux administrateurs chargés du provisionnement et de la gestion des ressources de calcul pour les charges de travail dans le cloud.

Les ressources de calcul constituent la partie la plus importante de votre infrastructure cloud. Lorsque vous migrez vos charges de travail vers Google Cloud, le premier choix est bien souvent Compute Engine, qui vous permet de provisionner et de gérer efficacement les VM dans le cloud. Compute Engine est compatible avec de nombreux types de machines et est disponible dans toutes les régions Google Cloud. Les types de machines prédéfinis et personnalisés de Compute Engine vous permettent de provisionner des VM offrant une capacité de calcul semblable à celle de votre infrastructure sur site, ce qui vous permet d'accélérer le processus de migration. Avec Compute Engine, vous ne payez que l'infrastructure que vous utilisez et vous réalisez des économies considérables grâce à l'utilisation plus importante des ressources de calcul et aux remises automatiques proportionnelles à une utilisation soutenue.

En plus de Compute Engine, Google Cloud propose des conteneurs et des services de calcul sans serveur. L'approche sans serveur peut être plus rentable pour les nouveaux services qui ne sont pas toujours en cours d'exécution (par exemple, les API, le traitement de données et le traitement d'événements).

En plus des recommandations générales, ce document fournit des conseils pour vous aider à optimiser le coût de vos ressources de calcul lorsque vous utilisez les produits suivants :

  • Compute Engine
  • Google Kubernetes Engine (GKE)
  • Cloud Run
  • Cloud Functions
  • App Engine

Recommandations générales

Les recommandations suivantes s'appliquent à tous les services de calcul et de conteneurs ainsi qu'aux services sans serveur de Google Cloud qui sont décrits dans cette section.

Suivre l'utilisation et les coûts

Vous pouvez surveiller l'utilisation des ressources et les coûts à l'aide des outils et techniques suivants :

Contrôler le provisionnement des ressources

Suivez les recommandations suivantes pour contrôler la quantité de ressources provisionnées dans le cloud et l'emplacement où les ressources sont créées :

  • Pour vous assurer que la consommation de ressources et les coûts ne dépassent pas les prévisions, utilisez des quotas de ressources.
  • Provisionnez des ressources dans la région la moins coûteuse qui répond aux exigences de latence de votre charge de travail. Pour contrôler l'emplacement de provisionnement des ressources, vous pouvez utiliser la contrainte de règle d'administration gcp.resourceLocations.

Obtenir des remises sur engagement d'utilisation

Les remises sur engagement d'utilisation sont idéales pour les charges de travail ayant des besoins en ressources prévisibles. Après avoir migré votre charge de travail vers Google Cloud, déterminez le niveau de ressources minimum requis et obtenez des remises plus importantes sur votre engagement d'utilisation. Par exemple, vous pouvez souscrire un engagement d'un ou trois ans et obtenir une remise importante sur les tarifs des VM Compute Engine.

Automatiser le suivi des coûts à l'aide de libellés

Définissez et attribuez des libellés de manière cohérente. Vous trouverez ci-dessous des exemples d'utilisation de libellés pour automatiser le suivi des coûts :

  • Pour les VM utilisées exclusivement par les développeurs pendant les heures d'ouverture, attribuez le libellé env: development. Vous pouvez utiliser Cloud Scheduler pour configurer une fonction Cloud Functions sans serveur afin d'arrêter ces VM après les heures d'ouverture et les redémarrer si nécessaire.

  • Pour une application comprenant plusieurs services Cloud Run et instances Cloud Functions, attribuez un libellé cohérent à toutes les ressources Cloud Run et Cloud Functions. Identifiez les domaines les plus coûteux et prenez les mesures nécessaires pour réduire les coûts.

Personnaliser les rapports de facturation

Configurez vos rapports Cloud Billing en configurant les filtres requis et en regroupant les données si nécessaire (par exemple, par projets, services ou libellés).

Promouvoir une culture de l'économie

Formez vos développeurs et vos opérateurs sur votre infrastructure cloud. Créez et faites la promotion de programmes de formation regroupant cours traditionnels ou en ligne, groupes de discussion, examens par les pairs, programmation en binôme et jeux en lien avec la culture de l'économie. Comme indiqué dans l'étude de l'équipe DORA de Google, la culture organisationnelle est un facteur clé pour améliorer les performances, réduire les retraitements et le surmenage ou encore pour optimiser les coûts. En offrant aux employés une visibilité sur le coût de leurs ressources, vous les aidez à aligner leurs priorités et leurs activités sur les objectifs et les contraintes de l'entreprise.

Compute Engine

Cette section fournit des conseils pour vous aider à optimiser le coût de vos ressources Compute Engine. En plus de ces conseils, nous vous recommandons de suivre les recommandations générales décrites précédemment.

Comprendre le modèle de facturation

Pour en savoir plus sur les options de facturation de Compute Engine, consultez la page Tarifs.

Analyser la consommation de ressources

Pour mieux comprendre la consommation de ressources dans Compute Engine, exportez les données d'utilisation vers BigQuery. Interrogez le datastore BigQuery pour analyser les tendances d'utilisation des processeurs virtuels de votre projet et déterminer le nombre de processeurs virtuels que vous pouvez récupérer. Si vous avez défini des seuils pour le nombre de cœurs par projet, analysez les tendances d'utilisation afin d'identifier les anomalies et de prendre des mesures correctives.

Récupérer des ressources inactives

Utilisez les recommandations suivantes pour identifier et récupérer les VM et les disques inutilisés, par exemple les VM des projets de démonstration de faisabilité qui ont depuis été abandonnés :

  • Utilisez l'outil de recommandation de VM inactives pour identifier les VM inactives et les disques persistants, en fonction des métriques d'utilisation.
  • Avant de supprimer des ressources, évaluez l'impact potentiel de l'action et envisagez de recréer les ressources si nécessaire.
  • Avant de supprimer une VM, envisagez de prendre un instantané. Lorsque vous supprimez une VM, les disques associés sont supprimés sauf si vous avez sélectionné l'option Conserver le disque.
  • Si possible, envisagez d'arrêter les VM au lieu de les supprimer. Lorsque vous arrêtez une VM, l'instance est arrêtée mais les disques et les adresses IP sont conservés jusqu'à ce que vous les dissociez de l'instance ou que vous les supprimiez.

Ajuster la capacité en fonction de la demande

Programmez vos VM pour qu'elles démarrent et s'arrêtent automatiquement. Par exemple, si une VM n'est utilisée que huit heures par jour pendant cinq jours par semaine (soit 40 heures dans la semaine), vous pouvez réduire les coûts de 75 % en arrêtant la VM pendant les 128 heures de la semaine pendant lesquelles elle n'est pas utilisée.

Procédez à un autoscaling de la capacité de calcul en fonction de la demande, à l'aide de groupes d'instances gérés. Vous pouvez procéder à un autoscaling de la capacité en fonction des métriques importantes pour votre entreprise (par exemple, l'utilisation du processeur ou la capacité d'équilibrage de charge).

Choisir les types de machines appropriés

Dimensionnez vos VM pour répondre aux exigences de calcul de votre charge de travail en utilisant l'outil de recommandation du type de machine d'une VM.

Pour les charges de travail ayant des besoins en ressources prévisibles, adaptez le type de machine à vos besoins et réalisez des économies en utilisant des VM personnalisées.

Pour les charges de travail de traitement par lot tolérantes aux pannes, envisagez d'utiliser des VM spot. Les calculs haute performance (HPC), le big data, le transcodage multimédia, les pipelines d'intégration et de diffusion continues (CI/CD) et les applications Web sans état sont des exemples de charges de travail pouvant être déployées sur des VM Spot. Pour obtenir un exemple de réduction des coûts d'analyse de Descartes Labs en utilisant des VM préemptives (l'ancienne version des VM Spot) pour traiter les images satellite, consultez l'étude de cas de Descartes Labs.

Évaluer les options d'attribution de licences

Lorsque vous migrez des charges de travail tierces vers Google Cloud, vous pouvez peut-être réduire les coûts en utilisant vos propres licences (BYOL). Par exemple, pour déployer des VM Microsoft Windows Server, vous pouvez créer et utiliser une image BYOL Windows personnalisée plutôt que d'utiliser une image payante qui entraîne des coûts supplémentaires pour la licence tierce. Vous ne payez alors que pour l'infrastructure de VM que vous utilisez sur Google Cloud. Cette stratégie vous permet de continuer à tirer profit de vos investissements existants en licences tierces.

Si vous décidez d'utiliser une approche BYOL, nous vous recommandons d'effectuer les opérations suivantes :

  • Provisionnez le nombre de cœurs de processeur requis indépendamment de la mémoire, en utilisant les types de machines personnalisés et en limitant le coût des licences tierces au nombre de cœurs de processeur dont vous avez besoin.
  • Réduisez le nombre de processeurs virtuels par cœur de 2 à 1 en désactivant le multithreading simultané pour réduire vos coûts de licence de 50 %.

Si vos charges de travail tierces nécessitent du matériel dédié pour répondre aux exigences de sécurité ou de conformité, vous pouvez utiliser vos propres licences sur des nœuds à locataire unique.

Google Kubernetes Engine

Cette section fournit des conseils pour vous aider à optimiser le coût de vos ressources GKE.

Outre les recommandations suivantes, consultez les recommandations générales décrites précédemment :

  • Utilisez GKE Autopilot pour permettre à GKE de maximiser l'efficacité de l'infrastructure de votre cluster. Vous n'avez pas besoin de surveiller l'état des nœuds, de gérer le bin-packing ni de calculer la capacité dont vos charges de travail ont besoin.
  • Ajustez l'autoscaling GKE à l'aide de l'autoscaler horizontal de pods (HPA), de l'autoscaler vertical de pods (VPA), de l'autoscaler de cluster (CA) ou du provisionnement automatique des nœuds en fonction des exigences de votre charge de travail.
  • Pour les charges de travail par lots non sensibles à la latence de démarrage, utilisez le profil d'autoscaling optimisation-utilisation afin d'améliorer l'utilisation du cluster.
  • Utilisez le provisionnement automatique des nœuds pour étendre l'autoscaler de cluster GKE afin de créer et supprimer efficacement des pools de nœuds en fonction des spécifications des pods en attente, sans surprovisionnement.
  • Utilisez des pools de nœuds distincts : un pool de nœuds statiques pour le chargement statique et des pools de nœuds dynamiques avec des groupes d'autoscaling de cluster pour les chargements dynamiques.
  • Utilisez des VM Spot pour les pools de nœuds Kubernetes lorsque vos pods sont tolérants aux pannes et peuvent s'arrêter en moins de 25 secondes. Associée à l'autoscaler de cluster GKE, cette stratégie vous permet de vous assurer que le pool de nœuds doté de VM moins coûteuses (dans ce cas, le pool de nœuds avec des VM spot) évolue en premier.
  • Choisissez des types de machines économiques (par exemple, E2, N2D, T2D) qui offrent un rapport performance-prix entre 20 et 40 % plus élevé.
  • Utilisez la mesure de l'utilisation de GKE pour analyser les profils d'utilisation de vos clusters par espace de noms et par libellé. Identifiez l'équipe ou l'application qui dépense le plus, l'environnement ou le composant à l'origine des pics d'utilisation ou de coûts, et l'équipe qui gaspille le plus de ressources.
  • Utilisez des quotas de ressources dans les clusters mutualisés afin d'empêcher les locataires d'utiliser plus que la part de ressources du cluster qui leur est attribuée.
  • Planifiez un scaling à la baisse automatique pour les environnements de développement et de test après les heures d'ouverture.
  • Suivez les bonnes pratiques pour exécuter des applications Kubernetes à coût maîtrisé sur GKE.

Cloud Run

Cette section fournit des conseils pour vous aider à optimiser le coût de vos ressources Cloud Run.

Outre les recommandations suivantes, consultez les recommandations générales décrites précédemment :

  • Ajustez le paramètre de simultanéité (par défaut : 80) pour réduire les coûts. Cloud Run détermine le nombre de requêtes à envoyer à une instance en fonction de l'utilisation du processeur et de la mémoire. En augmentant la simultanéité des requêtes, vous pouvez réduire le nombre d'instances requises.
  • Définissez une limite pour le nombre d'instances pouvant être déployées.
  • Estimez le nombre d'instances requises en vous basant sur la métrique Temps d'instance facturable. Par exemple, si la métrique affiche 100s/s, environ 100 instances ont été planifiées. Ajoutez à cela un tampon de 30 % pour préserver les performances. soit 130 instances pour 100 s/s de trafic.
  • Pour réduire l'impact des démarrages à froid, configurez un nombre minimal d'instances. Lorsque ces instances sont inactives, elles sont facturées au dixième du prix.
  • Suivez l'utilisation du processeur et ajustez les limites de processeur en conséquence.
  • Utilisez la gestion du trafic pour déterminer une configuration optimale des coûts.
  • Envisagez d'utiliser Cloud CDN ou Firebase Hosting pour diffuser les éléments statiques.
  • Envisagez de déployer les applications Cloud Run qui gèrent des requêtes à l'échelle mondiale dans plusieurs régions, car le transfert de données intercontinental peut s'avérer coûteux. Cette conception est recommandée si vous utilisez un équilibreur de charge et un CDN.
  • Réduisez les temps de démarrage de vos instances, car ce temps de démarrage est également facturable.
  • Obtenez des remises sur engagement d'utilisation et bénéficiez d'une réduction pouvant atteindre 17 % sur le tarif à la demande pour un engagement d'un an.

Cloud Functions

Cette section fournit des conseils pour vous aider à optimiser le coût de vos ressources Cloud Functions.

Outre les recommandations suivantes, consultez les recommandations générales décrites précédemment :

  • Observez le temps d'exécution de vos fonctions. Effectuez des tests et des analyses comparatives pour concevoir la plus petite fonction possible pour satisfaire le seuil de performances requis.
  • Si vos charges de travail Cloud Functions s'exécutent en permanence, envisagez d'utiliser GKE ou Compute Engine pour les gérer. Les conteneurs ou les VM peuvent être des options moins coûteuses pour les charges de travail en cours d'exécution.
  • Limitez le nombre d'instances de fonction pouvant coexister.
  • Analysez les performances d'exécution des langages de programmation de Cloud Functions par rapport à la charge de travail de votre fonction. Les programmes dans les langages compilés présentent des démarrages à froid plus longs mais s'exécutent plus rapidement. Les programmes dans les langages interprétés sont plus lents mais ont des coûts de démarrage à froid inférieurs. Les fonctions simples et courtes qui s'exécutent fréquemment peuvent coûter moins cher dans un langage interprété.
  • Supprimez les fichiers temporaires écrits sur le disque local, qui est en fait un système de fichiers en mémoire. Les fichiers temporaires consomment de la mémoire allouée à votre fonction et persistent parfois entre les appels. Si vous ne les supprimez pas, une erreur de mémoire insuffisante peut se produire et déclencher un démarrage à froid, ce qui augmente le temps d'exécution et les coûts.

App Engine

Cette section fournit des conseils pour vous aider à optimiser le coût de vos ressources App Engine.

Outre les recommandations suivantes, consultez les recommandations générales décrites précédemment :

  • Définissez le nombre maximal d'instances en fonction de votre trafic et de la latence des requêtes. App Engine fait évoluer la capacité en fonction du trafic reçu par les applications. Vous pouvez contrôler les coûts en limitant le nombre d'instances qu'App Engine peut créer.
  • Pour limiter la mémoire ou le nombre de processeurs disponibles pour votre application, définissez une classe d'instance. Pour les applications nécessitant une utilisation intensive du processeur, allouez plus de processeurs. Testez plusieurs configurations pour déterminer la taille optimale.
  • Analysez votre charge de travail App Engine dans plusieurs langages de programmation. Par exemple, une charge de travail mise en œuvre dans un langage donné peut nécessiter moins d'instances et être moins coûteuse pour un volume de traitement identique à la même charge de travail programmée dans un autre langage.
  • Optimisez pour réduire les démarrages à froid. Si possible, réduisez les tâches nécessitant une utilisation intensive du processeur ou les tâches de longue durée qui se produisent dans le champ d'application global. Essayez de décomposer la tâche en opérations plus petites pouvant être "chargées en différé" dans le contexte d'une requête.
  • Si vous prévoyez un trafic intensif, configurez un nombre minimal d'instances inactives qui sont préalablement démarrées. Si vous ne prévoyez pas de trafic, vous pouvez configurer le nombre minimal d'instances inactives sur zéro.
  • Pour équilibrer les performances et les coûts, effectuez un test A/B en répartissant le trafic entre deux versions, chacune avec une configuration différente. Surveillez les performances et les coûts de chaque version, ajustez-les selon vos besoins et décidez de la configuration vers laquelle envoyer le trafic.
  • Configurez la simultanéité des requêtes et définissez un nombre de requêtes simultanées maximal supérieur à celui par défaut. Plus le nombre de requêtes que chaque instance peut traiter simultanément est important, plus vous pouvez utiliser les instances existantes efficacement pour diffuser le trafic.

Étape suivante