Efficacité des performances

Effectué

Prenons un exemple : un journal publie un article sur l’une des annonces de produit que vient de faire votre organisation. La publicité ajoutée par cet article entraîne un afflux important de trafic sur votre site web. Votre site web peut-il gérer cette augmentation du trafic ? Votre site peut-il assumer la charge supplémentaire sans devenir lent ou sans réponse ?

Dans cette unité, nous examinons certains des principes de base pour garantir des performances d’application exceptionnelles. En particulier, les principes de mise à l’échelle et d’optimisation qui constituent le pilier de l’efficacité des performances.

Qu’est-ce que l’efficacité des performances ?

L’efficacité des performances consiste à adapter les ressources disponibles d’une application à la demande qu’elle reçoit. L’efficacité des performances inclut la mise à l’échelle des ressources, l’identification et l’optimisation des goulots d’étranglement potentiels ainsi que l’optimisation de votre code d’application pour les performances en cas de pic d’activité.

Jetons un œil à quelques modèles et pratiques qui améliorent la scalabilité et les performances de votre application.

Monter en puissance et monter en charge

Les ressources de calcul peuvent être mises à l’échelle dans deux directions :

  • Le scale-up consiste à ajouter davantage de ressources à une seule instance. Également connu sous le nom de mise à l’échelle verticale.

    Illustration d’un scale-up où des ressources sont ajoutées à une machine virtuelle.

  • Le scale-out ajoute des instances supplémentaires. Également connu sous le nom de mise à l’échelle horizontale.

    Illustration d’un scale-out où des instances sont ajoutées pour améliorer les performances.

Le scale-up consiste à ajouter davantage de ressources (processeur ou mémoire par exemple) à une instance unique. Cette instance peut être une machine virtuelle ou un service PaaS.

Le fait d’ajouter davantage de capacité à l’instance augmente les ressources à disposition de votre application, mais dans une certaine limite. Les machines virtuelles sont limitées à la capacité de l’hôte sur lequel elles s’exécutent. Les hôtes eux-mêmes ont également des limites physiques. Finalement, lorsque vous effectuez un scale-up la taille d’une instance, vous pouvez rencontrer ces limites. Elles entravent votre capacité à ajouter des ressources à l’instance.

Le scale-out consiste à ajouter des instances à un service. Il peut s’agir de machines virtuelles ou de services PaaS. Plutôt que d’ajouter de la capacité en créant une seule instance plus puissante, nous en ajoutons en augmentant le nombre total d’instances.

L’avantage inhérent au scale-out est que vous pouvez y recourir indéfiniment si vous avez d’autres machines à ajouter à l’architecture. Un certain type de distribution de charge est nécessaire pour le scale-out. Par exemple, un équilibreur de charge qui répartit les requêtes sur tous les serveurs disponibles ou un mécanisme de découverte de services qui identifie les serveurs actifs à qui envoyer les requêtes.

Dans les deux types de mise à l’échelle, les ressources peuvent être réduites afin d’optimiser les coûts.

La mise à l’échelle automatique désigne le processus d’allocation dynamique de ressources destiné à répondre aux besoins en matière de performances. À mesure que le volume de travail augmente, une application peut nécessiter des ressources supplémentaires afin de garantir les niveaux de performances souhaités et de respecter les contrats de niveau de service (SLA). Lorsque la demande diminue et que les ressources supplémentaires ne sont plus requises, il est possible de les libérer pour réduire les coûts.

La mise à l’échelle automatique tire parti de l’élasticité des environnements hébergés dans le cloud tout en allégeant les contraintes de gestion. Elle réduit la nécessité de recourir à un opérateur dédié à la supervision continue des performances d’un système, ainsi qu’à l’ajout et au retrait des ressources.

Optimiser les performances réseau

Quand vous optimisez le niveau de performance, vous examinez les performances du réseau et du stockage pour vérifier que leurs niveaux sont dans des limites acceptables. Ces niveaux de performances peuvent avoir un impact sur le temps de réponse de votre application. Choisir les technologies de stockage et de mise à niveau appropriées pour votre architecture vous permet de fournir à vos consommateurs une expérience optimale.

L’ajout d’une couche de messagerie entre les services peut être bénéfique pour les performances et la scalabilité. Une couche de messagerie crée une mémoire tampon de sorte que les demandes peuvent continuer à circuler sans générer d’erreur si l’application réceptrice ne peut pas suivre le rythme. À mesure que l’application traite les demandes, celles-ci obtiennent une réponse dans l’ordre dans lequel elles ont été reçues.

Optimiser les performances du stockage

Au sein de nombreuses solutions à grande échelle, les données sont divisées en partitions distinctes qui peuvent être gérées et consultées séparément. La stratégie de partitionnement doit être choisie avec soin afin d’optimiser les avantages tout en réduisant les effets négatifs. Le partitionnement peut aider à améliorer la scalabilité, à réduire la contention et à optimiser les performances.

La mise en cache dans votre architecture peut aider à améliorer les performances. Il s’agit d’un mécanisme permettant de stocker les données ou ressources (pages web, images) fréquemment utilisées pour une récupération plus rapide. Vous pouvez utiliser la mise en cache au niveau des différentes couches de votre application. Vous pouvez utiliser la mise en cache entre vos serveurs d’application et une base de données afin de réduire les temps d’extraction de données.

Vous pouvez aussi utiliser la mise en cache entre vos utilisateurs et vos serveurs web en plaçant le contenu statique plus près des utilisateurs. Ce type de mise en cache réduit le temps nécessaire pour renvoyer les pages web aux utilisateurs. Un deuxième effet est le déchargement des requêtes de vos bases de données ou serveurs web, ce qui augmente les performances pour les autres requêtes.

Identifier les goulots d’étranglement des performances dans votre application

Les applications et services distribués qui s’exécutent dans le cloud sont des logiciels complexes comprenant de nombreux éléments mobiles. Dans un environnement de production, il est important de pouvoir suivre le mode d’utilisation du système par les utilisateurs. Il est également important de suivre l’utilisation des ressources et généralement d’analyser l’intégrité et les performances de votre système. Vous pouvez utiliser ces informations comme une aide au diagnostic pour détecter et corriger des problèmes. Vous pouvez également utiliser ces informations pour identifier des problèmes potentiels et empêcher qu’ils surviennent.

L’optimisation des performances nécessite de comprendre comment les applications fonctionnent. Des erreurs, du code peu performant et des goulots d’étranglement dans des systèmes dépendants peuvent être détectés au moyen d’un outil de gestion des performances des applications. Souvent, ces problèmes risquent d’être masqués ou dissimulés pour les utilisateurs, les développeurs et les administrateurs, mais ils peuvent avoir un impact négatif sur les performances globales de votre application.

Parcourez toutes les couches de votre application pour identifier et corriger les goulots d’étranglement de performances présents. Ceux-ci peuvent être une gestion inappropriée de la mémoire dans votre application, ou encore le processus d’ajout d’index à votre base de données. Cette opération peut être itérative, car quand vous libérez un goulot d’étranglement, vous en découvrez un autre dont vous n’aviez pas connaissance.

Avec une approche approfondie du monitoring des performances, vous serez en mesure de déterminer quels types de modèles et de pratiques profiteront à votre architecture.

Vérifiez vos connaissances

1.

Parmi les exemples suivants, lequel représente un scale-up (mise à l’échelle verticale) ?

2.

Parmi les exemples suivants, lequel représente un scale-out (mise à l’échelle horizontale) ?