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. BLUE GREEN
    DEPLOYMENT
    COM DOCKER

    View Slide

  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

    View Slide

  3. BLUE GREEN
    WHAT?

    View Slide

  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

    View Slide

  5. BLUE GREEN DEPLOYMENT
    Mais informações em martinfowler.com/bliki/BlueGreenDeployment.html

    View Slide

  6. ▸ Migrando aplicação
    para AWS
    ▸ Busca por deploy
    rápido e simples
    ▸ Docker se tornando
    popular
    CONTEXTO

    View Slide

  7. View Slide

  8. 1.
    ELB + EC2 +
    DOCKER Use aquilo que
    já existe!

    View Slide

  9. ELB + EC2 + DOCKER

    View Slide

  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

    View Slide

  11. 2.
    ROUTER +
    DOCKER Adapte o que já
    existe!

    View Slide

  12. ROUTER + DOCKER

    View Slide

  13. ROUTER + DOCKER

    View Slide

  14. View Slide

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

    View Slide

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

    View Slide

  17. ROUTER + DOCKER
    ▸ Container Router
    ▸ Container Aplicação Blue
    ▸ Container Aplicação Green
    ▸ Container Redis
    ▸ Docker Network

    View Slide

  18. ROUTER + DOCKER
    ▸ Container Nginx
    ▹ OpenResty (Nginx + Lua)
    ▹ nginx.conf
    ▹ docker run -p 80:4000 --net=XXX -d router

    View Slide

  19. ROUTER + DOCKER
    ▸ Container Aplicação Blue/Green
    ▹ (build) Clone, bundle, etc
    ▹ CMD update && run!
    ▹ docker run --net=XXX -d --name=app-green app

    View Slide

  20. ROUTER + DOCKER
    ▸ Container Redis
    docker run -p 6379:6379 --name redis --net=XXX -d redis

    View Slide

  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/;
    }

    View Slide

  22. View Slide

  23. BENCHMARKING
    Aplicação: github.com/pecavalheiro/proxy-comparison

    View Slide

  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
    ▸ +

    View Slide

  25. OBRIGADO!
    Dúvidas?
    Contato pecavalheiro.com
    Apps github.com/pecavalheiro/proxy-comparison

    View Slide