Upload
oxalide
View
1.174
Download
0
Embed Size (px)
Citation preview
Varnish & blue/green deployments
Faire glisser l'image vers l'espace réservé ou cliquer sur l'icône pour l'ajouter
$ whoami
Oxalide
Conseil, Infogérance & HébergementMedia / SaaS / E-commerce
Varnish everywhere
Consultant Architecture & DevOps
Théo [email protected] @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 TomcatApp 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
VarnishCache app v1Cache 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/version11a3e229084349bc25d97e29393ced1d
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
# sess
ions
MeP green Undeploy blue
# ob
jets
MeP green
temps
Prune blue
hitra
te
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