Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Blue Green Deployment com Docker

Blue Green Deployment com Docker

Blue-Green Deployment é uma técnica robusta e segura, que consiste em manter dois ambientes de produção identicos rodando em paralelo (blue e green), alternando o tráfego entre eles, conforme a necessidade. Esta abordagem permite uma redução no downtime durante o deploy, com a segurança de rollback no caso de falhas, mas exige mais máquinas e um complexo sistema de orquestração. Nesta palestra, é demonstrado como realizar deploys sem downtime através do Docker, que torna o processo incrivelmente fácil e simplificado.

C456c99bd027622154db5f9e695afa7c?s=128

Pedro Cavalheiro

July 09, 2016
Tweet

Transcript

  1. BLUE GREEN DEPLOYMENT COM DOCKER

  2. PEDRO CAVALHEIRO Desenvolvedor web desde 2010, entusiasta por tecnologia como

    um todo. Perfil startup-developer-problem-solver, adora estudar novas ferramentas, linguagens e metodologias. Atualmente no Me Salva!. Infos em pecavalheiro.com
  3. BLUE GREEN WHAT?

  4. BLUE GREEN DEPLOYMENT ▸ Integração Contínua ▸ Minimiza Downtime ▸

    Feedback rápido - Rollback imediato ▸ Orquestração complexa Mais informações em martinfowler.com/bliki/BlueGreenDeployment.html
  5. BLUE GREEN DEPLOYMENT Mais informações em martinfowler.com/bliki/BlueGreenDeployment.html

  6. ▸ Migrando aplicação para AWS ▸ Busca por deploy rápido

    e simples ▸ Docker se tornando popular CONTEXTO
  7. None
  8. 1. ELB + EC2 + DOCKER Use aquilo que já

    existe!
  9. ELB + EC2 + DOCKER

  10. ▸ Configuração mínima (API/Listeners) ▸ Baixa complexidade ▸ Baixo custo

    agregado (ELB) ▸ Te torna “refém” da solução ▸ Impossível replicar externamente ELB + EC2 + DOCKER
  11. 2. ROUTER + DOCKER Adapte o que já existe!

  12. ROUTER + DOCKER

  13. ROUTER + DOCKER

  14. None
  15. ROUTER + DOCKER ▸ HAProxy ▸ Nginx Plus ▸ Node.js

    ▸ Consul ▸ Docker Swarm
  16. ROUTER + DOCKER ▸ HAProxy ▸ Nginx Plus ▸ Node.js

    ▸ Consul ▸ Docker Swarm ▸ Nginx + Lua
  17. ROUTER + DOCKER ▸ Container Router ▸ Container Aplicação Blue

    ▸ Container Aplicação Green ▸ Container Redis ▸ Docker Network
  18. ROUTER + DOCKER ▸ Container Nginx ▹ OpenResty (Nginx +

    Lua) ▹ nginx.conf ▹ docker run -p 80:4000 --net=XXX -d router
  19. ROUTER + DOCKER ▸ Container Aplicação Blue/Green ▹ (build) Clone,

    bundle, etc ▹ CMD update && run! ▹ docker run --net=XXX -d --name=app-green app
  20. ROUTER + DOCKER ▸ Container Redis docker run -p 6379:6379

    --name redis --net=XXX -d redis
  21. NGINX + LUA ROUTING upstream green { server app-green:4000; }

    upstream blue { server app-blue:4000; } location / { set $upstream ""; rewrite_by_lua ' local redis = require "redis" local client = redis.connect("redis", 6379) route = client:get("current_upstream") if route ~= nil then ngx.var.upstream = route else ngx.var.upstream = "green" end '; proxy_pass http://$upstream/; }
  22. None
  23. BENCHMARKING Aplicação: github.com/pecavalheiro/proxy-comparison

  24. CONSIDERAÇÕES FINAIS Menos é mais Solução simples para problemas simples

    Controle Flexibilidade na definição de fluxo da aplicação com baixa perda de performance Possibilidades ▸ Filtros ▸ AB Testing ▸ Docker Compose ▸ +
  25. OBRIGADO! Dúvidas? Contato pecavalheiro.com Apps github.com/pecavalheiro/proxy-comparison