Comment bien mener l’optimisation des applications à fort trafic


Lorsqu’un nouveau site ou application doit passer en production, il est impératif de vérifier, avec méthode, que le service sera disponible et réactif pour les utilisateurs finaux. Dans ce cadre, des tests de charges bien menés permettent de mettre en évidence les points de défaillances et goulots d’étranglement.



La plupart des processus pouvant ralentir ou monopoliser plus de ressources que nécessaires, ne sont pas détectables sans stresser l’application.


Evaluer la charge à supporter 

Dans ce cadre, plusieurs cas de figure peuvent se présenter.
Nous pouvons avoir à faire à un nouveau service pour lequel aucune référence n’est connue. Il faudra donc se référer au business plan en appliquant une marge de sécurité conséquente. 
Dans le cas d’une refonte ou de l’optimisation d’un service existant, l’exercice est plus simple, à condition d’avoir bien mesuré l’audience. Si ce n’est pas le cas, il faudra prévoir un temps supplémentaire pour installer un système de mesure du trafic et collecter assez de données pour que celles-ci soient pertinentes. 
Le but n’est pas de chercher les limites du système, mais de s’assurer que le service ne soit pas dégradé, même en conditions difficiles.


Choisir ses scénarios 

Toutes les parties d’un même système n’ont pas les mêmes besoins en ressources, et certaines interactions, comme des accès concurrents à une base de données ou un système de partage de fichiers peuvent s’avérer problématiques lors de fortes montées en charge. 

Comme dit précédemment, il sera important d’avoir une base de référence permettant d’évaluer le trafic attendu, mais il faut ajouter un niveau de complexité. La question devient donc : «  Comment mes utilisateurs finaux se comportent sur l’application ? ».

C’est le moment où l’interaction avec le business peut devenir déterminante. Il va falloir analyser les statistiques d’audience pour en extraire des personas. Des utilisateurs types qui représentent la plupart du trafic. 

Chacun de ces personas doit avoir un poids, une proportion réaliste du trafic qu’il représente.
Gardez à l’esprit qu’une partie du trafic peut être provoquée par des bots: se contentant en général de crawler des données, ceux-ci ont un comportement différent de l’humain. Il peuvent engendrer une charge supplémentaire, non négligeable, et peuvent être pris en compte si leur impact risque d’être conséquent.

L’importance de la mesure 

Comme pour l’évaluation du trafic et le choix des scénarios, avoir des données précises lors du déroulement des tests va s’avérer être extrêmement utile pour déterminer les axes d’amélioration possibles. 

Même si les utilitaires de simulation de montée en charge fournissent un rapport, cela ne dit pas où se trouvent précisément les points faibles de votre système. 
L’utilisation d’un APM (Application Performance Monitoring) est fortement recommandée, voire indispensable. Ne choisissez pas un outil pour sa popularité ou la notoriété de son fournisseur, assurez-vous bien qu’il réponde à votre besoin et qu’il soit bien adapté à la technologie utilisée par votre application.

Tirez mais pas pour tuer 

Bien mener ses tirs de charge n’est pas forcément intuitif; de nombreux services vont vous proposer de commencer par faire tomber l’application pour vous permettre de connaître le trafic maximum atteignable. Mais après, que fait-on ? On ajoute des machines ? Des machines plus puissantes ? 
Voilà la mauvaise marche à suivre: cette méthode ne vous donnera aucune indication précise et fiable pour obtenir une application robuste.
Privilégiez une approche progressive et itérative. Ne cherchez pas à mettre hors service l’application, cherchez plutôt, en montant progressivement en charge, le point à partir duquel le service commence à se dégrader. Mesurez, analysez, corrigez, puis vérifiez l’impact des modifications. Et cela jusqu’à ce que votre objectif soit atteint.

Cherchez les coupables 

Si vous avez bien suivi nos conseils, et que vous avez utilisé le bon APM en rapport à votre système. Vous aurez des métriques fines sur ce qui consomme trop de ressources dans votre application.
Mais pour être certain que la solution apportée est pertinente et efficace, il va falloir expérimenter. 
Commencez par déployer les correctifs un par un et à simuler la même charge que précédemment, assurez vous que toute chose est égale par ailleurs, ainsi vous saurez quel est l’impact de chaque modification.

Cela paraît être une perte de temps, mais posons un scénario concret. Vous procédez à plusieurs modifications, vous faites un tir de charge et l’impact global est positif. Mais en réalité, vous avez ajouté un index en base de données qui a optimisé quelques requêtes mais d’autres sont plus lentes. En général, cette modification dégrade le service. Dans ce cas, vous ne pouvez pas vous en rendre compte.

L’avantage de la méthode 

Vous devez commencer à sentir le principe, c’est par l’économie des ressources que votre application pourra proposer un service plus rapide dans des conditions plus difficiles; mais en plus, les ressources ayant un coût, qu’elles soient physiques ou que vous hébergez dans un cloud. Optimiser votre système et chercher les goulots d’étranglement vous permettra une économie de long terme sur votre infrastructure. Le temps et les moyens mis en œuvre pour améliorer votre performance ne seront donc jamais un investissement à perte.

Optimiser les applications à fort traffic est un sujet qui vous concerne ?
Discutez-en avec l’équipe Continuous!

 

 

Auteur : Christophe Garcia , consultant DevOps chez Continuous.