Semaine 6 · Laboratoire

Varnish
devant Apache

Une nouvelle instance, une cache en avant du web, et des chiffres qui fondent : le laboratoire 2 de l'Application distribuée.

420-5A4-MT · Acte 5 · Le cache
Laboratoire Cache · Entreprise

Cornucopia · Encyclopédie Bio & Recettes

La ferme maraîchère de Flora et Hazel publie un grand catalogue interactif de recettes de saison et de fiches de culture bio.
Projet de la Ferme

Accueillir des centaines de milliers de visiteurs sur 500 fiches conseils avec photos et instructions de préparation.

Laboratoire Cache · Achalandage

Rush 500 000 vis/j : Varnish devant WordPress !

Sur le terrain

Niveau de Fréquentation

500 000 visiteurs par jour

⚠️ SURCHARGE INTENSIVE DU SERVEUR !

Le serveur PHP/MySQL recalcule des milliers de fois par minute exactement la même page HTML pour des visiteurs différents !

ANALYSE

Rapport du terrain

Le Problème Système

Temps de réponse de 2.5 secondes par page, processeur du serveur web à 100 % d'utilisation constante.

✅ Solution trouvée

Déployer Varnish HTTP Cache devant le site de Cornucopia pour servir les pages enregistrées en mémoire vive en 2 millisecondes !

Laboratoire Cache · Mission

La mission du jour

À la fin de la séance, vous aurez :

Prérequis : votre instance WordPress tout-en-un, fonctionnelle - on la nomme http20 pour la suite du module (référence : 192.168.56.20). Sa base de données vit encore avec elle : la séparation viendra la semaine prochaine, derrière Varnish, sans que le cache s'en aperçoive. Minimum 2 commits pertinents en classe cette semaine.

Laboratoire Cache · Devis

Varnish : la cache en avant

5 points Git : /votre-depot/cache/

Ajoutez à votre ensemble d'instances existant, avec les mêmes caractéristiques :

Mesures : test de charge BRUTAL avec JMeter, captures top à 10 et 60 secondes (performances_partie_3_10secondes.png, performances_partie_3_60secondes.png), tableau rempli (id par instance, temps moyen JMeter).

Barème : guide d'installation (2), fichiers de configuration (1), tableau rempli (1), captures d'écran (1).

Minimum 2 commits pertinents en classe durant la semaine 6; le reste avant le cours de la semaine 7. Ce laboratoire doit être entièrement terminé pour le début de la semaine 7.

Laboratoire Cache · Topologie

Varnish

Topologie : un client 192.168.56.30 accède au serveur VARNISH qui met en cache le serveur HTTP (Apache et WordPress), lui-même relié au serveur MYSQL
Laboratoire Cache · Consignes

Varnish

La mise en place

  • Ajouter le service suivant à votre ensemble de serveurs existants avec les mêmes caractéristiques précédentes :
  • Un serveur qui offre le service de cache Varnish en avant de votre serveur HTTP (apache).
  • Modifier l'URL d'accès de WordPress pour utiliser l'IP du serveur varnish.

Le test de charge BRUTAL

  • Faire un test de charge BRUTAL avec JMeter pour documenter les performances de votre ensemble de serveurs actuel.
  • Faire une seule capture d'écran statique de la commande top exécutée en ssh de tous les serveurs actifs après environ 10 secondes de test (performances_partie_3_10secondes.png).
  • La même chose après environ 60 secondes de test (performances_partie_3_60secondes.png).
  • Noter dans un tableau la valeur idle du processeur (id) pour chaque serveur.
  • Noter dans un tableau la valeur moyenne (temps moyen de réponse) indiquée par JMeter.
Laboratoire Cache · Étape 1

La nouvelle instance et Varnish

# une instance varnish30 selon votre infrastructure (reference : 192.168.56.30)
sudo apt update
sudo apt install varnish net-tools
sudo netstat -tulpn | grep varnishd
# varnishd ecoute pour l'instant sur son port par defaut (6081)

Rappel clonage : nouvelle adresse MAC, nouveau nom d'hôte (varnish30), nouvelle adresse IP. Un clone qui garde l'identité de son parent sème le chaos sur le réseau.

Laboratoire Cache · Étape 2

Varnish prend le port 80

sudo systemctl edit varnish.service
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a ADRESSE_DE_VARNISH30:80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret
sudo systemctl daemon-reload
sudo systemctl restart varnish.service

Le pare-feu de varnish30 s'ouvre au strict nécessaire : le port 80 pour les visiteurs, le 22 pour vous.

Laboratoire Cache · Étape 3

Le backend, et Apache qui se replie

# sur varnish30 : declarer le fournisseur
sudo nano /etc/varnish/default.vcl
backend default { .host = "ADRESSE_DE_HTTP20"; .port = "80"; }
# sur http20 : ecouter seulement sur sa propre adresse
sudo nano /etc/apache2/ports.conf
sudo nano /etc/apache2/sites-enabled/000-default.conf
<VirtualHost ADRESSE_DE_HTTP20:80>
sudo systemctl restart apache2.service
Laboratoire Cache · Étape 4

WordPress déménage officiellement

sudo varnishstat -1 | grep -i cache
MAIN.cache_hit 412
MAIN.cache_miss 37
Laboratoire Cache · Étape 5

La preuve par les chiffres

secondes / serveurHTTPMYSQLVARNISHtemps moyen de réponse (seconde)
10 secondes
60 secondes
Laboratoire Cache · Barème

Varnish

Dans Git : /votre-depot/cache/
  • (2 points) sa version de son guide d'installation
  • (1 point) les fichiers de configurations utilisés
  • (1 point) le tableau rempli
  • (1 point) les captures d'écran

Un minimum de 2 commits pertinents doit être effectué en classe durant la semaine 2, les autres devant être complétés avant le cours de la semaine 3. Ce laboratoire doit être entièrement terminé pour le début de la semaine 3.

Laboratoire Cache · Avant de partir

Livrables et devoir

La semaine prochaine, l'acte 6 : les Guildes ouvrent - profils de membres et points calculés en temps réel, du contenu personnalisé que la cache ne peut pas servir. On sépare la base de données du web, chacun sa machine, et on mesure le gain.