SlideShare une entreprise Scribd logo
1  sur  14
Varnish & blue/green
deployments
$ whoami Oxalide
Conseil, Infogérance & Hébergement
Media / SaaS / E-commerce
Varnish everywhere
Consultant
Architecture &
DevOps
Théo Chamley
theo.ch@mley.fr
@MrTrustor
blue/green deployments
Déploiement blue/green
• Zero-downtime deployment
• Facilite le rollback
• Facilite le canary-testing
App v1 App v2
Load Balancer
Exemple avec Tomcat
App v1 App v2
Tomcat Parallel Deployment
Catalina
Sessions déjà
existantes
Nouvelles
sessions
Avec Varnish
Et avec Varnish ?
Mix du cache des 2 versions
→ Solution ? Canary-testing ?
App v1 App v2
Varnish
Cache app v1
Cache app v2
Ébauche de solution
• Séparation du cache entre les
versions → vcl_hash
• Varnish doit connaître la version de
l’application
→ L’application doit exposer sa version
$ curl http://mon.app/version
11a3e229084349bc25d97e29393ced1d
Solution : vmod curl !
import curl;
sub vcl_recv {
if (req.url == "/version") {
return(pass);
}
curl.header_add("Host: "+req.http.host);
curl.get("http://localhost/version");
if (curl.status() == 200) {
set req.http.X-Version = curl.body();
} else {
error 500 "Internal Server Error";
}
curl.free();
}
sub vcl_hash {
hash_data(req.http.X-Version);
return(hash);
}
Toujours la dernière
version car pas de session
!
Un curl par requête ? Hmm…
On peut faire mieux !
sub app_version {
if (req.http.Cookie ~ "version=") {
set req.http.X-Version = 
regsub(req.http.Cookie, ".*version=([^;]+).*", "1");
} else {
[algo avec curl]
}
}
Le cookie « version » est
ajouté par :
• L’application
• Ou vcl_deliver
Si on récapitule…
Un « ancien » utilisateur :
• Cookie → X-Version
• HIT ou MISS
• On réécrit le cookie « version »
dans tous les cas
Un « nouvel » utilisateur :
• Appel curl → X-Version
• HIT ou MISS
• On écrit le cookie « version »
Mise en production d’une nouvelle version
temps
#sessions
MeP green Undeploy blue
#objets
MeP green
temps
Nuke blue
hitrate
MeP green
temps
Et en vrai ?
MeP
README
• Cluster Tomcat : http://bit.ly/1Nol9Qo
• Cluster-wide deployment :
http://bit.ly/1T7hPsg
Blog Oxalide
• Part 1 : http://bit.ly/1WkQVRP
• Part 2 : http://bit.ly/1WkQXsG

Contenu connexe

Similaire à Varnish & blue/green deployments

5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
AbdellahELMAMOUN
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Ludovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide
 

Similaire à Varnish & blue/green deployments (20)

Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...
Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...
Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...
 
Vagrant - Concept
Vagrant - ConceptVagrant - Concept
Vagrant - Concept
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
 
GAB 2017 PARIS - Docker sur Azure Container Services et DCOS par Michaël FERY...
GAB 2017 PARIS - Docker sur Azure Container Services et DCOS par Michaël FERY...GAB 2017 PARIS - Docker sur Azure Container Services et DCOS par Michaël FERY...
GAB 2017 PARIS - Docker sur Azure Container Services et DCOS par Michaël FERY...
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
 
Distribuer une application avec Symfony & Docker *
Distribuer une application avec Symfony & Docker *Distribuer une application avec Symfony & Docker *
Distribuer une application avec Symfony & Docker *
 
Renforçons notre Developer eXperience pour faire face aux menaces d'obsolesce...
Renforçons notre Developer eXperience pour faire face aux menaces d'obsolesce...Renforçons notre Developer eXperience pour faire face aux menaces d'obsolesce...
Renforçons notre Developer eXperience pour faire face aux menaces d'obsolesce...
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
 
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et DerueGab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
 
Des solutions de synchronisation de données
Des solutions de synchronisation de donnéesDes solutions de synchronisation de données
Des solutions de synchronisation de données
 
Push notification
Push notificationPush notification
Push notification
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...
Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...
Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...
 
2023-02-02 - Marvelous March
2023-02-02 - Marvelous March2023-02-02 - Marvelous March
2023-02-02 - Marvelous March
 
Intro to docker
Intro to dockerIntro to docker
Intro to docker
 
[GAB2016] Azure et les Microservices - Jean-Luc Boucho
[GAB2016] Azure et les Microservices - Jean-Luc Boucho[GAB2016] Azure et les Microservices - Jean-Luc Boucho
[GAB2016] Azure et les Microservices - Jean-Luc Boucho
 

Varnish & blue/green deployments

  • 2. $ whoami Oxalide Conseil, Infogérance & Hébergement Media / SaaS / E-commerce Varnish everywhere Consultant Architecture & DevOps Théo Chamley theo.ch@mley.fr @MrTrustor
  • 4. Déploiement blue/green • Zero-downtime deployment • Facilite le rollback • Facilite le canary-testing App v1 App v2 Load Balancer
  • 5. Exemple avec Tomcat App v1 App v2 Tomcat Parallel Deployment Catalina Sessions déjà existantes Nouvelles sessions
  • 7. Et avec Varnish ? Mix du cache des 2 versions → Solution ? Canary-testing ? App v1 App v2 Varnish Cache app v1 Cache app v2
  • 8. Ébauche de solution • Séparation du cache entre les versions → vcl_hash • Varnish doit connaître la version de l’application → L’application doit exposer sa version $ curl http://mon.app/version 11a3e229084349bc25d97e29393ced1d
  • 9. Solution : vmod curl ! import curl; sub vcl_recv { if (req.url == "/version") { return(pass); } curl.header_add("Host: "+req.http.host); curl.get("http://localhost/version"); if (curl.status() == 200) { set req.http.X-Version = curl.body(); } else { error 500 "Internal Server Error"; } curl.free(); } sub vcl_hash { hash_data(req.http.X-Version); return(hash); } Toujours la dernière version car pas de session !
  • 10. Un curl par requête ? Hmm… On peut faire mieux ! sub app_version { if (req.http.Cookie ~ "version=") { set req.http.X-Version = regsub(req.http.Cookie, ".*version=([^;]+).*", "1"); } else { [algo avec curl] } } Le cookie « version » est ajouté par : • L’application • Ou vcl_deliver
  • 11. Si on récapitule… Un « ancien » utilisateur : • Cookie → X-Version • HIT ou MISS • On réécrit le cookie « version » dans tous les cas Un « nouvel » utilisateur : • Appel curl → X-Version • HIT ou MISS • On écrit le cookie « version »
  • 12. Mise en production d’une nouvelle version temps #sessions MeP green Undeploy blue #objets MeP green temps Nuke blue hitrate MeP green temps
  • 13. Et en vrai ? MeP
  • 14. README • Cluster Tomcat : http://bit.ly/1Nol9Qo • Cluster-wide deployment : http://bit.ly/1T7hPsg Blog Oxalide • Part 1 : http://bit.ly/1WkQVRP • Part 2 : http://bit.ly/1WkQXsG