Gérer la scalability et la performance d'un site Internet
Traiter le problème avant qu'il ne vous traite
La scalability et la performance d'un site Internet sont des sujets complexes. Ils doivent être traités en amont du projet et nécessitent des équipes pluridisciplinaires.
Cet article recense 12 clés de succès.
Un peu de vocabulaire
La scalability ou extensibilité est la capacité d'un système à augmenter sa capacité de travail en souplesse.
La performance est la mesure de la vitesse maximale d'un système donné.
12 clés de succès techniques dans le Web grand public
Pensez asynchrone pour toutes les actions.
Les boucles de traitement à longueur variable et les opérations récursives doivent être asynchrones. Par exemple, le calcul des résultats d'un sondage peut être asynchrone sauf peut-être pour les dix premiers résultats, l'affichage d'un commentaire doit être instantané pour le posteur mais peut être différé de quelques secondes pour les autres lecteurs.Pensez cache
sur plusieurs niveaux et limitez l'utilisation de données non cachables. Par exemple, le résultat d'un sondage peut être caché 10 minutes, alors que sa widget d'affichage sera cachée 1 minute et la page sur laquelle elle est présentée sera cachée 10 secondes. Pensez à tester les cas aux limites des caches multi-niveaux ; quel est la durée du cache finale...Testez souvent
Vérifiez l'effet de chaque changement fonctionnel sur les performances et la montée en charge. Testez peu, utilisez des scénarii qui correspond aux comportements constatés de vos utilisateurs, inutile de systématiser les campagnes de test global. Testez en condition de production, utilisez un double de vos données de production avec des injecteurs dédiées. Les résultats peuvent varier beaucoup en fonction des données utilisées .Testez la performance de vos applications à l'aide d'outil de profiling : pourquoi une fonction est appelée aussi souvent ? son temps de traitement peut-il être réduit ?...
Isolez et répartissez les fonctionnalités
pour simplifier l'identification des problèmes et leur optimisation. Par exemple, les fonctions d'un site peuvent être séparées sur des couples de serveur application / base de données distincts, un couple pour les contenus, un autre pour les commentaires, encore un pour le rating... Évitez les framework centraux complexes. Supprimez les dépendances, chaque fonction doit être pensée pour pouvoir évoluer indépendamment ou être supprimée sans impacter la disponibilité et la qualité des autres services. Vous allez comprendre pourquoi le diagramme UML le plus important est le diagramme de classe...En production, monitorez vos applications
étudiez leurs comportements et projetez les effets d'une montée en charge pour identifier en amont les problèmes émergents.Optimiser de vrais problèmes.
Les systèmes complexes se comportent souvent de façons imprévisibles. Identifiez la cause réelle des effets. Par exemple, la cause d'une saturation du nombre de connexion vers une base de données peut-être simplement un mauvais paramétrage de la base de données comme elle peut être un problème de cache ou encore une dépendance synchrone vers un service tiers qui ralentit les réponses HTTP vers des Internautes, accumulant ainsi la charge, ou encore une augmentation événementielle de l'audience ou encoreOptez pour un mode de mise en production flexible et réversible.
Si les fonctions de votre application sont suffisamment isolées, vous devriez être capable de livrer une évolution d'une fonction pour un périmètre d'utilisateurs limité, pouvoir observer le comportement de celle-ci avant de généraliser la mise en production ou revenir à la version précédente.Répliquez vos serveurs
pour répartir la charge et planifiez l'évolution de votre infrastructure.Évitez les requêtes SQL complexes
mais dupliquez les données. Vous éviterez les optimisations de requêtes SQL, les locks sur vos tables, voir les problèmes de synchronisation entre les caches internes de la base de données pour les sites à fortes audiences.Compilez votre code.
Pour les langages de script comme PHP, il existe des opcodes comme XCache qui évitent une recompilation systématique à chaque requête HTTP.Enfin , la coopération entre Développeur, SysOps et DBA est indispensable pour éviter les situation de crises majeurs.
- Ajouter un commentaire
- 1601 lectures

