Slide 1

Slide 1 text

BLUE GREEN DEPLOYMENT COM DOCKER

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

BLUE GREEN WHAT?

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

ELB + EC2 + DOCKER

Slide 10

Slide 10 text

▸ 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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

ROUTER + DOCKER

Slide 13

Slide 13 text

ROUTER + DOCKER

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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