Ce pilier du frameworkGoogle Cloud Well-Architected 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 les performances et les 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 :
Le processus d'optimisation des performances est un cycle continu qui comprend les étapes suivantes:
- Définir 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.
- Concevoir et déployer: utilisez des modèles de conception élastiques et évolutifs qui peuvent vous aider à répondre à vos exigences de performances.
- Surveillez et analysez: surveillez les performances en permanence à l'aide de journaux, de traçage, de métriques et d'alertes.
Optimisez: envisagez des conceptions repensées à mesure que vos applications évoluent. Adaptez les ressources cloud à vos besoins et utilisez les 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, réévaluez les exigences et ajustez les ressources cloud.
Pour connaître les principes et les recommandations d'optimisation des performances spécifiques aux charges de travail d'IA et de ML, consultez la section Perspective de l'IA et du ML: optimisation des performances du framework Well-Architected.
Principes de base
Les recommandations du pilier "Optimisation des performances" du framework Well-Architected Framework sont associées aux principes fondamentaux suivants:
- Planifier l'allocation des ressources
- Profitez de l'élasticité
- Promouvoir la conception modulaire
- Surveiller et améliorer en permanence les performances
Contributeurs
Auteurs :
- Daniel Lees | Architecte en sécurité cloud
- Gary Harmson | Ingénieur client
- Luis Urena | Ingénieur relations avec les développeurs
- Zach Seils | Spécialiste en gestion des réseaux
Autres contributeurs :
- Dr Filipe Gracio | Ingénieur client
- Jose Andrade | Ingénieur client Enterprise Infrastructure
- Kumar Dhanagopal Développeur de solutions multiproduits
- Marwan Al Shawi | Partner Customer Engineer
- Nicolas Pinteaux | Ingénieur client, spécialiste de la modernisation des applications
- Ryan Cox | Architecte principal
- Radhika Kanakam | Senior Program Manager, Cloud GTM
- Wade Holmes | Directeur des solutions mondiales
Planifier l'allocation des ressources
Ce principe du pilier d'optimisation des performances du Google Cloud framework Well-Architected fournit des recommandations pour vous aider à planifier les ressources de vos charges de travail dansGoogle Cloud. Il met en avant 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 dans le cloud.
Présentation des principes
Pour répondre à vos exigences métier, 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épart, planifiez les conceptions d'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 chargé du traitement par lot périodique de grands ensembles de données a des exigences de performances différentes d'une solution de bureau virtuel interactive. 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 universelle 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.
- Emplacement des ressources: lorsque vous sélectionnez une Google Cloud région pour vos ressources d'application, nous vous recommandons de privilégier la faible latence pour les utilisateurs finaux, de respecter les réglementations sur la localité des données et de vous assurer de la disponibilité des produits et services requis. Google Cloud
- 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 backbones 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, considérez les environnements bare metal, les machines virtuelles, les conteneurs et les plates-formes sans serveur.
- Stratégie de stockage: choisissez une stratégie de stockage optimale en fonction de vos exigences de performances.
- Configurations de 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é, soyez prêt à accepter les compromis de performances nécessaires pour éviter tout effet imprévu.
Recommandations
Pour optimiser l'allocation 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 prendre en charge l'ajustement élastique et vous assurer que des ressources adéquates sont disponibles, surveillez régulièrement la capacité de vos quotas. En outre, suivez l'utilisation des quotas pour identifier les contraintes de mise à l'échelle ou les problèmes de surallocation potentiels, puis prenez des décisions éclairées sur l'allocation des ressources.
Sensibiliser et informer
Informez vos utilisateurs des exigences de performances et fournissez des ressources pédagogiques sur les techniques de gestion des performances efficaces.
Pour évaluer la progression et identifier les axes d'amélioration, documentez régulièrement les performances cibles et les performances réelles. Effectuez un test de charge sur votre application pour trouver des points d'arrêt potentiels et comprendre comment la faire évoluer.
Surveiller les métriques de performances
Utilisez Cloud Monitoring pour analyser les tendances des métriques de performances, analyser les effets de tests, définir des alertes pour les métriques critiques et effectuer des analyses rétrospectives.
Active Assist est un ensemble d'outils qui peut 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.
Exploiter l'élasticité
Ce principe du pilier d'optimisation des performances du Google Cloud framework Well-Architected fournit des recommandations pour vous aider à intégrer l'élasticité, c'est-à-dire la capacité à ajuster les ressources de manière dynamique en fonction des changements des exigences de charge de travail.
L'élasticité permet aux différents composants d'un système de s'adapter indépendamment. Cette mise à l'échelle ciblée peut contribuer à améliorer les performances et l'efficacité des coûts en allouant des ressources précisément là où elles sont nécessaires, sans surprovisionnement ni sous-provisionnement.
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 doit gérer à la référence. 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 évoluer horizontalement, verticalement ou les deux. Pour le scaling horizontal, ajoutez des nœuds réplicatifs pour vous assurer que le système dispose d'une capacité globale suffisante pour répondre à la demande accrue. Pour l'évolutivité verticale, remplacez les composants existants de l'application par des composants qui offrent plus de capacité, de mémoire et de stockage.
Lorsque la charge diminue, le système doit réduire son échelle (horizontalement, verticalement ou les deux).
Définissez les circonstances dans lesquelles le système doit être mis à l'échelle. Planifiez d'augmenter manuellement les systèmes pour les périodes de trafic élevé connues. Utilisez des outils tels que l'autoscaling, qui réagit aux augmentations ou diminutions de la charge.
Recommandations
Pour profiter de l'élasticité, tenez compte des recommandations des sections suivantes.
Planifier les périodes de pointe
Vous devez planifier un chemin de mise à l'échelle efficace pour les événements connus, tels que les périodes d'augmentation de la demande client attendues.
Envisagez d'augmenter la capacité de votre système avant les périodes de trafic intense connues. Par exemple, si vous êtes une entreprise de vente au détail, vous prévoyez une augmentation de la demande pendant les soldes saisonniers. Nous vous recommandons d'augmenter ou de réduire manuellement la taille de vos systèmes avant ces ventes afin de vous assurer que votre système peut immédiatement gérer la charge accrue ou ajuster immédiatement les limites existantes. Sinon, l'ajout de ressources en réponse aux modifications en temps réel peut prendre plusieurs minutes. La capacité de votre application risque de ne pas augmenter assez rapidement et de causer des retards pour certains utilisateurs.
Pour les événements inconnus ou inattendus, tels qu'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 les métriques personnalisées que vous définissez dans Cloud Monitoring.
Prenons l'exemple d'une application exécutée 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 d'autres instances lorsque l'utilisation du processeur atteint le seuil. Ces instances nouvellement créées aident à 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 stratégie d'autoscaling supprime les instances qui ne sont plus nécessaires.
Planifiez des 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 vos composants 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 à la fois 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 intrinsèquement élastiques, par exemple:
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.
Utiliser le mode Autopilot pour Kubernetes
Pour les applications complexes qui nécessitent un contrôle plus strict sur Kubernetes, envisagez d'utiliser le mode Autopilot dans Google Kubernetes Engine (GKE). Le mode Autopilot offre une automatisation et une é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.
Favoriser la conception modulaire
Ce principe du pilier d'optimisation des performances du Google Cloud framework Well-Architected fournit des recommandations pour vous aider à promouvoir une conception modulaire. Les composants modulaires et les interfaces claires peuvent permettre une mise à l'échelle flexible, des mises à jour indépendantes et une future séparation des composants.
Présentation des principes
Comprendre 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 l'architecture monolithique ou de microservices ait été déployée initialement. En décomposant le système en modules indépendants et bien définis avec des interfaces claires, vous pouvez faire évoluer des composants individuels pour répondre à des demandes spécifiques.
L'ajustement ciblé peut vous aider à optimiser l'utilisation des ressources et à réduire les coûts de la manière suivante:
- Il ne provisionne que les ressources nécessaires à chaque composant et alloue moins de ressources aux composants moins exigeants.
- Ajoute des ressources supplémentaires pendant les périodes de forte activité afin de 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é présente des avantages importants, vous devez évaluer les compromis potentiels sur les performances. L'augmentation de la communication entre les modules peut entraîner une latence et des frais généraux. Recherchez un équilibre entre modularité et performances. Une conception hautement modulaire n'est pas forcément adaptée à tous les cas. Lorsque les performances sont essentielles, une approche plus étroitement couplée peut être appropriée. La conception de système est un processus itératif, au cours duquel vous examinez et affinez continuellement 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. Les composants indépendants avec des dépendances minimales 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 vos autres composants, vous pouvez le concevoir en tant que service autonome. Implémentez un plan de gestion des défaillances élégantes pour les sous-processus ou services moins importants qui n'ont pas d'incidence sur le temps de réponse des services principaux.
Concevoir pour la simultanéité et le parallélisme
Concevez votre application pour qu'elle prenne en charge plusieurs tâches simultanément, comme le traitement de plusieurs requêtes utilisateur ou l'exécution de tâches en arrière-plan lorsque les utilisateurs interagissent avec votre système. Divisez les tâches volumineuses en segments plus petits pouvant être traités en même temps par plusieurs instances de service. La simultanéité 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:
Équilibrer la modularité pour une allocation flexible des ressources
Dans la mesure du possible, assurez-vous que chaque composant n'utilise que les ressources nécessaires (comme la mémoire, l'espace de stockage et la puissance de traitement) pour des opérations spécifiques. Une surallocation de ressources peut entraîner des coûts inutiles, tandis qu'une sous-allocation de ressources peut compromettre les performances.
Utiliser des interfaces bien définies
Assurez-vous que les composants modulaires communiquent efficacement via des interfaces claires et standardisées (telles que des API et des files d'attente de messages) afin de réduire les coûts 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 pour les requêtes ou les processus en cours.
Choisir des technologies complémentaires
Choisissez des technologies qui complètent la conception modulaire. Évaluez la compatibilité des langages de programmation, des frameworks et des bases de données avec la modularité.
Pour en savoir plus, consultez les ressources suivantes :
Surveiller et améliorer les performances en continu
Ce principe du pilier d'optimisation des performances du Google Cloud framework Well-Architected fournit des recommandations pour vous aider à surveiller et à améliorer en continu les performances.
Une fois les 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 repenser 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 proposent différentes méthodes pour effectuer des évaluations précises des performances de l'application, du réseau et de l'expérience utilisateur final.
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 les performances:
- Pour donner des directives claires et suivre la progression, définissez des objectifs de performances en adéquation avec vos objectifs commerciaux. Définissez des objectifs SMART: spécifiques, mesurables, réalisables, 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 la croissance de vos employés.
- Pour encourager une amélioration proactive et continue, incitez vos employés et vos clients à fournir des commentaires continus 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 ce faire, vous devez bien comprendre l'architecture de votre application et les exigences de performances de chaque composant de l'application.
Priorisez l'optimisation des composants les plus critiques qui ont une influence directe sur vos principales fonctions métier et sur l'expérience utilisateur. Pour vous assurer que ces composants continuent de fonctionner efficacement et répondent à vos besoins métier, 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 vos systèmes cloud pour détecter les problèmes de performances et configurez des alertes pour les problèmes potentiels. 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 d'application peut aider à identifier les goulots d'étranglement et à optimiser l'utilisation des ressources.
Vous pouvez utiliser des outils qui facilitent le dépannage et l'optimisation du réseau. Utilisez Google Cloud Observability pour identifier les zones présentant une consommation élevée de processeur, de mémoire ou de réseau. Ces fonctionnalités peuvent aider les développeurs à améliorer l'efficacité, à réduire les coûts et à améliorer 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 à latence élevée.
Inciter à l'amélioration continue
Créez une culture d'amélioration continue qui peut bénéficier à la fois à l'application et à l'expérience utilisateur.
Offrez à vos employés des opportunités de formation et de développement qui améliorent leurs compétences et leurs connaissances en matière de techniques de performances dans les services cloud. Créez une communauté de pratique et proposez des programmes de mentorat et de coaching pour favoriser le développement des employés.
Pour éviter une gestion des performances réactive et favoriser une gestion proactive des performances, encouragez vos employés, vos clients et vos partenaires à vous envoyer des commentaires en continu. Vous pouvez envisager de gamifier le processus en suivant les KPI sur les performances et en présentant ces métriques aux équipes régulièrement sous la forme d'un classement.
Pour comprendre vos performances et le niveau de 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.