Well-Architected Framework: pilier "Optimisation des performances"

Last reviewed 2025-02-14 UTC

Ce pilier du Google Cloud Well-Architected Framework fournit des recommandations pour optimiser les performances des charges de travail dansGoogle Cloud.

Ce document est destiné aux architectes, aux développeurs et aux administrateurs qui planifient, conçoivent, déploient et gèrent des charges de travail dans Google Cloud.

Les recommandations de ce pilier peuvent aider votre organisation à fonctionner efficacement, à améliorer la satisfaction des clients, à augmenter les revenus et à réduire les coûts. Par exemple, lorsque le temps de traitement backend d'une application diminue, les utilisateurs bénéficient de temps de réponse plus rapides, ce qui peut augmenter la rétention des utilisateurs et améliorer les revenus.

Le processus d'optimisation des performances peut impliquer un compromis entre performances et coûts. Toutefois, l'optimisation des performances peut parfois vous aider à réduire les coûts. Par exemple, lorsque la charge augmente, l'autoscaling peut contribuer à fournir des performances prévisibles en veillant à ce que les ressources système ne soient pas surchargées. L'autoscaling vous permet également de réduire les coûts en supprimant les ressources inutilisées pendant les périodes de faible charge.

L'optimisation des performances est un processus continu, et non une activité ponctuelle. Le diagramme suivant illustre les étapes du processus d'optimisation des performances :

Processus d'optimisation des performances

Le processus d'optimisation des performances est un cycle continu qui comprend les étapes suivantes :

  1. Définissez les exigences : définissez des exigences de performances précises pour chaque couche de la pile d'applications avant de concevoir et de développer vos applications. Pour planifier l'allocation des ressources, tenez compte des principales caractéristiques de la charge de travail et des attentes en termes de performances.
  2. Conception et déploiement : utilisez des modèles de conception élastiques et évolutifs qui peuvent vous aider à répondre à vos exigences de performances.
  3. Surveiller et analyser : surveillez les performances en continu à l'aide des journaux, du traçage, des métriques et des alertes.
  4. Optimiser : envisagez de repenser la conception de vos applications à mesure qu'elles évoluent. Dimensionnez correctement les ressources cloud et utilisez de nouvelles fonctionnalités pour répondre aux exigences de performances en constante évolution.

    Comme illustré dans le schéma précédent, poursuivez le cycle de surveillance, de réévaluation des exigences et d'ajustement des ressources cloud.

Pour obtenir des principes et des recommandations d'optimisation des performances spécifiques aux charges de travail d'IA et de ML, consultez Perspective de l'IA et du ML : optimisation des performances dans le framework Well-Architected.

Principes de base

Les recommandations du pilier "Optimisation des performances" du framework Well-Architected sont associées aux principes fondamentaux suivants :

Contributeurs

Auteurs :

Autres contributeurs :

Planifier l'allocation des ressources

Ce principe du pilier d'optimisation des performances du Google Cloud Well-Architected Framework fournit des recommandations pour vous aider à planifier les ressources de vos charges de travail dansGoogle Cloud. Il souligne l'importance de définir des exigences précises avant de concevoir et de développer des applications pour le déploiement ou la migration vers le cloud.

Présentation des principes

Pour répondre aux exigences de votre entreprise, il est important de définir les exigences de performances de vos applications avant la conception et le développement. Définissez ces exigences de manière aussi précise que possible pour l'application dans son ensemble et pour chaque couche de la pile d'applications. Par exemple, dans la couche de stockage, vous devez tenir compte du débit et des opérations d'E/S par seconde (IOPS) dont les applications ont besoin.

Dès le début, planifiez la conception des applications en gardant à l'esprit les performances et l'évolutivité. Tenez compte de facteurs tels que le nombre d'utilisateurs, le volume de données et la croissance potentielle au fil du temps.

Les exigences de performances pour chaque charge de travail varient et dépendent du type de charge de travail. Chaque charge de travail peut contenir un mélange de systèmes et de services de composants qui présentent des ensembles uniques de caractéristiques de performances. Par exemple, un système responsable du traitement par lot périodique de grands ensembles de données a des exigences de performances différentes de celles d'une solution de bureau virtuel interactif. Vos stratégies d'optimisation doivent répondre aux besoins spécifiques de chaque charge de travail.

Sélectionnez les services et les fonctionnalités qui correspondent aux objectifs de performances de chaque charge de travail. Il n'existe pas de solution unique pour optimiser les performances. Lorsque vous optimisez chaque charge de travail, l'ensemble du système peut atteindre des performances et une efficacité optimales.

