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

TDC2016 POA | Trilha DevOps - Blue-Green Deployment com Docker