Qu’est-ce que Varnish ?
Varnish Cache est un serveur de cache HTTP utilisé pour accélérer les temps de réponse des sites web et réduire la charge sur les serveurs web. Son rôle est d’agir comme un reverse proxy, stockant en cache les pages fréquemment demandées.
Varnish est un composant indispensable et très performant pour scaler un site web. On ne peut pas scaler sans cache et Varnish est LA référence du cache html. Personne ne fait mieux, même les CDNs sont basés sur Varnish.
Il permet de répondre très vite aux requêtes beaucoup plus vite qu’un serveur. Il améliore ainsi l’expérience des visiteurs en optimisant les temps de réponse, notamment pour absorber un pic de trafic (passage TV, promotion, soldes…) sans devoir multiplier l’infra.
Mais la configuration de Varnish n’est pas si simple. Varnish lui-même est mal documenté, c’est un “truc de barbus”. Sa bonne configuration ne peut être qu’un travail en collaboration entre les Dev et les personnes en charge de l‘infra, car il y a beaucoup de règles métiers à combiner avec des règles techniques et le fonctionnement des CMS. Par exemple, la gestion des règles d’invalidation du cache est souvent mal comprise, de même que les règles de mise en cache ou les durées de vie/TTL. Même s’il est assez répandu, trouver les bonnes compétences sur Varnish n’est pas simple.
Pourquoi utiliser Varnish ? Optimisation des performances
Varnish Cache agit comme une solution de mise en cache HTTP entre le serveur web et l’utilisateur final. En stockant temporairement les réponses web, Varnish permet de diminuer les temps de réponse en livrant directement les pages mises en cache, sans solliciter le backend pour chaque requête.
Avantages clés :
- Amélioration de la vitesse de chargement : les pages web mises en cache sont servies en quelques millisecondes.
- Réduction de la charge backend : les requêtes répétitives sont traitées par le cache, évitant ainsi la surcharge des ressources serveur.
- Compatibilité multiplateformes : Varnish fonctionne avec des serveurs backend tels que Apache, Nginx, etc.
Déploiement d’un Varnish pour un site web
- Le schéma suivant présente comment et par qui Varnish doit être configuré.
- Installation sur un serveur dédié, cela c’est plutôt une tâche pour les personnes en charge de l’infra ou l’hébergeur, qui va intégrer le VCL.
- Le Varnish peut aussi être installé sur le serveur web.
- Configuration des règles de cache : il s’agit de définir quels éléments doivent être mis en cache, pour combien de temps, et quels paramètres de requêtes HTTP doivent être ignorés. C’est plutôt le rôle des Dev.
Varnish en reverse proxy : comment ça fonctionne ?
Un reverse proxy est un serveur intermédiaire entre l’utilisateur et le serveur backend. Varnish sert de reverse proxy en interceptant les requêtes et en décidant de les envoyer au backend ou de répondre directement avec une version mise en cache.
3 grandes fonctions / phases :
- vcl_recv
- Analyse les requêtes clientes
- Sélectionne un Backend
- Calcule la stratégie de cache
- vcl_backend_response
- Analyse si la réponse doit être ajoutée dans le cache Varnish
- e. les TTL
- vcl_deliver
- Manipuler les headers de réponses
- ex : cache hit / miss
Avantages du reverse proxy avec Varnish :
- Diminution de la latence : réponse rapide pour les contenus statiques mis en cache.
- Sécurité et disponibilité : cache des pages critiques en cas de surcharge ou de panne du backend.
- Scalabilité : meilleure gestion des pics de trafic grâce à la mise en cache intelligente.
Configuration avancée pour gérer des gros trafics
Comprendre VCL (Varnish Configuration Language)
VCL permet de personnaliser les comportements de mise en cache pour mieux répondre aux besoins de sites web à fort trafic. Avec VCL, il est possible d’affiner la gestion du cache en fonction de certains critères (URL, cookies, etc.).
Exemples de configurations VCL :
- Bypass cache pour le contenu dynamique : utiliser VCL pour définir que certaines requêtes (comme celles qui dépendent des sessions utilisateurs) doivent contourner le cache.
- Mise en cache sélective : configurer VCL pour ne mettre en cache que certaines parties du site (par exemple, les pages publiques), tout en laissant les pages privées interagir directement avec le backend.
- Gestion des header HTTP : personnaliser les headers afin d’ajuster les règles de cache selon le type de contenu.
Optimisation pour les sites à très haut trafic
- Gestion fine des caches : utiliser des règles pour distinguer les contenus dynamiques (ex. comptes utilisateurs) des contenus statiques
- Paramétrage de TTL (Time To Live) : ajuster les durées de conservation en cache pour différents types de contenu, selon leur fréquence de mise à jour.
- Load balancing : fonctionnalité essentielle qui permet de répartir les requêtes sur plusieurs serveurs pour mieux gérer les gros volumes de trafic.
- Deux types de load balancing sont fréquemment utilisés :
- Round Robin : répartition équitable des requêtes entre plusieurs serveurs.
- Sticky Session : associé à une session utilisateur spécifique, ce qui est utile pour les applications nécessitant une continuité.
Varnish Cache Purge : mécanismes et bonnes pratiques
Pourquoi purger le cache ?
La purge du cache est essentielle pour actualiser les données obsolètes et garantir que le contenu servi aux utilisateurs est à jour. Varnish offre plusieurs méthodes pour purger les objets du cache.
Méthodes de purge :
- Purge via requête HTTP : utiliser des requêtes PURGE pour effacer des objets spécifiques dans le cache.
- BAN : une alternative à PURGE pour marquer les objets invalides. Varnish continue de servir les objets tant qu’ils ne sont pas explicitement supprimés.
Bonnes pratiques de gestion du cache :
- Planifier les purges : pour éviter les interruptions soudaines, planifier les purges pendant les heures creuses.
- Monitorer les performances : surveiller les temps de réponse avant et après une purge pour évaluer son impact.
Configuration du backend Varnish et load balancing
La configuration des backends dans Varnish est essentielle pour s’assurer que les requêtes sont envoyées aux bons serveurs. Alfa-Safety prend en charge la configuration des serveurs backend et la gestion des règles de Load Balancing en fonction des besoins de l’infrastructure.
Déclaration des backends :
backend {{ item.name }} {
.host = « {{ item.host }} »;
.port = « {{ item.port }} »;
}
- Responsabilité Alfa-Safety : définir les serveurs web derrière Varnish et gérer les flux de pare-feu.
Configuration du load balancing :
- vcl_init et les directors permettent de configurer le mode de load balancing (ex. Round Robin, Sticky Sessions). Cela dépend de l’architecture applicative et du type de gestion des sessions.
- Responsabilité Alfa-Safety : choisir et configurer le mode de répartition des requêtes selon l’infrastructure.
Varnish pour les sites e-commerce
La mise en place de Varnish sur un site e-commerce est plus compliquée mais indispensable.
A priori, parce qu’il doit afficher un catalogue de produit, que les pages sont complexes à construire, un site e-commerce a besoin d’un Varnish. Dans le même temps, on ne peut pas tout mettre en cache car de nombreuses informations doivent rester dynamiques, et/ou spécialisées par utilisateur (par exemple, le prix affiché par visiteur, le stock en fonction de la localisation, les promos…). Il va donc falloir faire très attention à la gestion de la page.
- Les éléments dynamiques doivent être exclus du cache : cela va se faire en traitant différemment certaines parties de la page avec des blocs ESI.
- Blocs ESI (Edge Side Includes) : ils vont permettre de découper la page en blocs dynamiques et non dynamiques, et qui vont être traités différemment. Magento, Adobe Commerce, Ibexa savent bien capitaliser sur cette fonction.
Surveillance et optimisation continue de Varnish Cache
Une fois Varnish déployé, comme tout élément d’infra, il faut le monitorer et l’optimiser. Varnish est un outil extrêmement stable. L’enjeu est surtout de savoir analyser son activité et sa configuration.
Outils de monitoring :
- Varnishstat : fournit des statistiques en temps réel sur les performances du cache, les taux de hit/miss, et l’utilisation des ressources.
- Varnishlog : un journal complet des requêtes traitées par Varnish, utile pour diagnostiquer les problèmes de performance ou d’optimisation du cache.
Optimisation continue :
- Ajuster la taille du cache : selon la quantité de données à stocker, il est essentiel d’ajuster la taille du cache pour éviter le thrashing (éjection prématurée des objets).
- Analyser les taux de hit/miss : améliorer les règles de cache en fonction des taux de hit/miss pour maximiser l’efficacité de Varnish.
Conclusion
Varnish Cache est une solution puissante et indispensable pour améliorer les performances web sur un site à fort trafic et encaisser les pics de charge. Grâce à une configuration avancée, notamment via VCL, et à une gestion intelligente des caches, Varnish permet d’accélérer le temps de chargement tout en réduisant la charge sur les serveurs backend.
Il faut donc bien savoir le configurer et, pour cela, collaborer efficacement entre TMA et infra, Dev et Ops.
Chez Alfa-Safety, c’est notre quotidien d’optimiser l’infra cloud de vos sites et nous sommes des spécialistes de la configuration de votre Varnish pour garantir la haute disponibilité et la performances de vos applicatifs web, et nous avons l’habitude de travailler avec les Dev sur ce sujet.