SlideShare une entreprise Scribd logo
Digital performance.
VARNISH
MEET-UP
Cédric Bezaud - 22/09/2015
+Présentation
+Concrètement … Ca donne quoi ?
+Concrètement … Comment ca marche ?
+Concrètement … Ca ressemble a quoi ?
+Les Plus / Les Moins
+Conclusion / Questions
VARNISH
SOMMAIRE
© SQLI Enterprise – SQLI GROUP | 2015 2
PRÉSENTATION
+Varnish est un serveur de cache HTTP en ReverseProxy
+Il est apparut en 2006.
+Il est distribué sous licence BSD
+Il est utilisé par de très grands sites comme Facebook, Pinterest,
LeMonde, linternaute, JournalDuNet...
+La version actuelle est la version 4 (Avril 2014)
+Il est écrit en Language C
VARNISH
PRÉSENTATION
© SQLI Enterprise – SQLI GROUP | 2015 4
+Il se configure via le language VCL (Varnish Configuration Language)
+Il est extensible via des VMODs (Varnish Modules) (ex : Variable
Support, JSON, Rewrite, Redirect…)
+Il fonctionne sur un environnement Linux
(Red Hat, Debian, Ubuntu, FreeBSD …)
+Il peux également fonctionner sous Mac OS et Windows (via Cygwin)
VARNISH
PRÉSENTATION
© SQLI Enterprise – SQLI GROUP | 2015 5
VARNISH
OU LE MET ON ?
© SQLI Enterprise – SQLI GROUP | 2015 6
NavigateurUtilisateurs Serveur applicatifServeur de cache
en ReverseProxy
EN CHIFFRE CA DONNE QUOI ?
+Test N°1 : Site sur un site Drupal 7
› Apache 2
› PHP 5.5
› MySQL 5.5
› 110 000 requêtes…
+Test N°2 : Site du même site Drupal 7
› Varnish 3
› Apache 2
› PHP 5.5
› MySQL 5.5
› Les mêmes 110 000 requêtes…
EN CHIFFRE CA FAIT QUOI ?
© SQLI Enterprise – SQLI GROUP | 2015 8
PETIT TEST VIA JMETER
COMMENT CA MARCHE ?
+ Cache « MISS »
VARNISH
COMMENT CA MARCHE ( EN SIMPLE )
© SQLI Enterprise – SQLI GROUP | 2015 14
Recv Hash Miss Deliver
Recv Hash Hit
+ Cache « HIT »
Deliver
Fetch BackEnd
+ vcl_recv
› Normalise les requêtes en entrée
› Premiers filtres
› Sécurise
› Correction d’erreurs …
+ vcl_pipe
› Liaison non http (pipe)
+ vcl_hash
› Définition de la clé du cache (clé unique)
+ vcl_hit
› Cache « Hit »
VARNISH 3
COMMENT CA MARCHE
© SQLI Enterprise – SQLI GROUP | 2015 15
+ vcl_miss
› Cache « Miss »
+ vcl_pass
› ByPass : On force a aller chercher la
réponse depuis le backend
+ vcl_fetch
› Règle de cache de l’objet backend
+ vcl_deliver
› Restitution de la réponse
+ vcl_error
› Affichage d’une page d’erreur
VARNISH 3
COMMENT CA MARCHE
© SQLI Enterprise – SQLI GROUP | 2015 16
+ vcl_recv
+ vcl_pipe
+ vcl_hash
+waiting
› Gestion d’une file d’attente
+ vcl_hit
+ vcl_miss
+ vcl_purge
› Sub routine dédié à l’invalidation de cache
VARNISH 4
COMMENT CA MARCHE
© SQLI Enterprise – SQLI GROUP | 2015 17
+ vcl_fetch découpé par
› vcl_backend_fetch
› vcl_backend_response
› vcl_backend_error
+ vcl_deliver
+ vcl_error remplacé par vcl_synth
VARNISH 4
COMMENT CA MARCHE
© SQLI Enterprise – SQLI GROUP | 2015 18
AUTRE FONCTIONNALITÉS
+ReverseProxy
› Plusieurs backend derrière (homogène ou hétérogène)
+LoadBalancing (via les directors)
› RoundRobin (pondéré)
› Client (permet de faire du sticky session sur n’importe quel élément du header)
› Random
› Hash mode (Version 4)
+Compression HTTP (depuis Varnish 3)
› Économiser de la bande passante entre Varnish et le Client (navigateurs, applications, etc …).
› Économiser de la place dans le cache de Varnish (et donc de la mémoire RAM).
› Économiser de la bande passante entre le backend et Varnish (peu pertinent, souvent le même VLAN).
› Économiser le CPU du backend lors de la compression
+ESI (Egde Side Includes) (req.esi en détection, beresp.do_esi = true pour relayer au backend )
› Cache partiel …
+Réécriture d’URL (réécriture simple, pour des réécriture plus complexe, il faut passer par un VMOD)
+ACL (Access Control List)
VARNISH
AUTRES FONCTIONNALITÉS
© SQLI Enterprise – SQLI GROUP | 2015 20
CA RESSEMBLE A QUOI ?
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 22
# Définition du subnet Internal et purge, pour la gestion des ACLs (abordé plus bas)
acl internal {
"localhost"
"192.10.0.0"/24;
}
acl purge {
"localhost"
}
#
# Default backend definition.
# Création du backend « default » répondant à l’adresse 127.0.0.1 port 8080
#
backend default {
.host = "127.0.0.1";
.port = "8080";
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 23
# Répond au requête entrante
sub vcl_recv {
if (req.request == "GET" && req.url ~ "^/varnishcheck$" && client.ip ~ internal) {
error 200 "Varnish is Ready";
}
# Si le backend ne réponds plus, suppression de tous les cookies (=> connexion anonyme).
if (!req.backend.healthy) {
unset req.http.Cookie;
if (req.http.X-Forwarded-Proto == "https") {
set req.http.X-Forwarded-Proto = "http";
}
set req.grace = 30m;
}
else {
set req.grace = 15s;
}
# C’est du streaming => au pipe
if ( res.url ~ "^admin/content/backup_migrate/export" ) {
return (pipe);
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 24
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
}
else {
set req.http.X-Forwarded-For = client.ip;
}
}
# Pas de cache pour les urls ci-dessous (Regex)
if (req.url ~ "^/status.php$" ||
req.url ~ "^/update.php$" ||
req.url ~ "^/admin$" ||
req.url ~ "^/admin/.*$" ||
req.url ~ "^/flag/.*$" ||
req.url ~ "^.*/ajax/.*$" ||
req.url ~ "^.*/ahah/.*$") {
return (pass);
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 25
# Autorisation d’accès à cron.php ou install.php.
if (req.url ~ "^/(cron|install|update).php$" && !client.ip ~ internal) {
# Utilisation de la gestion d’erreur Varnish.
error 403 "Forbiden."; # remplacer par synth(403, "Forbiden.")
# Utilisation d’une page d’erreur définie dans le Backend ("/404" ).
# set req.url = "/404";
}
# Normalisation du header Accept-Encoding (http://varnish-cache.org/wiki/FAQ/Compression)
if (req.http.Accept-Encoding) {
if (req.url ~ ".(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {
# Suppression de l’entête Accept-Encoding
remove req.http.Accept-Encoding;
}
elsif (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
}
else {
# Encodage inconnu suppression de l’entête Accept-Encoding
remove req.http.Accept-Encoding;
}
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 26
# Toujours cacher les extensions ci-dessous (voir ci-dessous)
if (req.url ~ "(?i).(pdf|asc|dat|txt|…|gif|jpeg|jpg|ico|swf|css|js)(?.*)?$") {
unset req.http.Cookie;
}
# Exemple de netoyage de cookies.
if (req.http.Cookie) {
# 1. Ajoute un « ; » devant la chaine de cookie.
set req.http.Cookie = ";" + req.http.Cookie;
# 2. Supprime les espaces juste après les « ; ».
set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
# 3. Match des cookies que l’on veux garder, ajout d’un espace devant…
set req.http.Cookie = regsuball(req.http.Cookie, ";(SESS[a-z0-9]+|NO_CACHE)=", "; 1="
# 4. Suppression des autres cookies (ils n’ont pas d’espace après le « ; »).
set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
# 5. Suppression des « ; » et des espaces non significatifs.
set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");
if (req.http.Cookie == "") { # Si le cookie est vide, on supprime l’entête
unset req.http.Cookie;
}
else { # Si il reste des cookies, on demande au backend
return (pass);
}
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 27
# Non conforme à la RFC-2616 – le verbe CONNECT, on autorise également le verbe PURGE
if (req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "PURGE" &&
req.request != "DELETE") {
return (pipe);
}
# Si le verbe est différant de GET, HEAD, PURGE
if (req.request != "GET" && req.request != "HEAD" && req.request != "PURGE" ) {
return (pass); # PAS DE CACHE
}
# Si on nous demande une authentification HTTP ou qu’il reste un cookie (session ouverte
if (req.http.Authorization || req.http.Cookie) {
return (pass); # PAS DE CACHE
}
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 28
# Détermination de la clé unique de stockage du cache
sub vcl_hash {
if (req.http.X-Forwarded-Proto == "https") {
hash_data(req.http.X-Forwarded-Proto);
}
}
# Cache Hit
sub vcl_hit {
if (req.request == "PURGE" && client.ip ~ purge) {
purge; # Le mot clé n’existe plus en VCL4
error 200 "Purged.";
}
}
# Cache Miss
sub vcl_miss {
if (req.request == "PURGE" && client.ip ~ purge) {
purge; # Le mot clé n’existe plus en VCL4
error 200 "Purged.";
}
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 29
# Traitement du retour du backend (backendresponse)
# N’existe plus en VCL4
# Remplacé par vcl_backend_fetch, vcl_backend_response et vcl_bacckend_error
sub vcl_fetch {
# On cache les réponse 404, 301 et 500 pendant 10 minutes.
if (beresp.status == 404 || beresp.status == 301 || beresp.status == 500) {
set beresp.ttl = 10m;
}
# Suppression des cookies dans la réponse du backend pour les extensions …
if (req.url ~ "(?i).(pdf|asc|dat|txt|…|gif|jpeg|jpg|ico|swf|css|js)(?.*)?$") {
unset beresp.http.set-cookie;
}
# GraceMode, délivre un extension de la TTL dans le cas ou le backend ne réponds plus…
set beresp.grace = 6h;
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 30
# On ajoute une entête à la réponse
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Varnish-Cache = "HIT";
}
else {
set resp.http.X-Varnish-Cache = "MISS";
}
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 31
# Dans le cas d’une erreur, l’on peux afficher un message « User Fiendly »
# (sans solliciter le backend)
# N’existe plus en VCL4, remplacé par vcl_synth
sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8";
synthetic {"
<html>
<head>
<title>Page Unavailable</title><style>…</style>
</head>
<body onload="setTimeout(function() { window.location = '/' }, 5000)">
<div id="page">
<h1 class="title">Page Unavailable</h1>
<p>The page you requested is temporarily unavailable.</p>
<p>We're redirecting you to the <a href="/">homepage</a> in 5 seconds.</p>
<div class="error">(Error "} + obj.status + " " + obj.response + {")</div>
</div>
</body>
</html>
"};
return (deliver);
}
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 32
Instruction Varnish 3 Instruction Varnish 4
error return( synth(error_code,message))
remove unset
vcl_fetch vcl_backend_response
req.backend.healthy std.healthy(resp.backend_hint) *
req.request req.method
session_linger timeout_linger
client.port std.port(client.ip) *
server.port std.port(server.ip) *
* Nécessite le VMOD Standard (import std;)
LES PLUS / LES MOINS
+ Les plus
+Support du Streaming
+Support des ESI
+ Bien intégré au monde PHP
(Symfony2, Drupal, eZPublish)
- Les moins
- Pas de support HTTPS
- Outillage payant ( VAC, … )
VARNISH
© SQLI Enterprise – SQLI GROUP | 2015 34
LES PLUS, LES MOINS
CONCLUSION / QUESTIONS
+ C’est à vous !
CONCLUSION / QUESTIONS
© SQLI Enterprise – SQLI GROUP | 2015 36
LIKEZ & SUIVEZ-NOUS !
Digital that works.
WWW.SQLI-ENTERPRISE.COM

Contenu connexe

Tendances

DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
Aurelien Navarre
 
[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrême[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrême
OVHcloud
 
201211 drupagora hostingdrupal
201211 drupagora hostingdrupal201211 drupagora hostingdrupal
201211 drupagora hostingdrupal
Oxalide
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
Bassem ABCHA
 
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Aurelien Navarre
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
PrestaShop
 
Moussasambe projet de securite zabbix
Moussasambe projet de securite zabbixMoussasambe projet de securite zabbix
Moussasambe projet de securite zabbix
moussa sambe
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
Yves Van Goethem
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
Khalid ALLILI
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Aurelien Navarre
 
Wds procedure
Wds procedureWds procedure
Wds procedure
Laetitia HOREL
 
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
Aurelien Navarre
 
Mise en place d'un système de messagerie roundcube sous cent os 7
Mise en place d'un système de messagerie roundcube sous cent os 7Mise en place d'un système de messagerie roundcube sous cent os 7
Mise en place d'un système de messagerie roundcube sous cent os 7
Ousmane BADJI
 
Procédure ocs glpi_jeremy_chatel_2012_final
Procédure ocs glpi_jeremy_chatel_2012_finalProcédure ocs glpi_jeremy_chatel_2012_final
Procédure ocs glpi_jeremy_chatel_2012_final
cisco7878
 
Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013
Alain Ganuchaud
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
julien pauli
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
Christophe Villeneuve
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Fabien Arcellier
 

Tendances (20)

DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
 
[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrême[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrême
 
201211 drupagora hostingdrupal
201211 drupagora hostingdrupal201211 drupagora hostingdrupal
201211 drupagora hostingdrupal
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Moussasambe projet de securite zabbix
Moussasambe projet de securite zabbixMoussasambe projet de securite zabbix
Moussasambe projet de securite zabbix
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
 
Wds procedure
Wds procedureWds procedure
Wds procedure
 
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
 
Squid squid guard
Squid squid guardSquid squid guard
Squid squid guard
 
Mise en place d'un système de messagerie roundcube sous cent os 7
Mise en place d'un système de messagerie roundcube sous cent os 7Mise en place d'un système de messagerie roundcube sous cent os 7
Mise en place d'un système de messagerie roundcube sous cent os 7
 
Procédure ocs glpi_jeremy_chatel_2012_final
Procédure ocs glpi_jeremy_chatel_2012_finalProcédure ocs glpi_jeremy_chatel_2012_final
Procédure ocs glpi_jeremy_chatel_2012_final
 
Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
Zabbix
ZabbixZabbix
Zabbix
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
 

En vedette

LinkedIn / Viadeo : éléments de comparaison
LinkedIn / Viadeo : éléments de comparaisonLinkedIn / Viadeo : éléments de comparaison
LinkedIn / Viadeo : éléments de comparaison
Fabienne Combier
 
Histoire de Linkedin
Histoire de LinkedinHistoire de Linkedin
Histoire de Linkedin
Tunisie-SIC
 
Livre blanc 612 rencontres sur les reseaux sociaux - extraits en avant prem...
Livre blanc   612 rencontres sur les reseaux sociaux - extraits en avant prem...Livre blanc   612 rencontres sur les reseaux sociaux - extraits en avant prem...
Livre blanc 612 rencontres sur les reseaux sociaux - extraits en avant prem...
Alban Jarry
 
A Brief History of LinkedIn
A Brief History of LinkedInA Brief History of LinkedIn
A Brief History of LinkedIn
LinkedIn
 
Livre blanc 612 rencontres sur les reseaux sociaux - partie 1 - 74 rencontres
Livre blanc   612 rencontres sur les reseaux sociaux - partie 1 - 74 rencontresLivre blanc   612 rencontres sur les reseaux sociaux - partie 1 - 74 rencontres
Livre blanc 612 rencontres sur les reseaux sociaux - partie 1 - 74 rencontres
Alban Jarry
 
Livre blanc 612 rencontres sur les reseaux sociaux - partie 2 - etude
Livre blanc   612 rencontres sur les reseaux sociaux - partie 2 - etudeLivre blanc   612 rencontres sur les reseaux sociaux - partie 2 - etude
Livre blanc 612 rencontres sur les reseaux sociaux - partie 2 - etude
Alban Jarry
 
Viadeo Student Challenge - Le petit ballon - Stratégie marketing 360°
Viadeo Student Challenge - Le petit ballon - Stratégie marketing 360°Viadeo Student Challenge - Le petit ballon - Stratégie marketing 360°
Viadeo Student Challenge - Le petit ballon - Stratégie marketing 360°
Christophe De Almeida
 
Intégrer les réseaux sociaux dans sa stratégie de communication
Intégrer les réseaux sociaux dans sa stratégie de communicationIntégrer les réseaux sociaux dans sa stratégie de communication
Intégrer les réseaux sociaux dans sa stratégie de communication
Comunited
 
Viadéo et linkedin juillet 2014
Viadéo et linkedin  juillet 2014Viadéo et linkedin  juillet 2014
Viadéo et linkedin juillet 2014
Jose Louis Quiros
 
LinkedIn & Viadeo de nouvelles opportunités commerciales
LinkedIn & Viadeo de nouvelles opportunités commercialesLinkedIn & Viadeo de nouvelles opportunités commerciales
LinkedIn & Viadeo de nouvelles opportunités commerciales
WSI France
 
The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017
LinkedIn
 

En vedette (12)

LinkedIn / Viadeo : éléments de comparaison
LinkedIn / Viadeo : éléments de comparaisonLinkedIn / Viadeo : éléments de comparaison
LinkedIn / Viadeo : éléments de comparaison
 
Histoire de Linkedin
Histoire de LinkedinHistoire de Linkedin
Histoire de Linkedin
 
Livre blanc 612 rencontres sur les reseaux sociaux - extraits en avant prem...
Livre blanc   612 rencontres sur les reseaux sociaux - extraits en avant prem...Livre blanc   612 rencontres sur les reseaux sociaux - extraits en avant prem...
Livre blanc 612 rencontres sur les reseaux sociaux - extraits en avant prem...
 
A Brief History of LinkedIn
A Brief History of LinkedInA Brief History of LinkedIn
A Brief History of LinkedIn
 
Livre blanc 612 rencontres sur les reseaux sociaux - partie 1 - 74 rencontres
Livre blanc   612 rencontres sur les reseaux sociaux - partie 1 - 74 rencontresLivre blanc   612 rencontres sur les reseaux sociaux - partie 1 - 74 rencontres
Livre blanc 612 rencontres sur les reseaux sociaux - partie 1 - 74 rencontres
 
Livre blanc 612 rencontres sur les reseaux sociaux - partie 2 - etude
Livre blanc   612 rencontres sur les reseaux sociaux - partie 2 - etudeLivre blanc   612 rencontres sur les reseaux sociaux - partie 2 - etude
Livre blanc 612 rencontres sur les reseaux sociaux - partie 2 - etude
 
Etude Viadéo
Etude ViadéoEtude Viadéo
Etude Viadéo
 
Viadeo Student Challenge - Le petit ballon - Stratégie marketing 360°
Viadeo Student Challenge - Le petit ballon - Stratégie marketing 360°Viadeo Student Challenge - Le petit ballon - Stratégie marketing 360°
Viadeo Student Challenge - Le petit ballon - Stratégie marketing 360°
 
Intégrer les réseaux sociaux dans sa stratégie de communication
Intégrer les réseaux sociaux dans sa stratégie de communicationIntégrer les réseaux sociaux dans sa stratégie de communication
Intégrer les réseaux sociaux dans sa stratégie de communication
 
Viadéo et linkedin juillet 2014
Viadéo et linkedin  juillet 2014Viadéo et linkedin  juillet 2014
Viadéo et linkedin juillet 2014
 
LinkedIn & Viadeo de nouvelles opportunités commerciales
LinkedIn & Viadeo de nouvelles opportunités commercialesLinkedIn & Viadeo de nouvelles opportunités commerciales
LinkedIn & Viadeo de nouvelles opportunités commerciales
 
The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017
 

Similaire à Meet-Up SQLI Lyon 09-2015 - Varnish

Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur webConférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Normandie Web Xperts
 
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Jean-Laurent de Morlhon
 
Machines Virtuelles dans Azure quoi de neuf ?
Machines Virtuelles dans Azure quoi de neuf ?Machines Virtuelles dans Azure quoi de neuf ?
Machines Virtuelles dans Azure quoi de neuf ?
Microsoft Technet France
 
Machines Virtuelles dans Azure quoi de neuf ?
Machines Virtuelles dans Azure quoi de neuf ?Machines Virtuelles dans Azure quoi de neuf ?
Machines Virtuelles dans Azure quoi de neuf ?
Microsoft Décideurs IT
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
Xavier MARIN
 
Déploiement automatisé d'un environnement dans Azure
Déploiement automatisé d'un environnement  dans AzureDéploiement automatisé d'un environnement  dans Azure
Déploiement automatisé d'un environnement dans Azure
Manon PERNIN
 
Manon Pernin - Déploiement automatisé d’un environnement dans Azure - Global ...
Manon Pernin - Déploiement automatisé d’un environnement dans Azure - Global ...Manon Pernin - Déploiement automatisé d’un environnement dans Azure - Global ...
Manon Pernin - Déploiement automatisé d’un environnement dans Azure - Global ...
AZUG FR
 
[Gab2016] Déploiement automatisé d'un environnement dans Azure - Manon Pernin
[Gab2016] Déploiement automatisé d'un environnement dans Azure - Manon Pernin[Gab2016] Déploiement automatisé d'un environnement dans Azure - Manon Pernin
[Gab2016] Déploiement automatisé d'un environnement dans Azure - Manon Pernin
Cellenza
 
Share point 2013 distributed cache
Share point 2013 distributed cacheShare point 2013 distributed cache
Share point 2013 distributed cache
Michael Nokhamzon
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFC
Damien Seguy
 
De legacy à symfony
De legacy à symfonyDe legacy à symfony
De legacy à symfony
Etienne Lachance
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
Jérôme Petazzoni
 
WP CLI : le couteau suisse du développeur
WP CLI : le couteau suisse du développeurWP CLI : le couteau suisse du développeur
WP CLI : le couteau suisse du développeur
benjamingossetpro
 
Haute Disponibilité et Disaster Recovery
Haute Disponibilité et Disaster RecoveryHaute Disponibilité et Disaster Recovery
Haute Disponibilité et Disaster Recovery
Microsoft Technet France
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
Adyax
 
SQLSaturday Paris 2014 - Et hop, ma base migre dans Azure
SQLSaturday Paris 2014 - Et hop, ma base migre dans AzureSQLSaturday Paris 2014 - Et hop, ma base migre dans Azure
SQLSaturday Paris 2014 - Et hop, ma base migre dans Azure
GUSS
 
Sql saturday 323 paris 2014 azure migration iaas et paas
Sql saturday 323 paris 2014   azure migration iaas et paasSql saturday 323 paris 2014   azure migration iaas et paas
Sql saturday 323 paris 2014 azure migration iaas et paas
Christophe Laporte
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
kadzaki
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
Normandy JUG
 
Retour d'expérience sur PowerShell
Retour d'expérience sur PowerShellRetour d'expérience sur PowerShell
Retour d'expérience sur PowerShell
Microsoft Technet France
 

Similaire à Meet-Up SQLI Lyon 09-2015 - Varnish (20)

Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur webConférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
 
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
 
Machines Virtuelles dans Azure quoi de neuf ?
Machines Virtuelles dans Azure quoi de neuf ?Machines Virtuelles dans Azure quoi de neuf ?
Machines Virtuelles dans Azure quoi de neuf ?
 
Machines Virtuelles dans Azure quoi de neuf ?
Machines Virtuelles dans Azure quoi de neuf ?Machines Virtuelles dans Azure quoi de neuf ?
Machines Virtuelles dans Azure quoi de neuf ?
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Déploiement automatisé d'un environnement dans Azure
Déploiement automatisé d'un environnement  dans AzureDéploiement automatisé d'un environnement  dans Azure
Déploiement automatisé d'un environnement dans Azure
 
Manon Pernin - Déploiement automatisé d’un environnement dans Azure - Global ...
Manon Pernin - Déploiement automatisé d’un environnement dans Azure - Global ...Manon Pernin - Déploiement automatisé d’un environnement dans Azure - Global ...
Manon Pernin - Déploiement automatisé d’un environnement dans Azure - Global ...
 
[Gab2016] Déploiement automatisé d'un environnement dans Azure - Manon Pernin
[Gab2016] Déploiement automatisé d'un environnement dans Azure - Manon Pernin[Gab2016] Déploiement automatisé d'un environnement dans Azure - Manon Pernin
[Gab2016] Déploiement automatisé d'un environnement dans Azure - Manon Pernin
 
Share point 2013 distributed cache
Share point 2013 distributed cacheShare point 2013 distributed cache
Share point 2013 distributed cache
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFC
 
De legacy à symfony
De legacy à symfonyDe legacy à symfony
De legacy à symfony
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
WP CLI : le couteau suisse du développeur
WP CLI : le couteau suisse du développeurWP CLI : le couteau suisse du développeur
WP CLI : le couteau suisse du développeur
 
Haute Disponibilité et Disaster Recovery
Haute Disponibilité et Disaster RecoveryHaute Disponibilité et Disaster Recovery
Haute Disponibilité et Disaster Recovery
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
SQLSaturday Paris 2014 - Et hop, ma base migre dans Azure
SQLSaturday Paris 2014 - Et hop, ma base migre dans AzureSQLSaturday Paris 2014 - Et hop, ma base migre dans Azure
SQLSaturday Paris 2014 - Et hop, ma base migre dans Azure
 
Sql saturday 323 paris 2014 azure migration iaas et paas
Sql saturday 323 paris 2014   azure migration iaas et paasSql saturday 323 paris 2014   azure migration iaas et paas
Sql saturday 323 paris 2014 azure migration iaas et paas
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
Retour d'expérience sur PowerShell
Retour d'expérience sur PowerShellRetour d'expérience sur PowerShell
Retour d'expérience sur PowerShell
 

Plus de SQLI DIGITAL EXPERIENCE

IMPLEMENTATION OF SCALED AGILE AND DEVOPS
IMPLEMENTATION OF SCALED AGILE AND DEVOPSIMPLEMENTATION OF SCALED AGILE AND DEVOPS
IMPLEMENTATION OF SCALED AGILE AND DEVOPS
SQLI DIGITAL EXPERIENCE
 
Comment construire un chatbot interne ?
Comment construire un chatbot interne ?Comment construire un chatbot interne ?
Comment construire un chatbot interne ?
SQLI DIGITAL EXPERIENCE
 
Blockchain to Employee : la confiance numérique au service des usages d'entre...
Blockchain to Employee : la confiance numérique au service des usages d'entre...Blockchain to Employee : la confiance numérique au service des usages d'entre...
Blockchain to Employee : la confiance numérique au service des usages d'entre...
SQLI DIGITAL EXPERIENCE
 
E-Commerce - Fluidifiez et sécurisez votre parcours client
E-Commerce - Fluidifiez et sécurisez votre parcours clientE-Commerce - Fluidifiez et sécurisez votre parcours client
E-Commerce - Fluidifiez et sécurisez votre parcours client
SQLI DIGITAL EXPERIENCE
 
Ubérisez-vous ! SQLI Consulting
Ubérisez-vous ! SQLI ConsultingUbérisez-vous ! SQLI Consulting
Ubérisez-vous ! SQLI Consulting
SQLI DIGITAL EXPERIENCE
 
SQLI GROUP - presentation
SQLI GROUP - presentationSQLI GROUP - presentation
SQLI GROUP - presentation
SQLI DIGITAL EXPERIENCE
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
SQLI DIGITAL EXPERIENCE
 
Meet up sqli lyon 09-2015 - Angular
Meet up sqli lyon 09-2015 - AngularMeet up sqli lyon 09-2015 - Angular
Meet up sqli lyon 09-2015 - Angular
SQLI DIGITAL EXPERIENCE
 
Meet up sqli lyon 09-2015 - Gradle
Meet up sqli lyon 09-2015 - GradleMeet up sqli lyon 09-2015 - Gradle
Meet up sqli lyon 09-2015 - Gradle
SQLI DIGITAL EXPERIENCE
 
Meet up sqli lyon 09-2015 - J Hipster
Meet up sqli lyon 09-2015 - J HipsterMeet up sqli lyon 09-2015 - J Hipster
Meet up sqli lyon 09-2015 - J Hipster
SQLI DIGITAL EXPERIENCE
 
SQLI - Club des DSI - Mobilité
SQLI - Club des DSI - MobilitéSQLI - Club des DSI - Mobilité
SQLI - Club des DSI - Mobilité
SQLI DIGITAL EXPERIENCE
 
Chef de Projet Java
Chef de Projet JavaChef de Projet Java
Chef de Projet Java
SQLI DIGITAL EXPERIENCE
 
Brechtniversary infography
Brechtniversary infographyBrechtniversary infography
Brechtniversary infography
SQLI DIGITAL EXPERIENCE
 
#CREATIVESTUDIO, Gamestorm your workshop!
#CREATIVESTUDIO, Gamestorm your workshop!#CREATIVESTUDIO, Gamestorm your workshop!
#CREATIVESTUDIO, Gamestorm your workshop!
SQLI DIGITAL EXPERIENCE
 
AIRBUS DOTE SES EQUIPES COMMERCIALES D’UNE SOLUTION BIG DATA
AIRBUS DOTE SES EQUIPES COMMERCIALES D’UNE SOLUTION BIG DATAAIRBUS DOTE SES EQUIPES COMMERCIALES D’UNE SOLUTION BIG DATA
AIRBUS DOTE SES EQUIPES COMMERCIALES D’UNE SOLUTION BIG DATA
SQLI DIGITAL EXPERIENCE
 
SUCCESS STORY CHARENTES ALLIANCE : UN DEVELOPPEMENT DURABLE AVEC AGRIONE
SUCCESS STORY CHARENTES ALLIANCE : UN DEVELOPPEMENT DURABLE AVEC AGRIONESUCCESS STORY CHARENTES ALLIANCE : UN DEVELOPPEMENT DURABLE AVEC AGRIONE
SUCCESS STORY CHARENTES ALLIANCE : UN DEVELOPPEMENT DURABLE AVEC AGRIONE
SQLI DIGITAL EXPERIENCE
 
Choisir sa plateforme de développement mobile
Choisir sa plateforme de développement mobileChoisir sa plateforme de développement mobile
Choisir sa plateforme de développement mobile
SQLI DIGITAL EXPERIENCE
 
SQLI //MOBILITY SPECIAL EDITION
SQLI //MOBILITY SPECIAL EDITIONSQLI //MOBILITY SPECIAL EDITION
SQLI //MOBILITY SPECIAL EDITION
SQLI DIGITAL EXPERIENCE
 
SharePoint 2013 - Le point sur les nouveautés
SharePoint 2013 - Le point sur les nouveautésSharePoint 2013 - Le point sur les nouveautés
SharePoint 2013 - Le point sur les nouveautésSQLI DIGITAL EXPERIENCE
 

Plus de SQLI DIGITAL EXPERIENCE (20)

IMPLEMENTATION OF SCALED AGILE AND DEVOPS
IMPLEMENTATION OF SCALED AGILE AND DEVOPSIMPLEMENTATION OF SCALED AGILE AND DEVOPS
IMPLEMENTATION OF SCALED AGILE AND DEVOPS
 
Comment construire un chatbot interne ?
Comment construire un chatbot interne ?Comment construire un chatbot interne ?
Comment construire un chatbot interne ?
 
Blockchain to Employee : la confiance numérique au service des usages d'entre...
Blockchain to Employee : la confiance numérique au service des usages d'entre...Blockchain to Employee : la confiance numérique au service des usages d'entre...
Blockchain to Employee : la confiance numérique au service des usages d'entre...
 
E-Commerce - Fluidifiez et sécurisez votre parcours client
E-Commerce - Fluidifiez et sécurisez votre parcours clientE-Commerce - Fluidifiez et sécurisez votre parcours client
E-Commerce - Fluidifiez et sécurisez votre parcours client
 
Ubérisez-vous ! SQLI Consulting
Ubérisez-vous ! SQLI ConsultingUbérisez-vous ! SQLI Consulting
Ubérisez-vous ! SQLI Consulting
 
SQLI GROUP - presentation
SQLI GROUP - presentationSQLI GROUP - presentation
SQLI GROUP - presentation
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
Meet up sqli lyon 09-2015 - Angular
Meet up sqli lyon 09-2015 - AngularMeet up sqli lyon 09-2015 - Angular
Meet up sqli lyon 09-2015 - Angular
 
Meet up sqli lyon 09-2015 - Gradle
Meet up sqli lyon 09-2015 - GradleMeet up sqli lyon 09-2015 - Gradle
Meet up sqli lyon 09-2015 - Gradle
 
Meet up sqli lyon 09-2015 - J Hipster
Meet up sqli lyon 09-2015 - J HipsterMeet up sqli lyon 09-2015 - J Hipster
Meet up sqli lyon 09-2015 - J Hipster
 
SQLI - Club des DSI - Mobilité
SQLI - Club des DSI - MobilitéSQLI - Club des DSI - Mobilité
SQLI - Club des DSI - Mobilité
 
Chef de Projet Java
Chef de Projet JavaChef de Projet Java
Chef de Projet Java
 
Brechtniversary infography
Brechtniversary infographyBrechtniversary infography
Brechtniversary infography
 
#CREATIVESTUDIO, Gamestorm your workshop!
#CREATIVESTUDIO, Gamestorm your workshop!#CREATIVESTUDIO, Gamestorm your workshop!
#CREATIVESTUDIO, Gamestorm your workshop!
 
AIRBUS DOTE SES EQUIPES COMMERCIALES D’UNE SOLUTION BIG DATA
AIRBUS DOTE SES EQUIPES COMMERCIALES D’UNE SOLUTION BIG DATAAIRBUS DOTE SES EQUIPES COMMERCIALES D’UNE SOLUTION BIG DATA
AIRBUS DOTE SES EQUIPES COMMERCIALES D’UNE SOLUTION BIG DATA
 
SUCCESS STORY CHARENTES ALLIANCE : UN DEVELOPPEMENT DURABLE AVEC AGRIONE
SUCCESS STORY CHARENTES ALLIANCE : UN DEVELOPPEMENT DURABLE AVEC AGRIONESUCCESS STORY CHARENTES ALLIANCE : UN DEVELOPPEMENT DURABLE AVEC AGRIONE
SUCCESS STORY CHARENTES ALLIANCE : UN DEVELOPPEMENT DURABLE AVEC AGRIONE
 
Choisir sa plateforme de développement mobile
Choisir sa plateforme de développement mobileChoisir sa plateforme de développement mobile
Choisir sa plateforme de développement mobile
 
Isefac sqli e-merchandising_2013
Isefac sqli e-merchandising_2013Isefac sqli e-merchandising_2013
Isefac sqli e-merchandising_2013
 
SQLI //MOBILITY SPECIAL EDITION
SQLI //MOBILITY SPECIAL EDITIONSQLI //MOBILITY SPECIAL EDITION
SQLI //MOBILITY SPECIAL EDITION
 
SharePoint 2013 - Le point sur les nouveautés
SharePoint 2013 - Le point sur les nouveautésSharePoint 2013 - Le point sur les nouveautés
SharePoint 2013 - Le point sur les nouveautés
 

Meet-Up SQLI Lyon 09-2015 - Varnish

  • 2. +Présentation +Concrètement … Ca donne quoi ? +Concrètement … Comment ca marche ? +Concrètement … Ca ressemble a quoi ? +Les Plus / Les Moins +Conclusion / Questions VARNISH SOMMAIRE © SQLI Enterprise – SQLI GROUP | 2015 2
  • 4. +Varnish est un serveur de cache HTTP en ReverseProxy +Il est apparut en 2006. +Il est distribué sous licence BSD +Il est utilisé par de très grands sites comme Facebook, Pinterest, LeMonde, linternaute, JournalDuNet... +La version actuelle est la version 4 (Avril 2014) +Il est écrit en Language C VARNISH PRÉSENTATION © SQLI Enterprise – SQLI GROUP | 2015 4
  • 5. +Il se configure via le language VCL (Varnish Configuration Language) +Il est extensible via des VMODs (Varnish Modules) (ex : Variable Support, JSON, Rewrite, Redirect…) +Il fonctionne sur un environnement Linux (Red Hat, Debian, Ubuntu, FreeBSD …) +Il peux également fonctionner sous Mac OS et Windows (via Cygwin) VARNISH PRÉSENTATION © SQLI Enterprise – SQLI GROUP | 2015 5
  • 6. VARNISH OU LE MET ON ? © SQLI Enterprise – SQLI GROUP | 2015 6 NavigateurUtilisateurs Serveur applicatifServeur de cache en ReverseProxy
  • 7. EN CHIFFRE CA DONNE QUOI ?
  • 8. +Test N°1 : Site sur un site Drupal 7 › Apache 2 › PHP 5.5 › MySQL 5.5 › 110 000 requêtes… +Test N°2 : Site du même site Drupal 7 › Varnish 3 › Apache 2 › PHP 5.5 › MySQL 5.5 › Les mêmes 110 000 requêtes… EN CHIFFRE CA FAIT QUOI ? © SQLI Enterprise – SQLI GROUP | 2015 8 PETIT TEST VIA JMETER
  • 10. + Cache « MISS » VARNISH COMMENT CA MARCHE ( EN SIMPLE ) © SQLI Enterprise – SQLI GROUP | 2015 14 Recv Hash Miss Deliver Recv Hash Hit + Cache « HIT » Deliver Fetch BackEnd
  • 11. + vcl_recv › Normalise les requêtes en entrée › Premiers filtres › Sécurise › Correction d’erreurs … + vcl_pipe › Liaison non http (pipe) + vcl_hash › Définition de la clé du cache (clé unique) + vcl_hit › Cache « Hit » VARNISH 3 COMMENT CA MARCHE © SQLI Enterprise – SQLI GROUP | 2015 15
  • 12. + vcl_miss › Cache « Miss » + vcl_pass › ByPass : On force a aller chercher la réponse depuis le backend + vcl_fetch › Règle de cache de l’objet backend + vcl_deliver › Restitution de la réponse + vcl_error › Affichage d’une page d’erreur VARNISH 3 COMMENT CA MARCHE © SQLI Enterprise – SQLI GROUP | 2015 16
  • 13. + vcl_recv + vcl_pipe + vcl_hash +waiting › Gestion d’une file d’attente + vcl_hit + vcl_miss + vcl_purge › Sub routine dédié à l’invalidation de cache VARNISH 4 COMMENT CA MARCHE © SQLI Enterprise – SQLI GROUP | 2015 17
  • 14. + vcl_fetch découpé par › vcl_backend_fetch › vcl_backend_response › vcl_backend_error + vcl_deliver + vcl_error remplacé par vcl_synth VARNISH 4 COMMENT CA MARCHE © SQLI Enterprise – SQLI GROUP | 2015 18
  • 16. +ReverseProxy › Plusieurs backend derrière (homogène ou hétérogène) +LoadBalancing (via les directors) › RoundRobin (pondéré) › Client (permet de faire du sticky session sur n’importe quel élément du header) › Random › Hash mode (Version 4) +Compression HTTP (depuis Varnish 3) › Économiser de la bande passante entre Varnish et le Client (navigateurs, applications, etc …). › Économiser de la place dans le cache de Varnish (et donc de la mémoire RAM). › Économiser de la bande passante entre le backend et Varnish (peu pertinent, souvent le même VLAN). › Économiser le CPU du backend lors de la compression +ESI (Egde Side Includes) (req.esi en détection, beresp.do_esi = true pour relayer au backend ) › Cache partiel … +Réécriture d’URL (réécriture simple, pour des réécriture plus complexe, il faut passer par un VMOD) +ACL (Access Control List) VARNISH AUTRES FONCTIONNALITÉS © SQLI Enterprise – SQLI GROUP | 2015 20
  • 17. CA RESSEMBLE A QUOI ?
  • 18. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 22 # Définition du subnet Internal et purge, pour la gestion des ACLs (abordé plus bas) acl internal { "localhost" "192.10.0.0"/24; } acl purge { "localhost" } # # Default backend definition. # Création du backend « default » répondant à l’adresse 127.0.0.1 port 8080 # backend default { .host = "127.0.0.1"; .port = "8080"; }
  • 19. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 23 # Répond au requête entrante sub vcl_recv { if (req.request == "GET" && req.url ~ "^/varnishcheck$" && client.ip ~ internal) { error 200 "Varnish is Ready"; } # Si le backend ne réponds plus, suppression de tous les cookies (=> connexion anonyme). if (!req.backend.healthy) { unset req.http.Cookie; if (req.http.X-Forwarded-Proto == "https") { set req.http.X-Forwarded-Proto = "http"; } set req.grace = 30m; } else { set req.grace = 15s; } # C’est du streaming => au pipe if ( res.url ~ "^admin/content/backup_migrate/export" ) { return (pipe); }
  • 20. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 24 if (req.restarts == 0) { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } } # Pas de cache pour les urls ci-dessous (Regex) if (req.url ~ "^/status.php$" || req.url ~ "^/update.php$" || req.url ~ "^/admin$" || req.url ~ "^/admin/.*$" || req.url ~ "^/flag/.*$" || req.url ~ "^.*/ajax/.*$" || req.url ~ "^.*/ahah/.*$") { return (pass); }
  • 21. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 25 # Autorisation d’accès à cron.php ou install.php. if (req.url ~ "^/(cron|install|update).php$" && !client.ip ~ internal) { # Utilisation de la gestion d’erreur Varnish. error 403 "Forbiden."; # remplacer par synth(403, "Forbiden.") # Utilisation d’une page d’erreur définie dans le Backend ("/404" ). # set req.url = "/404"; } # Normalisation du header Accept-Encoding (http://varnish-cache.org/wiki/FAQ/Compression) if (req.http.Accept-Encoding) { if (req.url ~ ".(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") { # Suppression de l’entête Accept-Encoding remove req.http.Accept-Encoding; } elsif (req.http.Accept-Encoding ~ "gzip") { set req.http.Accept-Encoding = "gzip"; } else { # Encodage inconnu suppression de l’entête Accept-Encoding remove req.http.Accept-Encoding; } }
  • 22. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 26 # Toujours cacher les extensions ci-dessous (voir ci-dessous) if (req.url ~ "(?i).(pdf|asc|dat|txt|…|gif|jpeg|jpg|ico|swf|css|js)(?.*)?$") { unset req.http.Cookie; } # Exemple de netoyage de cookies. if (req.http.Cookie) { # 1. Ajoute un « ; » devant la chaine de cookie. set req.http.Cookie = ";" + req.http.Cookie; # 2. Supprime les espaces juste après les « ; ». set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";"); # 3. Match des cookies que l’on veux garder, ajout d’un espace devant… set req.http.Cookie = regsuball(req.http.Cookie, ";(SESS[a-z0-9]+|NO_CACHE)=", "; 1=" # 4. Suppression des autres cookies (ils n’ont pas d’espace après le « ; »). set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", ""); # 5. Suppression des « ; » et des espaces non significatifs. set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", ""); if (req.http.Cookie == "") { # Si le cookie est vide, on supprime l’entête unset req.http.Cookie; } else { # Si il reste des cookies, on demande au backend return (pass); } }
  • 23. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 27 # Non conforme à la RFC-2616 – le verbe CONNECT, on autorise également le verbe PURGE if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "PURGE" && req.request != "DELETE") { return (pipe); } # Si le verbe est différant de GET, HEAD, PURGE if (req.request != "GET" && req.request != "HEAD" && req.request != "PURGE" ) { return (pass); # PAS DE CACHE } # Si on nous demande une authentification HTTP ou qu’il reste un cookie (session ouverte if (req.http.Authorization || req.http.Cookie) { return (pass); # PAS DE CACHE } }
  • 24. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 28 # Détermination de la clé unique de stockage du cache sub vcl_hash { if (req.http.X-Forwarded-Proto == "https") { hash_data(req.http.X-Forwarded-Proto); } } # Cache Hit sub vcl_hit { if (req.request == "PURGE" && client.ip ~ purge) { purge; # Le mot clé n’existe plus en VCL4 error 200 "Purged."; } } # Cache Miss sub vcl_miss { if (req.request == "PURGE" && client.ip ~ purge) { purge; # Le mot clé n’existe plus en VCL4 error 200 "Purged."; } }
  • 25. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 29 # Traitement du retour du backend (backendresponse) # N’existe plus en VCL4 # Remplacé par vcl_backend_fetch, vcl_backend_response et vcl_bacckend_error sub vcl_fetch { # On cache les réponse 404, 301 et 500 pendant 10 minutes. if (beresp.status == 404 || beresp.status == 301 || beresp.status == 500) { set beresp.ttl = 10m; } # Suppression des cookies dans la réponse du backend pour les extensions … if (req.url ~ "(?i).(pdf|asc|dat|txt|…|gif|jpeg|jpg|ico|swf|css|js)(?.*)?$") { unset beresp.http.set-cookie; } # GraceMode, délivre un extension de la TTL dans le cas ou le backend ne réponds plus… set beresp.grace = 6h; }
  • 26. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 30 # On ajoute une entête à la réponse sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Varnish-Cache = "HIT"; } else { set resp.http.X-Varnish-Cache = "MISS"; } }
  • 27. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 31 # Dans le cas d’une erreur, l’on peux afficher un message « User Fiendly » # (sans solliciter le backend) # N’existe plus en VCL4, remplacé par vcl_synth sub vcl_error { set obj.http.Content-Type = "text/html; charset=utf-8"; synthetic {" <html> <head> <title>Page Unavailable</title><style>…</style> </head> <body onload="setTimeout(function() { window.location = '/' }, 5000)"> <div id="page"> <h1 class="title">Page Unavailable</h1> <p>The page you requested is temporarily unavailable.</p> <p>We're redirecting you to the <a href="/">homepage</a> in 5 seconds.</p> <div class="error">(Error "} + obj.status + " " + obj.response + {")</div> </div> </body> </html> "}; return (deliver); }
  • 28. VARNISH © SQLI Enterprise – SQLI GROUP | 2015 32 Instruction Varnish 3 Instruction Varnish 4 error return( synth(error_code,message)) remove unset vcl_fetch vcl_backend_response req.backend.healthy std.healthy(resp.backend_hint) * req.request req.method session_linger timeout_linger client.port std.port(client.ip) * server.port std.port(server.ip) * * Nécessite le VMOD Standard (import std;)
  • 29. LES PLUS / LES MOINS
  • 30. + Les plus +Support du Streaming +Support des ESI + Bien intégré au monde PHP (Symfony2, Drupal, eZPublish) - Les moins - Pas de support HTTPS - Outillage payant ( VAC, … ) VARNISH © SQLI Enterprise – SQLI GROUP | 2015 34 LES PLUS, LES MOINS
  • 32. + C’est à vous ! CONCLUSION / QUESTIONS © SQLI Enterprise – SQLI GROUP | 2015 36
  • 33. LIKEZ & SUIVEZ-NOUS ! Digital that works. WWW.SQLI-ENTERPRISE.COM