1. Symfony Pot – Juin 2014
Thomas Lecomte
th.lecomte@gmail.com
2. Kesako
➔ Le principe du cache avec HTTP
➔ La philosophie de Varnish
➔ Un peu de conf de base
➔ Les contraintes
➔ Configuration avancée
➔ Hiérarchie de cache
➔ Bans / PURGE
➔ Questions
3. Le cache avec HTTP
➔ Le protocole HTTP/1.1 intègre
nativement la notion de gateway et de
cache [RFC2068]
➔ Headers Expires et Cache-Control pour
contrôler le TTL et la visibilité
➔ Header Vary pour indiquer au cache que
le contenu varie en fonction d'un
header
➔ Bénéfices ?
4. La philosophie de Varnish
➔ Rapidité et performances
– 200k req/s
➔ Peu d'objets / beaucoup d'accès
– Cache non persistant
– Cache en RAM ou sur disque
➔ Configuration écrite en pseudo-C
– Grande liberté & flexibilité
– Possibilité de faire du C inline
– Vmods
5. Le langage VCL
➔ Une forme de C simplifié
➔ Fonctions, tests, strings
➔ Pas de boucles itératives
➔ Traduit en C et compilé avec GCC au
démarrage
➔ Rechargeable à chaud
➔ Much more ...
7. Démo #1
➔ VCL par défaut
➔ Serveur web simulé par un script
– Latence de 3 secondes avant chaque réponse
➔ Analyse du comportement de Varnish
avec la commande varnishlog
8. Les contraintes
➔ Les cookies sont nos amis, ou pas ...
– Espace client et contenu personnalisé
– Géolocalisation
➔ Le hash et la notion de clé de cache
➔ HTTP c'est pas saykure, je veux du
SSL !
➔ J'ai mis à jour un objet, mais son TTL
n'a pas expiré dans mes caches, mes
clients hurlent !
9. Configuration avancée
➔ Grace mode
➔ TTL différents de ce que l'origin
renvoie
➔ Pages d'erreur personnalisées
➔ Ajout de valeur de cookie dans la clé de
cache d'un objet
➔ Ajout de clés de flush dans les objets
stockés
➔ Query strings
10. Hierarchie de cache
➔ Il est possible de chaîner les caches
➔ Warm-up des edges moins douloureux
pour l'origin
➔ Trafic à l'origin
Clients Varnish L1 Varnish L2 Origin
11. Bans / PURGE
➔ Il est possible d'implémenter la méthode
HTTP PURGE
PURGE /content/foo.png HTTP/1.1
Host: cdn.foo.net
➔ Bans via varnishadm
– Sur req
● Évalué à chaque requête reçue
– Sur obj (smartbans)
● Évalué pour chaque objet servi plus
vieux que le ban
● Ban lurker
12. Bans : exemples
➔ Forcera un MISS si l'objet matché en
cache est plus vieux que le ban
req.http.Host == "cdn.foo.net" &&
req.url == /content/foo.png
obj.http.X-Host == "cdn.foo.net" &&
obj.http.X-Url == /content/foo.png
➔ Attention à l'empilement des bans :
impact sur les perfs !
➔ Bans supprimés automatiquement
➔ Ban lurker