Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à cette recommandation de liste de contrôle d’efficacité des performances d’Azure Well-Architected Framework :
| PE :07 | Optimisez le code et l’infrastructure. Utilisez du code performant et assurez-vous qu’il décharge les responsabilités sur la plateforme. Utilisez du code et de l’infrastructure uniquement pour leur objectif principal et uniquement si nécessaire. |
|---|
Ce guide décrit les recommandations pour optimiser les performances du code et de l’infrastructure. Pour optimiser votre code et votre infrastructure, vous devez utiliser vos composants uniquement pour leur objectif principal et uniquement si nécessaire. Lorsque vous surutilisez du code et de l’infrastructure, il crée une consommation de ressources inutile, des goulots d’étranglement et des réponses lentes. Pour compenser ces inefficacités, vous devez ajouter davantage de ressources pour accomplir les mêmes tâches.
Définitions
| Terme | Definition |
|---|---|
| Concurrency | Lorsque plusieurs tâches ou processus sont effectués simultanément, mais pas nécessairement en même temps. |
| Architecture du processeur | Composants et principes qui affectent le fonctionnement de l’ordinateur. |
| Compression des données | Action de réduction de la taille des fichiers en minimisant les données redondantes. |
| Tas | Zone de mémoire utilisée pour les allocations de mémoire d’exécution. |
| Fuite de mémoire | Lorsqu’une charge de travail ne parvient pas à libérer la mémoire allouée après que la mémoire n’est plus nécessaire. |
| Parallélisme | Lorsque plusieurs tâches ou processus sont effectués en même temps. |
L’optimisation du code et de l’infrastructure implique un réglage précis du code et de l’infrastructure de prise en charge pour améliorer l’efficacité des performances. Il nécessite un code performant qui exécute rapidement des tâches et ne gaspille pas les ressources. Il nécessite une infrastructure bien conçue qui est rationalisée pour éviter toute complexité inutile. Une charge de travail doit utiliser les fonctionnalités inhérentes de la plateforme. Il s’agit d’une approche qui permet de s’assurer que le code et l’infrastructure sont utilisés principalement à des fins principales et uniquement si nécessaire.
Optimiser les performances du code
Pour optimiser les performances du code, modifiez le code pour réduire l’utilisation des ressources, réduire le runtime et améliorer les performances. Vous pouvez modifier le code pour améliorer l’efficacité et la vitesse d’un programme logiciel. Ne masquez pas les problèmes de performances avec la force brute. La force brute signifie l’ajout de ressources de calcul pour compenser les performances du code, comme l’ajout d’une capacité supplémentaire au lieu de traiter la source. Vous devez résoudre les problèmes de performances liés à l’optimisation. Lorsque vous optimisez les performances du code, il permet d’optimiser l’utilisation des ressources système, d’améliorer le temps de réponse, de réduire la latence et d’améliorer l’expérience utilisateur.
Instrumenter votre code
L’instrumentation de code fait référence à la pratique d’ajout d’extraits de code ou de bibliothèques à du code qui collectent des données et surveillent les performances du code pendant l’exécution. L’instrumentation du code permet aux développeurs de collecter des informations sur les métriques clés, telles que la consommation de ressources (processeur, utilisation de la mémoire) et le temps d’exécution. En instrumentant le code, les développeurs peuvent obtenir des insights sur les chemins chauds du code, identifier les goulots d’étranglement des performances et optimiser le code pour améliorer l’efficacité des performances.
Dans un environnement idéal, vous devez effectuer une analyse du code au début du cycle de vie du développement logiciel. Plus vous interceptez un problème de code, le moins cher est de le résoudre. Vous souhaitez automatiser autant que possible cette analyse du code. Utilisez des outils d’analyse de code dynamique et statique pour réduire l’effort manuel. Toutefois, gardez à l’esprit que ce test est toujours une simulation de production. La production offre la meilleure compréhension de l’optimisation du code.
Compromis : Les outils de surveillance du code sont susceptibles d’augmenter les coûts.
Identifier les chemins d’accès à chaud
En instrumentant votre code, vous pouvez mesurer la consommation de ressources pour différents chemins de code. Ces mesures vous aident à identifier les chemins d’accès chauds. Les chemins à chaud ont un effet significatif sur les performances et l’utilisation des ressources. Ils sont des sections critiques ou fréquemment exécutées d’un programme qui nécessitent des performances élevées et une faible latence. Pour identifier les chemins d’accès à chaud du code, procédez comme suit :
Analysez les données du runtime : collectez des données d’exécution et analysez-les pour identifier les zones du code qui consomment des ressources importantes, telles que le processeur, la mémoire ou les opérations d’E/S. Recherchez des modèles ou des sections de code qui sont fréquemment exécutés ou prennent beaucoup de temps.
Mesurer les performances : utilisez des outils de profilage ou des frameworks de test de performances pour mesurer le temps d’exécution et la consommation de ressources de différents chemins de code. Il permet d’identifier les goulots d’étranglement et les domaines à améliorer.
Considérez la logique métier et l’effet utilisateur : évaluez l’importance des différents chemins de code en fonction de leur pertinence pour les fonctionnalités de l’application ou les opérations métier critiques. Déterminez quels chemins de code sont essentiels pour fournir une valeur aux utilisateurs ou répondre aux exigences de performances.
Optimiser la logique de code
L’optimisation de la logique du code consiste à affiner la structure et la conception du code pour effectuer des tâches avec moins de ressources. Une logique améliorée réduit les opérations inutiles. Il crée une exécution plus rapide avec moins de consommation de ressources. Vous devez supprimer toutes les opérations inutiles dans le chemin d’accès du code susceptibles d’affecter les performances. Hiérarchiser l’optimisation des chemins chauds pour voir les gains d’efficacité des performances les plus importants. Pour optimiser la logique du code, tenez compte des stratégies suivantes :
Supprimez les appels de fonction inutiles : passez en revue votre code et identifiez les fonctions qui ne sont pas essentielles pour les fonctionnalités souhaitées et peuvent affecter les performances négativement. Par exemple, si un appel de fonction effectue une validation terminée précédemment dans le code, vous pouvez supprimer l’appel de fonction de validation inutile.
Réduire les opérations de journalisation : la journalisation peut être utile pour le débogage et l’analyse, mais la journalisation excessive peut affecter les performances. Évaluez la nécessité de chaque opération de journalisation et supprimez les appels de journalisation inutiles qui ne sont pas essentiels pour l’analyse des performances.
Optimiser les boucles et les conditions : analysez les boucles et les conditions dans votre code et identifiez les itérations ou conditions inutiles qui peuvent être éliminées. La simplification et l’optimisation de ces structures peuvent améliorer les performances de votre code. Réduisez les appels de fonction dans les boucles et éliminez les calculs redondants. Envisagez de déplacer des calculs en dehors de la boucle ou d’utiliser la désinscription de boucle.
Réduire le traitement inutile des données : passez en revue votre code pour toutes les opérations de traitement des données inutiles, telles que les calculs redondants ou les transformations. Éliminez ces opérations inutiles pour améliorer l’efficacité de votre code.
Optimisez les structures de données. Pour stocker et récupérer efficacement des données, sélectionnez des structures de données appropriées, telles que des tableaux, des listes liées, des arborescences et des tables de hachage. Choisissez la meilleure structure de données pour un problème spécifique. Une structure de données appropriée améliore les performances des applications.
Réduire les demandes réseau : si votre code implique d’effectuer des requêtes réseau, réduisez le nombre de requêtes et optimisez leur utilisation. Les requêtes batch lorsque cela est possible et évitent les allers-retours inutiles pour améliorer les performances.
Réduire les allocations : identifiez les zones où l’allocation de mémoire excessive se produit. Optimisez le code en réduisant les allocations inutiles et en réutilisant les ressources existantes lorsque cela est possible. En réduisant les allocations, vous pouvez améliorer l’efficacité de la mémoire et les performances globales. Utilisez les stratégies de gestion de la mémoire et de garbage collection appropriées pour votre langage de programmation.
Réduire la taille de la structure des données : évaluez la taille de vos structures de données, telles que les classes, et identifiez les zones où la réduction est possible. Passez en revue les exigences de données et éliminez les champs ou propriétés inutiles. Optimisez l’utilisation de la mémoire en sélectionnant efficacement les types de données appropriés et en empaquetant les données.
Utilisez des kits sdk et des bibliothèques optimisés pour les performances. Utilisez des kits SDK natifs ou des bibliothèques optimisées pour les performances. Les kits SDK natifs sont conçus pour interagir avec les services et les ressources sur une plateforme ou dans une infrastructure. Par exemple, les kits SDK natifs cloud fonctionnent mieux avec les plans de données de service cloud qu’avec l’accès à l’API personnalisée. Les kits SDK excellent lors de la gestion des demandes réseau et de l’optimisation des interactions. Les bibliothèques optimisées pour les performances, telles que Math.NET, contiennent des fonctions optimisées pour les performances. Lorsque vous appliquez les fonctions de manière appropriée, vous pouvez améliorer les performances de votre charge de travail.
Implémentation croisée : tenez compte des effets des implémentations croisées, telles que les contrôles intergiciels ou de jetons, et évaluez s’ils affectent négativement les performances.
Passez en revue les recommandations de performances spécifiques au langage de programmation avec lequel vous travaillez. Évaluez votre code par rapport à ces recommandations pour identifier les domaines d’amélioration.
Compromis :
- L’optimisation du code et des chemins chauds nécessite une expertise du développeur pour identifier les inefficacités du code est subjective et peut être hautement qualifiée pour d’autres tâches.
- Les kits SDK offrent des fonctionnalités pratiques et éliminent la complexité de l’interaction avec les API. Toutefois, les kits SDK peuvent limiter vos options de contrôle et de personnalisation pour le code personnalisé.
Optimiser la gestion de la mémoire
L’optimisation de la gestion de la mémoire implique d’affiner la façon dont une charge de travail utilise, alloue et libère des ressources de mémoire pour améliorer l’efficacité. La gestion appropriée de la mémoire améliore les performances du code, car elle réduit la surcharge des opérations de mémoire. L’utilisation efficace de la mémoire réduit la latence, empêche les ralentissements ou incidents du système et optimise le débit des tâches de calcul. Tenez compte des stratégies suivantes pour optimiser la gestion de la mémoire.
Problèmes de mémoire de débogage. Les vidages de mémoire sont des instantanés de mémoire d’application. Ils capturent l’état de mémoire d’une application à un moment spécifique. Les vidages de mémoire permettent une analyse rétrospective des problèmes liés à la mémoire. Sélectionnez le type approprié de vidage de mémoire en fonction de la nature du problème que vous essayez de diagnostiquer et les ressources disponibles. Vous devez utiliser des vidages miniatures pour le débogage de routine et les vidages complets pour les problèmes complexes et critiques. Cette stratégie fournit un équilibre entre l’utilisation des ressources et les fonctionnalités de diagnostic. De nombreux services d’hébergement de code prennent en charge le débogage de mémoire. Vous devez préférer les services qui prennent en charge l’analyse de la mémoire sur ces services qui ne le font pas. Voici les étapes de base pour déboguer les problèmes de mémoire :
Capturez les vidages de mémoire : commencez par configurer un mécanisme pour capturer des vidages de mémoire pendant l’exécution de votre application. La capture peut être déclenchée manuellement, automatiquement ou lorsque des conditions spécifiques (comme une consommation excessive de mémoire) sont remplies. Certains services cloud peuvent déjà proposer ce processus.
Analyser les vidages de mémoire : après avoir collecté les vidages de mémoire, analysez-les. De nombreux outils peuvent vous aider à inspecter ces vidages, tels que WinDbg pour les applications Windows ou GDB pour les systèmes Unix.
Identifier les fuites de mémoire : concentrez-vous sur l’identification des fuites de mémoire pendant l’analyse. Les fuites de mémoire se produisent lorsque votre application alloue de la mémoire, mais ne parvient pas à la libérer lorsque la mémoire n’est plus nécessaire. Recherchez des objets ou des structures de données qui restent en mémoire même lorsqu’ils doivent être désalloués.
Correction et test : lors de l’identification du code problématique, concentrez-vous sur la résolution des problèmes de mémoire. Les résolutions peuvent impliquer la libération de la mémoire correctement, l’optimisation des structures de données ou la réévaluation des pratiques de gestion de la mémoire. Vérifiez que vos solutions subissent des tests rigoureux pour garantir leur efficacité.
Itérer et surveiller : la gestion de la mémoire est un processus continu. Surveillez régulièrement l’utilisation de la mémoire de votre application et conservez la collecte des vidages de mémoire en production. Revisitez régulièrement les étapes d’analyse et d’optimisation pour vous assurer que les problèmes de mémoire ne réapparaîtront pas avec les modifications de code suivantes.
En intégrant l’analyse du vidage de la mémoire dans votre cycle de vie de développement logiciel, vous pouvez amplifier la fiabilité et l’efficacité de vos applications. Cela permet de réduire la probabilité de problèmes liés à la mémoire en production.
Réduisez les allocations de mémoire. Réduisez les allocations de mémoire pour réduire l’empreinte mémoire globale du code. Votre charge de travail peut utiliser efficacement la mémoire disponible. Il est moins nécessaire que le garbage collector récupère la mémoire inutilisée et réduit la fréquence et la durée des cycles de garbage collection. Les allocations de mémoire peuvent être coûteuses, en particulier si vous les effectuez fréquemment. Réduisez les allocations de mémoire, afin que le code puisse s’exécuter rapidement et efficacement.
Les caches stockent les données fréquemment sollicitées près du processeur, ce qui améliore les performances. Lorsque vous réduisez les allocations de mémoire, il y a moins de contention pour l’espace de cache, de sorte que vous pouvez utiliser efficacement le cache. Un grand nombre d’allocations de mémoire peut dégrader les performances de l’application et générer des erreurs. Voici d’autres façons de réduire les allocations de mémoire :
Variables locales : utilisez des variables locales au lieu de variables globales pour réduire la consommation de mémoire.
Initialisation différée : implémentez l’initialisation différée pour différer la création d’objets ou de ressources jusqu’à ce qu’elles soient nécessaires.
Mémoires tampons : gérez efficacement les mémoires tampons pour éviter d’allouer des mémoires tampons volumineuses.
Regroupement d’objets : envisagez le regroupement d’objets pour réutiliser les objets volumineux au lieu de les allouer et de les déallouer.
Pour plus d’informations, consultez Réduire les allocations de mémoire et le tas d’objets volumineux sur les systèmes Windows.
Utiliser la concurrence et le parallélisme
L’utilisation de la concurrence et du parallélisme implique l’exécution de plusieurs tâches ou processus simultanément ou de manière superposée pour utiliser efficacement les ressources informatiques. Ces techniques augmentent le débit global et le nombre de tâches qu’une charge de travail peut traiter. Lorsque vous exécutez des tâches simultanément ou en parallèle, elle réduit le runtime de l’application et diminue la latence et augmente les temps de réponse. La concurrence et le parallélisme permettent une utilisation efficace des ressources informatiques, telles que les cœurs de processeur ou les systèmes distribués. La concurrence et le parallélisme distribuent efficacement la charge de travail entre les ressources informatiques.
Utilisez le parallélisme. Le parallélisme est la capacité d’un système à déclencher simultanément plusieurs tâches ou processus sur plusieurs ressources informatiques. Le parallélisme divise une charge de travail en tâches plus petites exécutées en parallèle. Vous pouvez obtenir un parallélisme à l’aide de techniques telles que le multiprocesseur ou l’informatique distribuée. Répartir les tâches entre les processeurs multicœurs pour optimiser la gestion des charges de travail. Optimisez le code pour tirer parti de l’architecture du processeur, des modèles de thread et des processeurs multicœurs. Lorsque vous exécutez du code en parallèle, les performances s’améliorent, car la charge de travail est répartie sur plusieurs cœurs.
Utilisez la concurrence. La concurrence est la capacité d’un système à exécuter plusieurs tâches ou processus. L’accès concurrentiel permet à différentes parties d’un programme de progresser indépendamment, ce qui peut améliorer les performances globales. Vous pouvez implémenter la concurrence à l’aide de techniques telles que le multithreading, dans laquelle plusieurs threads s’exécutent simultanément au sein d’un seul processus. Vous pouvez également utiliser la programmation asynchrone, dans laquelle les tâches sont déclenchées simultanément.
Programmation asynchrone : la programmation asynchrone est une approche pour déclencher des tâches sans bloquer le thread principal. La programmation asynchrone permet à un programme de déclencher des tâches en attendant la fin des opérations de longue durée. Avec la programmation asynchrone, le programme peut lancer plusieurs tâches et attendre qu’elles se terminent de façon asynchrone. Le programme n’a pas besoin d’attendre la fin de chaque tâche avant de passer à l’autre.
Il existe de nombreuses techniques et modèles de programmation asynchrones, en fonction du langage de programmation et de la plateforme. Une approche courante consiste à utiliser des mots clés et des constructions asynchrones, tels que
asyncetawait, dans des langages comme C#. Avec ces mots clés, vous pouvez définir des méthodes asynchrones. Pour le trafic HTTP, envisagez d’utiliser le modèle de Request-Reply asynchrone.De nombreux frameworks et bibliothèques offrent une prise en charge intégrée de la programmation asynchrone. Par exemple, dans la plateforme .NET, vous pouvez implémenter des opérations asynchrones à l’aide de modèles tels queTask-Based modèle asynchrone et Event-Based modèle asynchrone. L’implémentation spécifique de la programmation asynchrone varie en fonction du langage de programmation, de la plateforme et des exigences de l’application.
Files d’attente : une file d’attente est une mémoire tampon de stockage située entre un composant demandeur (producteur) et le composant de traitement (consommateur) de la charge de travail. Il peut y avoir plusieurs consommateurs pour une file d’attente unique. À mesure que les tâches augmentent, vous devez mettre à l’échelle les consommateurs pour répondre à la demande. Le producteur place les tâches dans une file d’attente. La file d’attente stocke les tâches jusqu’à ce qu’un consommateur dispose d’une capacité. Une file d’attente est souvent la meilleure façon de transmettre le travail à un service de traitement qui rencontre des pics de demande. Pour plus d’informations, consultez Queue-Based modèle de nivellement de charge et files d’attente de stockage et files d’attente Service Bus.
Utiliser le regroupement de connexions
Le regroupement de connexions est la pratique de réutiliser les connexions de base de données établies au lieu de créer une connexion pour chaque requête. Il peut être coûteux d’établir une connexion à une base de données. Vous devez créer une connexion réseau authentifiée au serveur de base de données distante. Les connexions de base de données sont particulièrement coûteuses pour les applications qui ouvrent fréquemment de nouvelles connexions. Le regroupement de connexions réutilise les connexions existantes et élimine les frais d’ouverture d’une nouvelle connexion pour chaque requête. Le regroupement de connexions réduit la latence de connexion et active un débit de base de données élevé (transactions par seconde) sur le serveur. Vous devez choisir une taille de pool qui peut gérer plus de connexions que vous n’en avez actuellement. L’objectif est d’avoir le pool de connexions rapidement à gérer les nouvelles requêtes entrantes.
Comprendre les limites de regroupement de connexions. Certains services limitent le nombre de connexions réseau. Lorsque vous dépassez cette limite, les connexions peuvent ralentir ou se terminer. Vous pouvez utiliser le regroupement de connexions pour établir un ensemble fixe de connexions au moment du démarrage, puis gérer ces connexions. Dans de nombreux cas, une taille de pool par défaut peut se composer de quelques connexions qui s’exécutent rapidement dans des scénarios de test de base. Votre application peut épuiser la taille du pool par défaut sous mise à l’échelle et créer un goulot d’étranglement. Vous devez établir une taille de pool qui correspond au nombre de transactions simultanées prises en charge sur chaque instance d’application.
Testez le pool de connexions. Chaque plateforme de base de données et d’application a des exigences légèrement différentes pour la configuration et l’utilisation d’un pool. Testez votre pool de connexions pour vous assurer qu’il fonctionne efficacement sous charge.
Risque : le regroupement de connexions peut créer une fragmentation du pool et dégrader les performances.
Optimiser les travaux en arrière-plan
De nombreuses applications nécessitent des tâches en arrière-plan qui s’exécutent indépendamment de l’interface utilisateur. L’application peut démarrer le travail et continuer à traiter les demandes interactives des utilisateurs. Parmi les exemples de travaux en arrière-plan, citons les tâches par lots, les tâches nécessitant beaucoup de processeurs et les processus de longue durée, tels que les flux de travail. Les tâches en arrière-plan ne doivent pas bloquer l’application ou provoquer des incohérences en raison d’une opération retardée lorsque le système est en cours de chargement. Pour améliorer les performances, vous pouvez mettre à l’échelle des instances de calcul qui hébergent des tâches en arrière-plan. Pour plus d’informations, consultez tâches en arrière-plan et considérations relatives à la mise à l’échelle et aux performances.
Optimiser les performances de l’infrastructure
L’optimisation des performances de l’infrastructure implique d’améliorer et d’ajuster les éléments d’infrastructure pour garantir le pic d’exploitation et la meilleure utilisation des ressources pour une charge de travail. En améliorant l’infrastructure, vous pouvez réduire les déchets, réduire les retards et obtenir davantage avec les ressources disponibles. Il garantit que les charges de travail s’exécutent de manière fiable et rapide, ce qui permet d’améliorer les expériences utilisateur et d’économiser des coûts. Pour optimiser les performances de l’infrastructure, tenez compte des stratégies suivantes :
Ajoutez des limites d’utilisation. Vous pouvez implémenter des limites d’utilisation sur certains composants de charge de travail. Par exemple, pour supprimer des pods instables, vous pouvez définir des limites de processeur et de mémoire de pod dans Azure Kubernetes Service (AKS). Pour optimiser les performances, vous pouvez définir des limites de mémoire dans les machines virtuelles Java.
Simplifiez l’infrastructure. Simplifiez votre charge de travail pour réduire le risque d’interaction, de dépendance et de compatibilité. Lorsque vous simplifiez votre charge de travail, vous optimisez l’utilisation des ressources de mémoire, de puissance de traitement et de stockage.
Réduire la charge. Pour réduire la charge sur une charge de travail, réduisez la demande placée sur une application et activez les ressources pour effectuer leurs tâches principales. Par exemple, il est courant d’éviter d’exécuter des solutions de sécurité dans votre code ou sur des instances de calcul individuelles. Au lieu de cela, les serveurs web doivent traiter les requêtes HTTP. Les pare-feu d’applications web et les ressources de passerelle peuvent gérer les vérifications de sécurité. Les stratégies suivantes permettent de réduire la charge sur votre charge de travail :
Cohérence éventuelle : adoptez un modèle de cohérence éventuel pour améliorer les performances en permettant aux données d’être légèrement obsolètes. La cohérence éventuelle réduit la demande immédiate sur les cycles du processeur et la bande passante réseau pour les mises à jour constantes des données.
Tâches déléguées : déléguer des tâches serveur à des clients ou des intermédiaires, telles que des index de recherche et des caches. Déléguer des tâches telles que le tri des données, le filtrage des données ou les vues de rendu. Lorsque vous déchargez ces tâches, vous réduisez la charge de travail sur vos serveurs et améliorez les performances.
Optimisez le réseau. Pour optimiser un réseau de charge de travail pour les performances, configurez et ajustez l’infrastructure réseau. Assurez-vous que la charge de travail peut fonctionner à son niveau d’efficacité le plus élevé.
Protocoles réseau : effectuez une mise à niveau vers des protocoles modernes comme HTTP/2, ce qui permet à plusieurs requêtes d’être envoyées via une seule connexion. Les protocoles modernes réduisent la surcharge liée à l’établissement de nouvelles connexions.
Compromis : les protocoles modernes peuvent exclure les clients plus anciens.
Conversation réseau : traitement par lots de requêtes réseau pour réduire le nombre de requêtes. Au lieu d’effectuer plusieurs petites requêtes, combinez-les en requêtes plus volumineuses pour réduire la surcharge réseau.
Requêtes de base de données : assurez-vous que les requêtes de base de données récupèrent uniquement les informations nécessaires. Évitez de récupérer de grandes quantités de données inutiles, ce qui peut entraîner une augmentation du trafic réseau et des performances lentes.
Données statiques : utilisez un réseau de distribution de contenu pour mettre en cache du contenu statique fréquemment accessible à proximité des utilisateurs. Lorsque vous mettez en cache des données, il n’est pas nécessaire de parcourir de longues distances. La mise en cache améliore les temps de réponse et réduit le trafic réseau.
Collecte des journaux : collectez et conservez uniquement les données de journal nécessaires pour prendre en charge vos besoins. Configurez les règles de collecte de données et implémentez des considérations de conception pour optimiser vos coûts Log Analytics.
Compression des données : compressez et regroupez des données http et des données de fichier pour permettre une transmission rapide entre les clients et les serveurs. La compression réduit les données retournées par une page ou une API et les renvoie au navigateur ou à l’application cliente. La compression optimise le trafic réseau, ce qui peut accélérer la communication des applications.
Compromis : la compression ajoute le traitement côté serveur et côté client. L’application doit compresser, envoyer et décompresser les données. La communication multidiffusion ou la communication avec plusieurs destinataires peut créer une surcharge de décompression. Vous devez tester et mesurer les variations de performances avant et après l’implémentation de la compression des données pour déterminer s’il est adapté à votre charge de travail. Pour plus d’informations, consultez compression de la réponse dans ASP.NET Core.
Facilitation Azure
Code d’instrumentation : Azure Monitor Application Insights prend en charge l’instrumentation automatique (autoinstrumentation) et l’instrumentation manuelle du code d’application. L’autoinstrumentation permet la collecte de données de télémétrie sans toucher le code de l’application. L’instrumentation manuelle nécessite des modifications de code pour implémenter l’API Application Insights ou OpenTelemetry. Vous pouvez utiliser Application Insights Profiler pour optimiser les chemins d’accès à chaud.
Optimisation de la logique du code : Azure offre des kits sdk et des bibliothèques pour différents langages de programmation afin d’interagir avec les services Azure. Utilisez des kits SDK pour simplifier les interactions entre les applications et les ressources Azure. Les kits SDK fournissent une interaction optimale avec les services Azure, ce qui réduit la latence et améliore l’efficacité.
Optimisation de la gestion de la mémoire : utilisez la fonctionnalité de détection intelligente d’Application Insights pour analyser la consommation de mémoire et aider à identifier et à résoudre les fuites de mémoire.
Azure App Service dispose d’une fonctionnalité de profileur et de vidage de mémoire et d’analyse. La fonctionnalité de répétition automatique App Service peut prendre automatiquement des vidages de mémoire et des traces de profil des applications .NET et Java.
Utilisation de la concurrence et du parallélisme : différents services Azure offrent une prise en charge unique de la concurrence, comme Azure Cosmos DB, Azure Functions et le stockage Blob. Pour le parallélisme, les services AKS prennent en charge le déploiement d’applications conteneurisées, ce qui améliore le traitement parallèle.
Azure Batch est un service de planification de travaux basé sur le cloud que vous pouvez utiliser pour activer le calcul parallèle et hautes performances sans avoir à configurer l’infrastructure. Pour plus d’informations, consultez travaux en arrière-plan.
Optimisation des performances de l’infrastructure : implémentez desmodèles Azure Resource Manager pour définir et déployer l’infrastructure à l’aide du code. Utilisez ces modèles pour implémenter des déploiements de ressources efficaces, reproductibles et cohérents. Azure Policy fournit des fonctionnalités de gouvernance pour garantir que les déploiements de ressources respectent les meilleures pratiques et normes organisationnelles.
Pour la programmation asynchrone, utilisez des services de mise en file d’attente scalables, tels que Stockage File d’attente Azure et Azure Service Bus, pour faciliter la programmation asynchrone. Vous pouvez mettre en file d’attente les tâches et les traiter indépendamment. Pour prendre en charge les opérations asynchrones, la Place de marché Azure propose des files d’attente et des outils tiers que vous pouvez intégrer aux services Azure.
Liens connexes
- AKS
- Fonctionnalité de détection intelligente Application Insights
- Modèle de Request-Reply asynchrone
- Éviter les allocations de mémoire
- Azure Batch
- Azure Policy
- Modèles Microsoft Azure Resource Manager
- Kits de développement logiciel (SDK) Azure
- Travaux en arrière-plan
- Considérations relatives à la mise à l’échelle et aux performances des travaux en arrière-plan
- Compresser les données de fichier
- Compresser du contenu HTTP
- Définir les limites de processeur et de mémoire des pods
- modèle asynchroneEvent-Based
- Machines virtuelles Java
- Tas d’objets volumineux
- Fragmentation du pool
- modèle de niveau de chargeQueue-Based
- Compression de la réponse dans ASP.NET Core
- Files d’attente de stockage et files d’attente Service Bus
- modèle asynchroneTask-Based
Liste de contrôle d’efficacité des performances
Reportez-vous à l’ensemble complet de recommandations.