Tout d’abord, il faut savoir qu’il existe deux types de contenus différents :
☑ Les ressources statiques
☑ Les ressources dynamiques
Les ressources statiques peuvent être des images, des fichiers audios, des pages HTML, des javascript ou encore des feuilles CSS. Contrairement aux ressources dynamiques, ces dernières n’ont pas besoin d’exécuter un programme pour pouvoir fonctionner. Elles sont restituées par le serveur Web dans leur format d’origine.
Il faut savoir que les ressources dynamiques sont obligatoirement fabriquées par des logiciels, que ce soit des scripts ou bien des applications. Un serveur classique est capable de répondre rapidement aux ressources statiques, contrairement aux ressources dynamiques. En effet, ces dernières ont généralement besoin d’être couplées à un conteneur Web afin de ne pas subir de ralentissements éventuels. Lorsqu’un serveur fait face à une grande demande de données, le temps de réponse sera alors dégradé. Il est donc très avantageux de disposer d’un proxy inverse.
Le concept général
Dans un premier temps, il est intéressant de connaître les fonctionnalités principales de l’outil Varnish. Voici ce que cet outil pourra vous apporter :
☑ Il va permettre de soulager votre serveur avec des contenus dynamiques.
☑ Toute l’architecture peut être sécurisée avec une sécurité supplémentaire apportée par Varnish grâce à une couche d’abstraction.
☑ Les charges peuvent être réparties, notamment si vous disposez de plusieurs appareils. Avant toute chose, Varnish est une solution Open Source destinée à Linux. Ainsi, il est important que votre projet rentre dans ces critères afin que Varnish se révèle efficace. Il est possible d’utiliser Varnish sur Windows, mais dans l’idéal il serait judicieux d’opter pour un serveur Linux pour une utilisation optimale.
Il faut savoir qu’en ajoutant une couche supplémentaire dans votre architecture, cela engendrera forcément un coût. Le coût va regrouper l’apprentissage, la maintenance, mais également l’exploitation. Même si le coût total n’est pas élevé, cela reste tout de même un coût qui s’ajoute à l’ensemble de votre projet. De plus, si votre projet se complique, il sera alors nécessaire de faire appel à des techniciens pour que le développement se déroule sous les meilleures auspices. Lorsque l’on décide de faire appel à Varnish, c’est notamment lorsque les tests réalisés démontrent que le temps de réponse est long, ou si lorsque vous utilisez une application, votre serveur n’est plus capable de faire face à la charge de données reçue.
Varnish va vous permettre de placer en cache le contenu commun à tous les utilisateurs du serveur, mais si vous désirez personnaliser l’application pour chaque utilisateur cela ne conviendra pas à vos attentes. Les performances ne seront pas certaines d’être améliorées.
Le fonctionnement de Varnish
Afin d’installer Varnish, c’est très simple. Il vous suffit tout simplement d’appuyer sur une des distributions Linux. Voici les différents paramètres qui s’offrent à vous lors du démarrage :
☑ Choix entre le cache mémoire ou le cache fichier
☑ Choix de la taille du cache. Vous ne devez pas inclure les ressources statiques dans votre calcul.
☑ Entrer une IP ainsi qu’un port d’administration
☑ Entrer une IP ainsi qu’un port d’écoute La configuration sera ensuite réalisée via un langage spécifique à Varnish, mais qui ressemble tout de même à celui des concurrents.
Cette configuration va notamment vous permettre d’affiner les paramètres de Varnish en fonction de vos attentes.
☑ vcl_recv : cela vous permettra de choisir si le contenu doit être servi ou non, et de quelle manière
☑ vcl_fetch : cette requête vous permet de définir comment Varnish va réagir face au contenu qui n’est pas présent dans le cache
☑ vcl_pass : réponse renvoyée au client sans vérification ni placement dans le cache
☑ vcl_hit : contenu demandé trouvé dans le cache
☑ vcl_miss : contenu demandé non trouvé dans le cache
☑ vcl_deliver : renvoi au client du contenu du cache
☑ vcl_error : apparition d’une erreur
N’oubliez pas également de déclarer les serveurs cibles dans le « backend ». Ces derniers vont être chargés d’aller chercher le contenu. Vous allez devoir inscrire le domaine, ainsi que l’adresse IP, et le port du serveur cible. Vous avez la possibilité de déclarer plusieurs cibles, tout simplement parce qu’il est possible que Varnish soit obligé d’utiliser différentes applications.
Voici quelques outils classiques qui vont vous permettre d’utiliser Varnish et de l’exploiter convenablement :
☑ VarnishTop : regroupe les événements les plus fréquents, par ordre d’importance.
☑ VarnishStat : regroupe les statistiques de Varnish telles que le bombre de requêtes envoyées depuis le cache, ou depuis le backend, etc.
☑ VarnishLog : mémoire regroupant les informations Varnish qui se vident au fur et à mesure du remplissage.
☑ VarnishHist : permet de constater rapidement le temps que met Varnish à transmettre le contenu.
Exemple :
Avoir un exemple est toujours très pratique. À l’heure actuelle, nous sommes en plein travail sur un portail internet dont l’objectif est d’atteindre 1 million de hits mensuel. Certes, ce chiffre peut paraître ridicule, mais c’est tout de même très compliqué à gérer.
Ce site en question utilise un gestionnaire de contenu Typo3, qui permet d’alimenter du contenu, mais qui a de gros problèmes en termes de performances. L’architecture paraît pourtant être très simple à comprendre, mais le problème peut émaner des sources suivantes :
☑ Configuration de MYSQL
☑ Configuration de PHP
☑ Configuration d’Apache
☑ Configuration du système
☑ Configuration de Varnish
☑ Le matériel CPU et RAM
☑ Le code source de l’outil qui gère le contenu
☑ Le réseau qui relie la machine
Ainsi, nous désirons vous faire comprendre qu’il est nécessaire de disposer de certaines compétences et de connaissances notamment pour optimiser cette architecture. Nous désirons ici mesurer notamment les gains apportés par Varnish. Pour cela, nous utilisons un outil d’automatisation appelé Jmeter permettant de mesurer rapidement les résultats.
Nous allons donc tester huit requêtes différentes :
1. Page d’accueil
2. Liste d’articles
3. Des articles détaillés
4. La page pour s’authentifier
5. Du contenu personnalisé
6. Un fichier audio
7. Une image de fond
8. Le style de l’application
Nous ne mettons pas les pages d’authentification et d’accès en cache.
Le temps devrait être à peu près égal entre les deux pages différentes.
Voici les résultats que nous avons obtenus sans Varnish : Le temps de génération par CMS se situe entre 2,5 et 3,5 secondes. Voici les résultats que nous avons obtenus avec Varnish : Le temps de génération se situe entre 10 et 15 ms. On constate donc un gain de temps de 99 % environ, ce qui est totalement incroyable.
Les pages liées à l’utilisateur directement et qui sont personnalisées arborent tout de même un gain de temps d’environ 20%, sûrement dû aux requêtes envoyées au CMS.
Réfléchir bien avant
Maintenant que vous avez pris connaissance des bases de fonctionnement de Varnish, et que vous avez également compris tous les avantages de cette solution, vous devez savoir une chose très importante. En effet, il est nécessaire que cette solution soit mise en place de façon anticipée, et non dans l’urgence.
Il faut savoir que toute audience Internet de grande envergure devrait mettre en place cette solution dès le départ. Vous avez la possibilité d’anticiper cette étape avec la norme ESI du W3C qui a été créé par la société Akamai, spécialisée dans les problèmes de cache et de performances.
Le principe est simple, consistant notamment à découper toute la structure HTML d’une page en sections différentes. Les échanges pourront ainsi être optimisés entre le navigateur et le serveur. La norme ESI va permettre notamment de reprendre la balise appliquée par Varnish. Cette balise va ainsi permettre d’indiquer le contenu à inclure ou non dans une adresse URL. Le cache Varnish sera ainsi mieux géré avec des sections cachées claires et d’autres non cachées.
Prenons pour exemple une page comprenant trois blocs différents :
Contenu spécifique utilisateur : hello Paula !
Les dernières news qui tombent toutes les 2 minutes
Les 5 news les plus consultées hier (calculé la nuit)
En règle générale, il n’est pas possible que cette page soit cachée par Varnish. Tous les utilisateurs doivent pouvoir voir leur nom affiché, et pas uniquement le nom de la première personne qui a visité cette page. Cependant, il est parfois utile que le deuxième bloc et le troisième bloc soient cachés. Vous avez alors deux solutions différents :
☑ Opter pour un iframe classique HTML
☑ Opter pour une balise ESILa seule différence entre ces deux solutions est le fait que le contenu ne sera pas placé au même endroit. Pour la balise iframe classique HTML, le navigateur client va se charger d’assembler les blocs. La norme HTML classique est respectée, mais lorsque vous déciderez de ne plus utiliser Varnish, votre site internet continuera de fonctionner sans changer. Pour la balise ESI, Varnish se charge d’assembler tout le contenu.Impressions après l’utilisation de VarnishIl est toujours intéressant de découvrir l’impression laissée aux autres utilisateurs par l’utilisation d’un logiciel avant de prendre la décision de l’acheter.
Voici ce que nous pouvons vous dire sur Varnish :
☑ Le mode mémoire paraît être plus efficace que le mode fichier.
☑ Le cache des ressources statiques est moins performant que si vous utilisez un serveur tel que Apache.
☑ La configuration VCL doit être très simple afin que cela fonctionne parfaitement.
☑ Privilégiez le cache dans les étapes de conception de votre projet avec la baliseiframe ou la norme ESI.
☑ Vous devez être capable d’avoir une vision générale de son application.
☑ Utilisez un outil tel que Jmeter pour vérifier que la configuration est optimale.
☑ Préférez un serveur 64 bits pour exécuter Varnish.
☑ N’ayez pas peur des logs, car cela vous permettra d’obtenir un fonctionnement parfait de Varnish.
Les inconvénients de Varnish
On peut affirmer que Varnish est extrêmement efficace. Varnish est souvent mal utilisé, car les utilisateurs ont tendance à bâcler la configuration du logiciel. Il est important de retenir aussi que Varnish n’est pas utile lorsque le contenu est trop personnalisé, et ne sera donc pas adapté à tous les projets.
Via notre expérience, nous pouvons affirmer que les cookies ne peuvent pas être manipulés comme vous le désirez entre client et serveur. Si les échanges de cookies sont nombreux, vous ne pourrez accéder uniquement qu’au premier cookie.
Si votre site utilise un certificat SSL, vous devez faire attention. Varnish ne supporte pas le protocole SSL pour le moment. Il est donc nécessaire d’en ajouter un. C’est d’ailleurs une des plus grandes limites de Varnish.
Si vous désirez vous lancer dans l’utilisation de Varnish, il sera nécessaire tout de même de disposer de connaissances solides en architecture Web, mais également sur le fonctionnement de ce type d’application. Vous ne disposerez pas d’outil graphique. Il est donc nécessaire d’être patient avant de pouvoir comprendre le fonctionnement intégral de Varnish.
Notons tout de même que Varnish reste un outil très performant et qu’il s’avère utile pour diverses utilisations, notamment celles comprenant des grandes audiences.