Ce principe du pilier "Durabilité" du Google Cloud Well-Architected Framework fournit des recommandations pour vous aider à optimiser l'utilisation des ressources par vos charges de travail dans Google Cloud.
Présentation du principe
L'optimisation de l'utilisation des ressources est essentielle pour améliorer la durabilité de votre environnement cloud. Chaque ressource provisionnée, des cycles de calcul au stockage des données, a un impact direct sur la consommation d'énergie, l'intensité de l'eau et les émissions de carbone. Pour réduire l'empreinte écologique de vos charges de travail, vous devez faire des choix éclairés lorsque vous provisionnez, gérez et utilisez des ressources cloud.
Recommandations
Pour optimiser l'utilisation des ressources, tenez compte des recommandations des sections suivantes.
Mettre en œuvre un scaling automatisé et dynamique
Le scaling automatisé et dynamique garantit une utilisation optimale des ressources, ce qui permet d'éviter le gaspillage d'énergie dû à une infrastructure inactive ou surprovisionnée. La réduction du gaspillage d'énergie se traduit par une baisse des coûts et des émissions de carbone.
Utilisez les techniques suivantes pour mettre en œuvre une évolutivité automatisée et dynamique.
Utiliser le scaling horizontal
Le scaling horizontal est la technique de scaling privilégiée pour la plupart des applications cloud-first. Au lieu d'augmenter la taille de chaque instance, ce que l'on appelle le scaling vertical, vous ajoutez des instances pour répartir la charge. Par exemple, vous pouvez utiliser des groupes d'instances gérés (MIG) pour effectuer automatiquement un scaling horizontal d'un groupe de VM Compute Engine. Une infrastructure à scaling horizontal est plus résiliente, car la défaillance d'une instance n'affecte pas la disponibilité de l'application. Le scaling horizontal est également une technique efficace en termes de ressources pour les applications dont les niveaux de charge sont variables.
Configurer des règles de scaling appropriées
Configurez les paramètres d'autoscaling en fonction des exigences de vos charges de travail. Définissez des métriques et des seuils personnalisés spécifiques au comportement de l'application. Au lieu de vous fier uniquement à l'utilisation du processeur, tenez compte de métriques telles que la profondeur de la file d'attente pour les tâches asynchrones, la latence des requêtes et les métriques d'application personnalisées. Pour éviter un scaling fréquent et inutile ou un flapping, définissez des règles de scaling claires. Par exemple, pour les charges de travail que vous déployez dans Google Kubernetes Engine (GKE), configurez une règle d'autoscaling de cluster appropriée.
Combiner l'autoscaling réactif et proactif
Avec le scaling réactif, le système s'adapte en fonction des variations de charge en temps réel. Cette technique convient aux applications qui présentent des pics de charge imprévisibles.
Le scaling proactif est adapté aux charges de travail présentant des schémas prévisibles, tels que des horaires d'ouverture quotidiens fixes et la génération de rapports hebdomadaires. Pour ces charges de travail, utilisez l'autoscaling programmé pour préprovisionner les ressources afin qu'elles puissent gérer un niveau de charge anticipé. Cette technique évite une course aux ressources et garantit une expérience utilisateur plus fluide et plus efficace. Cette technique vous aide également à planifier de manière proactive les pics de charge connus, tels que les événements promotionnels majeurs et les efforts marketing ciblés.
Les services et fonctionnalités gérés deGoogle Cloud , tels que GKE Autopilot, Cloud Run et les MIG, gèrent automatiquement le scaling proactif en apprenant à partir des modèles de vos charges de travail. Par défaut, lorsqu'un service Cloud Run ne reçoit aucun trafic, il effectue un scaling à zéro instance.
Concevoir des applications sans état
Pour qu'une application puisse évoluer horizontalement, ses composants doivent être sans état. Cela signifie que la session ou les données d'un utilisateur spécifique ne sont pas liées à une seule instance de calcul. Lorsque vous stockez l'état de session en dehors de l'instance de calcul, par exemple dans Memorystore pour Redis, n'importe quelle instance de calcul peut traiter les requêtes de n'importe quel utilisateur. Cette approche de conception permet un scaling horizontal fluide et efficace.
Utiliser la planification et les lots
Le traitement par lot est idéal pour les charges de travail volumineuses et non urgentes. Les jobs par lot peuvent vous aider à optimiser vos charges de travail en termes d'efficacité énergétique et de coût.
Utilisez les techniques suivantes pour implémenter la planification et les jobs par lot.
Planifier pour une faible intensité carbone
Planifiez l'exécution de vos jobs par lot dans des régions à faible émission de carbone et pendant les périodes où le réseau électrique local présente un pourcentage élevé d'énergie propre. Pour identifier les moments de la journée où l'intensité carbone est la plus faible dans une région, utilisez le rapport sur l'empreinte carbone.
Utiliser des VM Spot pour les charges de travail non critiques
Les VM Spot vous permettent de profiter de la capacité inutilisée de Compute Engine à un prix très avantageux. Les VM Spot peuvent être préemptées, mais elles offrent un moyen économique de traiter de grands ensembles de données sans avoir besoin de ressources dédiées et toujours actives. Les VM Spot sont idéales pour les jobs par lot non critiques et tolérants aux pannes.
Regrouper et paralléliser les jobs
Pour réduire les frais généraux liés au démarrage et à l'arrêt de jobs individuels, regroupez les jobs similaires dans un seul lot volumineux. Exécutez ces charges de travail à volume élevé sur des services tels que Batch. Le service provisionne et gère automatiquement l'infrastructure nécessaire, ce qui permet d'optimiser l'utilisation des ressources.
Utiliser des services gérés
Les services gérés tels que Batch et Dataflow gèrent automatiquement le provisionnement, la planification et la surveillance des ressources. La plate-forme cloud gère l'optimisation des ressources. Vous pouvez vous concentrer sur la logique de l'application. Par exemple, Dataflow effectue un scaling automatique du nombre de nœuds de calcul en fonction du volume de données dans le pipeline, ce qui vous évite de payer pour des ressources inactives.
Faire correspondre les familles de machines de VM aux exigences de la charge de travail
Les types de machines que vous pouvez utiliser pour vos VM Compute Engine sont regroupés en familles de machines, qui sont optimisées pour différentes charges de travail. Choisissez les familles de machines appropriées en fonction des exigences de vos charges de travail.
| Famille de machines | Recommandé pour les types de charges de travail | Conseils en développement durable |
|---|---|---|
| Instances à usage général : ces instances offrent un rapport équilibré entre processeur et mémoire. | Serveurs Web, microservices, bases de données de petite à moyenne taille et environnements de développement. | La série E2 est très rentable et économe en énergie grâce à son allocation dynamique des ressources. Les séries C4A, N4A et Tau T2A utilisent des processeurs basés sur l'architecture ARM, qui sont souvent plus économes en énergie par unité de performance pour les charges de travail à grande échelle. |
| Instances optimisées pour le calcul : ces instances offrent un ratio vCPU/mémoire élevé et des performances élevées par cœur. | Calcul hautes performances (HPC), traitement par lot, serveurs de jeux et analyse de données basée sur le processeur. | Une instance optimisée pour le calcul vous permet d'effectuer plus rapidement des tâches nécessitant une utilisation intensive du processeur, ce qui réduit le temps de calcul total et la consommation d'énergie du job. |
| Instances à mémoire optimisée : ces instances sont conçues pour les charges de travail nécessitant une grande quantité de mémoire. | Vastes bases de données en mémoire et entrepôts de données, tels que SAP HANA ou l'analyse en mémoire. | Les instances à mémoire optimisée permettent de consolider les charges de travail gourmandes en mémoire sur un nombre réduit de nœuds physiques. Cette consolidation réduit l'énergie totale requise par rapport à l'utilisation de plusieurs instances plus petites. La mémoire hautes performances réduit la latence d'accès aux données, ce qui peut réduire la durée totale pendant laquelle le processeur est actif. |
| Instances optimisées pour le stockage : ces instances fournissent un stockage SSD local à haut débit et à faible latence. | Entreposage de données, analyse des journaux, et bases de données SQL, NoSQL et vectorielles. | Les instances optimisées pour le stockage traitent des ensembles de données volumineux localement, ce qui permet d'éliminer l'énergie utilisée pour la sortie de données réseau entre différents emplacements. Lorsque vous utilisez le stockage local pour des tâches à IOPS élevées, vous évitez de surprovisionner plusieurs instances standards. |
| Instances optimisées pour les accélérateurs : ces instances sont conçues pour les charges de travail accélérées par GPU et TPU, telles que l'IA, le ML et le HPC. | l'entraînement et l'inférence de modèles de ML, et les simulations scientifiques. | Les TPU sont conçus pour une efficacité énergétique optimale. Ils offrent un plus grand nombre de calculs par watt. Une instance accélérée par GPU, comme la série A3 avec des GPU NVIDIA H100, peut être beaucoup plus économe en énergie pour l'entraînement de grands modèles qu'une alternative n'utilisant que des CPU. Bien qu'une instance accélérée par GPU ait une consommation d'énergie nominale plus élevée, la tâche est effectuée beaucoup plus rapidement. |
Passer aux derniers types de machines
L'utilisation des types de machines les plus récents peut contribuer à améliorer la durabilité. Lorsque les types de machines sont mis à jour, ils sont souvent conçus pour être plus économes en énergie et offrir de meilleures performances par watt. Les VM qui utilisent les types de machines les plus récents peuvent effectuer la même quantité de travail avec une consommation d'énergie inférieure.
Les CPU, les GPU et les TPU bénéficient souvent des avancées techniques de l'architecture des puces, telles que les suivantes :
- Cœurs spécialisés : les progrès réalisés dans les processeurs incluent souvent des cœurs ou des instructions spécialisés pour les charges de travail courantes. Par exemple, les processeurs peuvent disposer de cœurs dédiés aux opérations vectorielles ou d'accélérateurs d'IA intégrés. Lorsque ces tâches sont déchargées du processeur principal, elles sont effectuées plus efficacement et consomment moins d'énergie.
- Gestion de l'alimentation améliorée : les progrès réalisés dans les architectures de puces incluent souvent des fonctionnalités de gestion de l'alimentation plus sophistiquées, telles que l'ajustement dynamique de la tension et de la fréquence en fonction de la charge de travail. Ces fonctionnalités de gestion de l'alimentation permettent aux puces de fonctionner à une efficacité maximale et de passer en mode basse consommation lorsqu'elles sont inactives, ce qui réduit la consommation d'énergie.
Les améliorations techniques de l'architecture des puces offrent les avantages directs suivants en termes de durabilité et de coût :
- Performances par watt plus élevées : il s'agit d'une métrique clé pour le développement durable. Par exemple, les VM C4 affichent un rapport prix/performances 40% supérieur à celui des VM C3 pour la même consommation d'énergie. Le processeur C4A offre une efficacité énergétique 60% supérieure à celle des processeurs x86 comparables. Ces capacités de performances vous permettent d'effectuer des tâches plus rapidement ou d'utiliser moins d'instances pour la même charge.
- Réduction de la consommation d'énergie totale : grâce à des processeurs améliorés, les ressources de calcul sont utilisées pendant une durée plus courte pour une tâche donnée, ce qui réduit la consommation d'énergie globale et l'empreinte carbone. L'impact carbone est particulièrement élevé pour les charges de travail de courte durée et nécessitant beaucoup de ressources de calcul, comme les jobs par lot et l'entraînement de modèles de ML.
- Utilisation optimale des ressources : les types de machines les plus récents sont souvent mieux adaptés aux logiciels modernes et sont plus compatibles avec les fonctionnalités avancées des plates-formes cloud. Ces types de machines permettent généralement une meilleure utilisation des ressources, ce qui réduit le besoin de surprovisionnement et permet de s'assurer que chaque watt d'énergie est utilisé de manière productive.
Déployer des applications conteneurisées
Vous pouvez utiliser des services entièrement gérés basés sur des conteneurs, tels que GKE et Cloud Run, dans le cadre de votre stratégie de cloud computing durable. Ces services permettent d'optimiser l'utilisation des ressources et d'automatiser leur gestion.
Exploiter la capacité de scaling à zéro instance de Cloud Run
Cloud Run fournit un environnement sans serveur géré qui effectue un scaling automatique des instances jusqu'à zéro lorsqu'il n'y a pas de trafic entrant pour un service ou lorsqu'un job est terminé. L'autoscaling permet d'éliminer la consommation d'énergie par l'infrastructure inactive. Les ressources ne sont alimentées que lorsqu'elles traitent activement des requêtes. Cette stratégie est très efficace pour les charges de travail intermittentes ou basées sur des événements. Pour les charges de travail d'IA, vous pouvez utiliser des GPU avec Cloud Run, ce qui vous permet de consommer et de payer les GPU uniquement lorsqu'ils sont utilisés.
Automatiser l'optimisation des ressources à l'aide de GKE
GKE est une plate-forme d'orchestration de conteneurs qui garantit que les applications n'utilisent que les ressources dont elles ont besoin. Pour vous aider à automatiser l'optimisation des ressources, GKE propose les techniques suivantes :
- Bin packing : GKE Autopilot regroupe intelligemment plusieurs conteneurs sur les nœuds disponibles. Le bin packing maximise l'utilisation de chaque nœud et réduit le nombre de nœuds inactifs ou sous-utilisés, ce qui contribue à réduire la consommation d'énergie.
- Autoscaling horizontal des pods (AHP) : avec l'autoscaling horizontal des pods, le nombre d'instances répliquées de conteneurs (pods) est ajusté automatiquement en fonction de métriques prédéfinies, telles que l'utilisation du processeur ou des métriques personnalisées spécifiques à l'application. Par exemple, si votre application subit un pic de trafic, GKE ajoute des pods pour répondre à la demande. Lorsque le trafic diminue, GKE réduit le nombre de pods. Ce scaling dynamique évite le surprovisionnement des ressources, ce qui vous évite de payer ou d'alimenter une capacité de calcul inutile.
- Autoscaling vertical des pods (VPA) : vous pouvez configurer GKE pour qu'il ajuste automatiquement les allocations et les limites de processeur et de mémoire pour chaque conteneur. Cette configuration garantit qu'un conteneur ne se voit pas allouer plus de ressources que nécessaire, ce qui permet d'éviter le surprovisionnement des ressources.
- Autoscaling multidimensionnel des pods GKE : pour les charges de travail complexes, vous pouvez configurer simultanément AHP horizontal et l'autoscaling vertical des pods afin d'optimiser à la fois le nombre de pods et la taille de chaque pod. Cette technique permet de garantir l'empreinte énergétique la plus faible possible pour les performances requises.
- Ordonnancement basé sur la topologie (TAS) : le TAS améliore l'efficacité du réseau pour les charges de travail d'IA et de ML dans GKE en plaçant les pods en fonction de la structure physique de l'infrastructure du centre de données. TAS colocalise stratégiquement les charges de travail pour minimiser les sauts réseau. Cette colocation permet de réduire la latence de communication et la consommation d'énergie. En optimisant l'alignement physique des nœuds et du matériel spécialisé, TAS accélère l'exécution des tâches et maximise l'efficacité énergétique des charges de travail d'IA et de ML à grande échelle.
Configurer la planification tenant compte des émissions de carbone
Chez Google, nous déplaçons continuellement nos charges de travail vers les emplacements et les heures qui fournissent l'électricité la plus propre. Nous réutilisons également les anciens équipements pour d'autres cas d'utilisation. Vous pouvez utiliser cette stratégie de planification basée sur l'empreinte carbone pour vous assurer que vos charges de travail conteneurisées utilisent de l'énergie propre.
Pour mettre en œuvre une planification basée sur l'empreinte carbone, vous avez besoin d'informations sur le mix énergétique qui alimente les centres de données d'une région en temps réel. Vous pouvez obtenir ces informations dans un format lisible par machine à partir du dépôt Énergie sans carbone pour les régions Google Cloud sur GitHub ou d'un ensemble de données public BigQuery. Les données sur le mix énergétique horaire et l'intensité carbone utilisées pour calculer l'ensemble de données annuel de Google sur le carbone proviennent d'Electricity Maps.
Pour implémenter la planification basée sur l'empreinte carbone, nous vous recommandons les techniques suivantes :
- Déplacement géographique : planifiez l'exécution de vos charges de travail dans des régions qui utilisent une plus grande proportion de sources d'énergie renouvelables. Cette approche vous permet d'utiliser des réseaux électriques plus propres.
- Décalage temporel : pour les charges de travail flexibles et non critiques, comme le traitement par lot, configurez-les pour qu'elles s'exécutent pendant les heures creuses ou lorsque l'énergie renouvelable est la plus abondante. Cette approche, appelée "décalage temporel", permet de réduire l'empreinte carbone globale en tirant parti de sources d'énergie plus propres lorsqu'elles sont disponibles.
Concevoir une reprise après sinistre économe en énergie
La préparation de la reprise après sinistre (DR) implique souvent de préprovisionner des ressources redondantes dans une région secondaire. Cependant, les ressources inactives ou sous-utilisées peuvent entraîner un gaspillage d'énergie important. Choisissez des stratégies de DR qui maximisent l'utilisation des ressources et minimisent l'impact carbone sans compromettre vos objectifs de temps de récupération (RTO).
Optimiser l'efficacité des démarrages à froid
Utilisez les approches suivantes pour minimiser ou éliminer les ressources actives dans votre région secondaire (DR) :
- Priorisez la reprise après sinistre à froid : désactivez les ressources de la région de reprise après sinistre ou définissez-les sur un état de scaling à zéro. Cette approche permet d'éliminer l'empreinte carbone des ressources de calcul inactives.
- Profitez du basculement sans serveur : utilisez des services sans serveur gérés comme Cloud Run pour les points de terminaison de reprise après sinistre. Cloud Run effectue un scaling à zéro lorsqu'il n'est pas utilisé. Vous pouvez ainsi maintenir une topologie de reprise après sinistre qui ne consomme pas d'énergie tant que le trafic n'est pas redirigé vers la région de reprise après sinistre.
- Automatisez la récupération avec l'infrastructure as code (IaC) : au lieu de maintenir les ressources en cours d'exécution (à chaud) sur le site de reprise après sinistre, utilisez un outil IaC tel que Terraform pour provisionner rapidement des environnements uniquement lorsque cela est nécessaire.
Équilibrer la redondance et l'utilisation
La redondance des ressources est l'un des principaux facteurs de gaspillage d'énergie. Pour réduire la redondance, utilisez les approches suivantes :
- Privilégiez une configuration active-active plutôt qu'active-passive : dans une configuration active-passive, les ressources du site passif sont inactives, ce qui entraîne un gaspillage d'énergie. Une architecture actif-actif de taille optimale garantit que toutes les ressources provisionnées dans les deux régions diffusent activement le trafic. Cette approche vous aide à maximiser l'efficacité énergétique de votre infrastructure.
- Redondance de taille appropriée : ne répliquez les données et les services entre les régions que lorsque la réplication est nécessaire pour répondre aux exigences de haute disponibilité ou de reprise après sinistre. Chaque instance répliquée supplémentaire augmente le coût énergétique du stockage persistant et de la sortie réseau.