Tenez compte des caractéristiques de charge de travail suivantes qui peuvent influencer vos exigences de performances :

  • Archétype de déploiement : l'archétype de déploiement que vous sélectionnez pour une application peut influencer votre choix de produits et de fonctionnalités, qui déterminent ensuite les performances que vous pouvez attendre de votre application.
  • Placement des ressources : lorsque vous sélectionnez une région Google Cloudpour les ressources de votre application, nous vous recommandons de privilégier la faible latence pour les utilisateurs finaux, de respecter les réglementations sur la localisation des données et de vous assurer de la disponibilité des produits et services Google Cloud requis.
  • Connectivité réseau : choisissez des services réseau qui optimisent l'accès aux données et la diffusion de contenu. Profitez du réseau mondial, des dorsales à haut débit, des emplacements d'interconnexion et des services de mise en cache de Google Cloud.
  • Options d'hébergement d'applications : lorsque vous sélectionnez une plate-forme d'hébergement, vous devez évaluer les avantages et les inconvénients de chaque option en termes de performances. Par exemple, pensez aux plates-formes bare metal, aux machines virtuelles, aux conteneurs et aux plates-formes sans serveur.
  • Stratégie de stockage : choisissez une stratégie de stockage optimale en fonction de vos exigences en termes de performances.
  • Configurations des ressources : le type de machine, les IOPS et le débit peuvent avoir un impact significatif sur les performances. De plus, dès le début de la phase de conception, vous devez tenir compte des fonctionnalités de sécurité appropriées et de leur impact sur les ressources. Lorsque vous planifiez des fonctionnalités de sécurité, préparez-vous à accepter les compromis de performances nécessaires pour éviter tout effet imprévu.

Recommandations

Pour assurer une allocation optimale des ressources, tenez compte des recommandations des sections suivantes.

Configurer et gérer les quotas

Assurez-vous que votre application n'utilise que les ressources nécessaires, telles que la mémoire, le stockage et la puissance de traitement. Une surallocation peut entraîner des dépenses inutiles, tandis qu'une sous-allocation peut entraîner une dégradation des performances.

Pour tenir compte du scaling élastique et vous assurer que des ressources adéquates sont disponibles, surveillez régulièrement la capacité de vos quotas. De plus, suivez l'utilisation des quotas pour identifier les éventuelles contraintes de scaling ou les problèmes de surallocation, puis prenez des décisions éclairées concernant l'allocation des ressources.

Sensibiliser et informer

Informez vos utilisateurs sur les exigences de performances et fournissez des ressources pédagogiques sur les techniques efficaces de gestion des performances.

Pour évaluer les progrès et identifier les points à améliorer, documentez régulièrement les performances cibles et les performances réelles. Effectuez un test de charge sur votre application pour identifier les points d'arrêt potentiels et comprendre comment la mettre à l'échelle.

Surveiller les métriques de performances

Utilisez Cloud Monitoring pour analyser les tendances des métriques de performances, les effets des tests, définir des alertes pour les métriques critiques et effectuer des analyses rétrospectives.

Active Assist est un ensemble d'outils qui peuvent fournir des insights et des recommandations pour vous aider à optimiser l'utilisation des ressources. Ces recommandations peuvent vous aider à ajuster l'allocation des ressources et à améliorer les performances.

Profiter de l'élasticité

Ce principe du pilier d'optimisation des performances du Google Cloud Well-Architected Framework fournit des recommandations pour vous aider à intégrer l'élasticité, qui est la capacité à ajuster les ressources de manière dynamique en fonction des changements dans les exigences de charge de travail.

L'élasticité permet à différents composants d'un système de s'adapter indépendamment. Cette mise à l'échelle ciblée peut améliorer les performances et l'efficacité des coûts en allouant les ressources précisément là où elles sont nécessaires, sans les surprovisionner ni les sous-provisionner.

Présentation des principes

Les exigences de performances d'un système ont une incidence directe sur le moment et la manière dont le système évolue verticalement ou horizontalement. Vous devez évaluer la capacité du système et déterminer la charge que le système est censé gérer à la base. Vous devez ensuite déterminer comment le système doit réagir aux augmentations et aux diminutions de la charge.

Lorsque la charge augmente, le système doit effectuer un scaling horizontal horizontalement, verticalement ou les deux. Pour le scaling horizontal, ajoutez des nœuds de réplique afin de vous assurer que le système dispose d'une capacité globale suffisante pour répondre à la demande accrue. Pour le scaling vertical, remplacez les composants existants de l'application par des composants offrant plus de capacité, de mémoire et de stockage.

Lorsque la charge diminue, le système doit réduire la capacité (horizontalement, verticalement ou les deux).

