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.

Pedro Cavalheiro

July 09, 2016
Tweet

More Decks by Pedro Cavalheiro

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. ▸ Migrando aplicação para AWS ▸ Busca por deploy rápido

    e simples ▸ Docker se tornando popular CONTEXTO
  4. ▸ 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
  5. ROUTER + DOCKER ▸ HAProxy ▸ Nginx Plus ▸ Node.js

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

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

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

    bundle, etc ▹ CMD update && run! ▹ docker run --net=XXX -d --name=app-green app
  9. 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/; }
  10. 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 ▸ +