Blue Green Deployment com Docker

400 visualizações

Publicada em

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.

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Blue Green Deployment com Docker

  1. 1. BLUE GREEN DEPLOYMENT COM DOCKER
  2. 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. 3. BLUE GREEN WHAT?
  4. 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. 5. BLUE GREEN DEPLOYMENT Mais informações em martinfowler.com/bliki/BlueGreenDeployment.html
  6. 6. ▸ Migrando aplicação para AWS ▸ Busca por deploy rápido e simples ▸ Docker se tornando popular CONTEXTO
  7. 7. 1. ELB + EC2 + DOCKER Use aquilo que já existe!
  8. 8. ELB + EC2 + DOCKER
  9. 9. ▸ 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
  10. 10. 2. ROUTER + DOCKER Adapte o que já existe!
  11. 11. ROUTER + DOCKER
  12. 12. ROUTER + DOCKER
  13. 13. ROUTER + DOCKER ▸ HAProxy ▸ Nginx Plus ▸ Node.js ▸ Consul ▸ Docker Swarm
  14. 14. ROUTER + DOCKER ▸ HAProxy ▸ Nginx Plus ▸ Node.js ▸ Consul ▸ Docker Swarm ▸ Nginx + Lua
  15. 15. ROUTER + DOCKER ▸ Container Router ▸ Container Aplicação Blue ▸ Container Aplicação Green ▸ Container Redis ▸ Docker Network
  16. 16. ROUTER + DOCKER ▸ Container Nginx ▹ OpenResty (Nginx + Lua) ▹ nginx.conf ▹ docker run -p 80:4000 --net=XXX -d router
  17. 17. ROUTER + DOCKER ▸ Container Aplicação Blue/Green ▹ (build) Clone, bundle, etc ▹ CMD update && run! ▹ docker run --net=XXX -d --name=app-green app
  18. 18. ROUTER + DOCKER ▸ Container Redis docker run -p 6379:6379 --name redis --net=XXX -d redis
  19. 19. 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/; }
  20. 20. BENCHMARKING Aplicação: github.com/pecavalheiro/proxy-comparison
  21. 21. 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 ▸ +
  22. 22. OBRIGADO! Dúvidas? Contato pecavalheiro.com Apps github.com/pecavalheiro/proxy-comparison

×