Définissez les circonstances dans lesquelles le système augmente ou diminue sa capacité. Prévoyez de faire évoluer manuellement les systèmes pour les périodes connues de trafic élevé. Utilisez des outils tels que l'autoscaling, qui répond aux augmentations ou aux diminutions de la charge.

Recommandations

Pour profiter de l'élasticité, tenez compte des recommandations des sections suivantes.

Planifier les périodes de charge maximale

Vous devez planifier un chemin de scaling efficace pour les événements connus, tels que les périodes prévues d'augmentation de la demande des clients.

Envisagez de faire évoluer votre système avant les périodes de trafic élevé connues. Par exemple, si vous êtes une entreprise de vente au détail, vous vous attendez à ce que la demande augmente pendant les soldes saisonnières. Nous vous recommandons de mettre à l'effectuer un scaling horizontal manuellement vos systèmes avant ces périodes de soldes pour vous assurer qu'ils peuvent gérer immédiatement l'augmentation de la charge ou ajuster immédiatement les limites existantes. Dans le cas contraire, le système peut mettre plusieurs minutes à ajouter des ressources en réponse aux modifications en temps réel. La capacité de votre application peut ne pas augmenter assez rapidement, ce qui peut entraîner des retards pour certains utilisateurs.

Pour les événements inconnus ou inattendus, comme une augmentation soudaine de la demande ou du trafic, vous pouvez utiliser les fonctionnalités d'autoscaling pour déclencher un scaling élastique basé sur des métriques. Ces métriques peuvent inclure l'utilisation du processeur, la capacité de diffusion de l'équilibreur de charge, la latence et même des métriques personnalisées que vous définissez dans Cloud Monitoring.

Prenons l'exemple d'une application qui s'exécute sur un groupe d'instances géré (MIG) Compute Engine. Cette application exige que chaque instance fonctionne de manière optimale jusqu'à ce que l'utilisation moyenne du processeur atteigne 75 %. Dans cet exemple, vous pouvez définir une règle d'autoscaling qui crée des instances supplémentaires lorsque l'utilisation du processeur atteint le seuil. Ces instances nouvellement créées permettent d'absorber la charge, ce qui permet de s'assurer que l'utilisation moyenne du processeur reste à un taux optimal jusqu'à ce que le nombre maximal d'instances que vous avez configuré pour le MIG soit atteint. Lorsque la demande diminue, la règle d'autoscaling supprime les instances qui ne sont plus nécessaires.

Planifiez les réservations d'emplacements de ressources dans BigQuery ou ajustez les limites des configurations d'autoscaling dans Spanner à l'aide de l'autoscaler géré.

Utiliser le scaling prédictif

