Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Varnish & blue/green deployments

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 14 Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Les utilisateurs ont également aimé (14)

Publicité

Similaire à Varnish & blue/green deployments (20)

Plus par Oxalide (20)

Publicité

Plus récents (20)

Varnish & blue/green deployments

  1. 1. Varnish & blue/green deployments
  2. 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
  3. 3. blue/green deployments
  4. 4. Déploiement blue/green • Zero-downtime deployment • Facilite le rollback • Facilite le canary-testing App v1 App v2 Load Balancer
  5. 5. Exemple avec Tomcat App v1 App v2 Tomcat Parallel Deployment Catalina Sessions déjà existantes Nouvelles sessions
  6. 6. Avec Varnish
  7. 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. 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. 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. 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. 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. 12. Mise en production d’une nouvelle version temps #sessions MeP green Undeploy blue #objets MeP green temps Prune blue hitrate MeP green temps
  13. 13. Et en vrai ? MeP
  14. 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

×