On ne développe pas un site Web à fort trafic comme on développe un site institutionnel qui recevra quelques centaines de visites par jour. Quand les performances doivent être optimales, il est nécessaire d’adapter l’architecture logicielle du site Web. Quelles sont les technologies à mettre en oeuvre pour servir un maximum de visiteurs en un minimum de temps ?
Choisir le bon framework
- précompilation,
- gestion de caches,
- Edge Side Include (ESI)
Ce dernier point est particulièrement important dès lors que vous souhaitez mettre en place une stratégie agressive de caching . En effet, la norme ESI éditée par Akamai permet de mettre en cache des morceaux de page tout en conservant certaines parties dynamiques : nom de l’utilisateur connecté, panier d’achats, news temps réel, etc.
Symfony 2 est particulièrement adapté puisqu’il gère nativement les ESI et intègre un reverse proxy écrit en PHP pour les tester.
Mettre en place un front solide
L’objectif de cette séparation stricte est de réduire au maximum les appels vers les serveurs applicatifs en back tout en servant un maximum de pages en cache via le front.
Varnish et Squid sont des reverses proxies à placer en frontal des applications métiers. Ce sont eux qui répondent aux sollicitations :
- soit en servant directement les pages en cache,
- soit en appelant le serveur applicatif ;
- soit un mix des deux lors de l’utilisation d’ESI.
Une bonne requête est une requête qui ne part pas
- Cache-Control
- Expires
- Last-Modified
- ETag
Là encore, Symfony 2 est adapté puisqu’il gère nativement le cache au plus près de la norme HTTP : durée de vie, expiration, invalidation, etc. Un bundle tel que LiipCacheControl vous aidera également dans cette tâche sensible.
Du cache coté applicatif
Issu de la mouvance NoSQL, Redis est un serveur clef/valeur évolutif gérant les accès concurrents, les données structurées et de nombreuses fonctionnalités puissantes. Il autorise la montée en charge ainsi que la sauvegarde asynchrone sur disque afin d’optimiser les performances.
Limiter les requêtes (en nombre et en poids)
- la minification et l’assemblage des fichiers CSS et Javascript,
- la réduction du nombre d’images via la construction de sprites (images concaténées),
- la taille des fichiers : poids des CSS, Javascript, images, HTML,
- l’utilisation de la compression GZIP pour l’envoi des données.
Des bundles tels que Assetic, Sprites et HTMLPurifierBundle pourront vous être utiles pour gérer ces problématiques.
Des technologies adaptées
Ainsi, tout au long de la vie du projet, les technologies devront être minutieusement sélectionnées en ayant à l’esprit cette contrainte de scalabilité.
Conclusion
J’ai abordé quelques techniques et technologies telles que Symfony, Varnish, Squid, Redis permettant de gérer la montée en charge d’un site Web. L’écosystème Web évolue rapidement, n’hésitez donc pas à suggérer vos outils et technologies en commentaire.