Si les composants de votre système incluent Compute Engine, vous devez évaluer si l'autoscaling prédictif est adapté à votre charge de travail. L'autoscaling prédictif prévoit la charge future en fonction des tendances historiques de vos métriques (par exemple, l'utilisation du processeur). Les prévisions sont recalculées toutes les deux ou trois minutes, ce qui permet à l'autoscaler d'adapter rapidement ses prévisions aux dernières variations de charge en date. Sans autoscaling prédictif, un autoscaler ne peut effectuer un scaling horizontal d'un groupe que de manière réactive, en fonction des variations de charge observées en temps réel. L'autoscaling prédictif fonctionne avec les données en temps réel et les données historiques pour répondre à la charge actuelle et prévue.

Implémenter des architectures sans serveur

Envisagez d'implémenter une architecture sans serveur avec des services sans serveur qui sont intrinsèquement élastiques, tels que les suivants :

Contrairement à l'autoscaling dans d'autres services qui nécessitent des règles d'ajustement (par exemple, Compute Engine), l'autoscaling sans serveur est instantané et peut être réduit à zéro ressource.

Utiliser le mode Autopilot pour Kubernetes

Pour les applications complexes qui nécessitent un contrôle plus poussé sur Kubernetes, envisagez le mode Autopilot dans Google Kubernetes Engine (GKE). Le mode Autopilot fournit l'automatisation et l'évolutivité par défaut. GKE effectue un scaling automatique des nœuds et des ressources en fonction du trafic. GKE gère les nœuds, crée des nœuds pour vos applications et configure les mises à niveau et les réparations automatiques.

Promouvoir la conception modulaire

Ce principe du pilier d'optimisation des performances du Google Cloud Well-Architected Framework fournit des recommandations pour vous aider à promouvoir une conception modulaire. Des composants modulaires et des interfaces claires peuvent permettre une mise à l'échelle flexible, des mises à jour indépendantes et une séparation future des composants.

Présentation des principes

Comprenez les dépendances entre les composants de l'application et les composants du système pour concevoir un système évolutif.

La conception modulaire offre flexibilité et résilience, que vous ayez initialement déployé une architecture monolithique ou de microservices. En décomposant le système en modules indépendants et bien définis avec des interfaces claires, vous pouvez mettre à l'échelle des composants individuels pour répondre à des demandes spécifiques.

La mise à l'échelle ciblée peut vous aider à optimiser l'utilisation des ressources et à réduire les coûts de plusieurs façons :

  • Elle ne provisionne que les ressources nécessaires à chaque composant et alloue moins de ressources aux composants moins exigeants.
  • Ajoute des ressources lors des périodes de fort trafic pour maintenir l'expérience utilisateur.
  • Supprime les ressources sous-utilisées sans compromettre les performances.

La modularité améliore également la facilité de maintenance. Les unités plus petites et autonomes sont plus faciles à comprendre, à déboguer et à mettre à jour, ce qui peut accélérer les cycles de développement et réduire les risques.

Bien que la modularité offre des avantages considérables, vous devez évaluer les compromis potentiels en termes de performances. L'augmentation de la communication entre les modules peut entraîner une latence et une surcharge. Recherchez un équilibre entre modularité et performances. Une conception très modulaire peut ne pas convenir à tous les cas d'utilisation. Lorsqu'il est essentiel d'obtenir de bonnes performances, une approche plus étroitement couplée peut être appropriée. La conception de systèmes est un processus itératif dans lequel vous examinez et affinez en permanence votre conception modulaire.

Recommandations

Pour promouvoir les conceptions modulaires, tenez compte des recommandations des sections suivantes.

Optez pour un couplage faible

Concevez une architecture faiblement couplée. Des composants indépendants avec un minimum de dépendances peuvent vous aider à créer des applications évolutives et résilientes. Lorsque vous planifiez les limites de vos services, vous devez tenir compte des exigences de disponibilité et d'évolutivité. Par exemple, si un composant a des exigences différentes de celles de vos autres composants, vous pouvez le concevoir comme un service autonome. Mettez en œuvre un plan de gestion des défaillances pour les sous-processus ou services moins importants qui n'ont pas d'incidence sur le temps de réponse des services principaux.

Concevoir des solutions pour la simultanéité et le parallélisme

Concevez votre application pour qu'elle puisse effectuer plusieurs tâches simultanément, comme traiter plusieurs requêtes utilisateur ou exécuter des tâches en arrière-plan pendant que les utilisateurs interagissent avec votre système. Divisez les tâches volumineuses en segments plus petits qui peuvent être traités en même temps par plusieurs instances de service. La concurrence des tâches vous permet d'utiliser des fonctionnalités telles que l'autoscaling pour augmenter l'allocation de ressources dans des produits tels que les suivants :

Modularité équilibrée pour une allocation flexible des ressources

Dans la mesure du possible, assurez-vous que chaque composant n'utilise que les ressources nécessaires (mémoire, stockage et puissance de traitement, par exemple) pour des opérations spécifiques. La surallocation des ressources peut entraîner des coûts inutiles, tandis que leur sous-allocation peut compromettre les performances.

Utiliser des interfaces bien définies

Assurez-vous que les composants modulaires communiquent efficacement grâce à des interfaces claires et standardisées (comme les API et les files d'attente de messages) pour réduire les frais généraux liés aux couches de traduction ou au trafic superflu.

Utiliser des modèles sans état

Un modèle sans état peut vous aider à gérer chaque requête ou interaction avec le service, indépendamment des requêtes précédentes. Ce modèle facilite l'évolutivité et la récupération. Vous pouvez ainsi développer, réduire ou redémarrer le service sans perdre les données nécessaires aux requêtes ou processus en cours.

Choisir des technologies complémentaires

Choisissez des technologies qui complètent la conception modulaire. Évaluez les langages de programmation, les frameworks et les bases de données pour leur compatibilité avec la modularité.

Pour en savoir plus, consultez les ressources suivantes :

Surveiller et améliorer en continu les performances

Ce principe du pilier d'optimisation des performances du Google Cloud Well-Architected Framework fournit des recommandations pour vous aider à surveiller et à améliorer en continu les performances.

Une fois vos applications déployées, surveillez en continu leurs performances à l'aide des journaux, du traçage, des métriques et des alertes. À mesure que vos applications se développent et évoluent, vous pouvez utiliser les tendances de ces points de données pour réévaluer vos exigences en termes de performances. Vous devrez peut-être modifier certaines parties de vos applications pour maintenir ou améliorer leurs performances.

Présentation des principes

Le processus d'amélioration continue des performances nécessite des outils et des stratégies de surveillance robustes. Les outils d'observabilité du cloud peuvent vous aider à collecter des indicateurs clés de performance (KPI) tels que la latence, le débit, les taux d'erreur et l'utilisation des ressources. Les environnements cloud offrent différentes méthodes pour évaluer précisément les performances de l'application, du réseau et de l'expérience utilisateur.

L'amélioration des performances est un effort continu qui nécessite une approche multidimensionnelle. Les mécanismes et processus clés suivants peuvent vous aider à améliorer vos performances :

  • Pour donner une orientation claire et suivre vos progrès, définissez des objectifs de performances qui correspondent à vos objectifs commerciaux. Fixez des objectifs SMART : spécifiques, mesurables, atteignables, pertinents et limités dans le temps.
  • Pour mesurer les performances et identifier les points à améliorer, collectez des métriques de KPI.
  • Pour surveiller en continu les problèmes de vos systèmes, utilisez des workflows visualisés dans les outils de surveillance. Utilisez des techniques de cartographie des processus d'architecture pour identifier les redondances et les inefficacités.
  • Pour créer une culture d'amélioration continue, proposez des formations et des programmes qui favorisent le développement de vos employés.
  • Pour encourager l'amélioration proactive et continue, incitez vos employés et vos clients à fournir des commentaires réguliers sur les performances de votre application.

Recommandations

Pour promouvoir les conceptions modulaires, tenez compte des recommandations des sections suivantes.

Définir des objectifs et des métriques de performances clairs

Définissez des objectifs de performances clairs qui correspondent à vos objectifs commerciaux. Pour cela, vous devez bien comprendre l'architecture de votre application et les exigences de performances de chaque composant de l'application.

En priorité, optimisez les composants les plus critiques qui influencent directement vos fonctions commerciales de base et l'expérience utilisateur. Pour vous assurer que ces composants continuent de fonctionner efficacement et de répondre à vos besoins commerciaux, définissez des objectifs de performances spécifiques et mesurables. Ces cibles peuvent inclure les temps de réponse, les taux d'erreur et les seuils d'utilisation des ressources.

Cette approche proactive peut vous aider à identifier et à résoudre les goulots d'étranglement potentiels, à optimiser l'allocation des ressources et, en fin de compte, à offrir une expérience fluide et performante à vos utilisateurs.

Surveiller les performances

Surveillez en permanence les performances de vos systèmes cloud et configurez des alertes pour tout problème potentiel. La surveillance et les alertes peuvent vous aider à détecter et à résoudre les problèmes avant qu'ils n'affectent les utilisateurs. Le profilage des applications peut aider à identifier les goulots d'étranglement et à optimiser l'utilisation des ressources.

Vous pouvez utiliser des outils qui facilitent le dépannage efficace et l'optimisation du réseau. Utilisez Google Cloud Observability pour identifier les zones qui consomment beaucoup de processeur, de mémoire ou de réseau. Ces fonctionnalités peuvent aider les développeurs à améliorer leur efficacité, à réduire les coûts et à optimiser l'expérience utilisateur. Network Intelligence Center affiche des visualisations de la topologie de votre infrastructure réseau et peut vous aider à identifier les chemins à forte latence.

Encourager l'amélioration continue

Créez une culture d'amélioration continue qui peut profiter à la fois à l'application et à l'expérience utilisateur.

Offrez à vos employés des opportunités de formation et de développement qui leur permettent d'améliorer leurs compétences et leurs connaissances en matière de techniques de performance dans les services cloud. Établissez une communauté de pratique et proposez des programmes de mentorat et de coaching pour favoriser le développement des employés.

Pour éviter la gestion des performances réactive et encourager la gestion des performances proactive, encouragez les commentaires continus de vos employés, de vos clients et de vos parties prenantes. Vous pouvez envisager de gamifier le processus en suivant les KPI sur les performances et en présentant ces métriques aux équipes fréquemment sous la forme d'un classement.

Pour comprendre vos performances et la satisfaction des utilisateurs au fil du temps, nous vous recommandons de mesurer les commentaires des utilisateurs de manière quantitative et qualitative. Le framework HEART peut vous aider à recueillir les commentaires des utilisateurs dans cinq catégories :

  • Bonheur
  • Engagement
  • Adoption
  • Fidélisation
  • Succès de la tâche

En utilisant un tel framework, vous pouvez inciter les ingénieurs à fournir des commentaires basés sur les données, des métriques centrées sur l'utilisateur, des insights exploitables et une compréhension claire des objectifs.