tdc2016 poa | trilha devops - blue-green deployment com docker

Post on 16-Apr-2017

126 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

BLUE GREENDEPLOYMENTCOM DOCKER

PEDRO CAVALHEIRODesenvolvedor 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 Redisdocker 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

top related