SlideShare una empresa de Scribd logo
1 de 92
Descargar para leer sin conexión
J o r n a d a G o i a n a e m E n g e n h a r i a d e S o f t w a re 
PADRÕES DE DEPLOY PARA 
DEVOPS E ENTREGA CONTÍNUA 
Danilo Sato (@dtsato) 
dsato@thoughtworks.com
MISSÕES AMBICIOSAS EXIGEM 
IDEIAS DISRUPTIVAS
NEGÓCIO GLOBAL: COMUNIDADE GLOBAL
UMA EMPRESA DE 100-ANOS 
Nossa missão é melhorar a humanidade através do software e ajudar a gerar 
a criação de um ecossistema socialmente responsável e economicamente justo. 
Gerir um negócio 
sustentável 
Liderar e promover excelência de 
software e revolucionar a indústria de TI 
Advogar apaixonadamente em 
favor da justiça social e econômica
MAIS DE 20 ANOS DE 
LIDERANÇA NO PENSAMENTO 
…para nomear 
alguns
QUEM SOU EU? 
▫︎Desenvolvedor 
▫︎Arquiteto 
▫︎Coach 
▫︎Treinador 
▫︎Administrador de Rede 
6 
@dtsato
7 
www.devopsnapratica.com.br 
@dtsato 
! 
#DevopsNaPratica
UMA HISTÓRIA 
COMUM… 
8 
“O dia que fizemos o deploy errado”
9 
Freqüência de 
deploy 
Quantidade de 
mudanças 
Risco 
Processo
COM UM FINAL 
DIFERENTE… 
10 
“Problemas difíceis não se resolvem do dia para a noite”
11 
Freqüência de 
deploy 
Quantidade de 
mudanças 
Risco 
Processo 
DevOps
Nosso objetivo é tornar o deploy um 
“não-evento” 
12
AUTOMAÇÃO 
https://www.flickr.com/photos/sushithegreat/21396114123 9
Ideia Em produção 
14
Ideia Em produção 
15 
Código 
Testes 
Pacote 
Aprovação 
Homologação / Ambientes 
Servidores / Exploração / Implantar
Ideia Em produção 
15 
Código 
Testes 
Pacote 
Aprovação 
Homologação / Ambientes 
Servidores / Exploração / Implantar 
Pipeline de Entrega
PIPELINE DE ENTREGA 
16
PIPELINE DE ENTREGA 
17 
Repositório 
de Código 
Build e Testes 
de Unidade 
Testes de 
Aceitação 
Validação 
com Usuário 
Deploy em 
Produção 
F 
commit 
feedback 
P 
commit 
feedback 
F 
P 
commit 
P 
P 
aprovação
PIPELINE DE ENTREGA 
18 
App A 
Service B 
Service C 
Unit 
Tests 
Version 
Control 
Artifact 
Repository 
Integration 
Tests 
Unit 
Tests 
Integration 
Tests 
Unit 
Tests 
Integration 
Tests 
Contract 
Tests 
Contract 
Tests 
Deploy to 
Dev Smoke 
Deploy to 
Int Application 
Testing Smoke 
Service D 
App E 
Service F 
Unit 
Tests 
Integration 
Tests 
Unit 
Tests 
Integration 
Tests 
Unit 
Tests 
Integration 
Tests 
Contract 
Tests 
Deploy to 
Dev Smoke 
Application 
Testing 
Contract 
Tests 
Deploy to 
Dev Smoke 
Deploy to 
Int Smoke 
Deploy to 
Int 
End to End 
Testing 
Dev 
Environment 
Deploy to 
Performance 
QA Smoke 
Testing UAT 
Integration 
Environment 
QA 
Environment 
Deploy to 
Production Smoke 
COTS 
Production 
Environment 
Deploy to 
Int 
(...) 
(…)
19 
Monitoramento 
Alertas 
Suporte 
Feedback dos usuários 
Dados / Análises 
Insights 
Em produção
19 
Monitoramento 
Alertas 
Suporte 
Feedback dos usuários 
Dados / Análises 
Insights 
Em produção Ideia
20 
Tempo de Ciclo 
Qualidade
PRINCÍPIOS PARA 
ENTREGAS DE BAIXO 
RISCO 
21
INCREMENTAL É MELHOR QUE “BIG BANG” 
22 
… …
INCREMENTAL É MELHOR QUE “BIG BANG” 
22 
… …
INCREMENTAL É MELHOR QUE “BIG BANG” 
22 
… …
IMPLANTAÇÃO != ENTREGA 
https://www.flickr.com/photos/thesurlefilariane/151313600283 5
IMPLANTAÇÃO != ENTREGA 
https://www.flickr.com/photos/thesurlefilariane/14944787618 
https://www.flickr.com/photos/thesurlefilariane/151313600283 5
FOQUE EM ENTREGAR LOTES PEQUENOS 
24 
https://www.flickr.com/photos/pelosi/2836152295 https://www.flickr.com/photos/55391407@N03/5137410738 
vs.
FOQUE EM ENTREGAR LOTES PEQUENOS 
24 
https://www.flickr.com/photos/pelosi/2836152295 https://www.flickr.com/photos/55391407@N03/5137410738 
MTBF 
Mean Time Between Failure 
MTTR 
Mean Time To Recover 
vs.
FOQUE EM ENTREGAR LOTES PEQUENOS 
24 
https://www.flickr.com/photos/pelosi/2836152295 https://www.flickr.com/photos/55391407@N03/5137410738 
MTBF 
Mean Time Between Failure 
MTTR 
Mean Time To Recover 
vs.
QUALIDADE DEVE ESTAR EMBUTIDA 
NO PROCESSO 
https://www.flickr.com/photos/edgarallanbro/71979142275 4
MUDANÇA PARALELA 
26 
Também conhecida como “Expansão e Contração” 
http://www.thoughtworks.com/insights/blog/mudança-paralela 
https://www.flickr.com/photos/telstar/8246798446
1. EXPANSÃO 
27 
class Grid { 
private Cell[][] cells; 
… 
! 
public void addCell(int x, int y, Cell cell) { 
cells[x][y] = cell; 
} 
public Cell fetchCell(int x, int y) { 
return cells[x][y]; 
} 
!! 
public boolean isEmpty(int x, int y) { 
return cells[x][y] == null; 
} 
!!! 
}
1. EXPANSÃO 
28 
class Grid { 
private Cell[][] cells; 
… 
! 
public void addCell(int x, int y, Cell cell) { 
cells[x][y] = cell; 
} 
! 
public Cell fetchCell(int x, int y) { 
return cells[x][y]; 
} 
!!! 
public boolean isEmpty(int x, int y) { 
return cells[x][y] == null; 
} 
!!! 
}
1. EXPANSÃO 
29 
class Grid { 
private Cell[][] cells; 
private Map<Coordinate, Cell> newCells; 
… 
! 
public void addCell(int x, int y, Cell cell) { 
cells[x][y] = cell; 
} 
public void addCell(Coordinate coordinate, Cell cell) { 
newCells.put(coordinate, cell); 
} 
public Cell fetchCell(int x, int y) { 
return cells[x][y]; 
} 
public Cell fetchCell(Coordinate coordinate) { 
return newCells.get(coordinate); 
} 
public boolean isEmpty(int x, int y) { 
return cells[x][y] == null; 
} 
public boolean isEmpty(Coordinate coordinate) { 
return !newCells.containsKey(coordinate); 
} 
}
2. MIGRAÇÃO 
30 
Nova Versão 
Cliente 
Versão 
Antiga 
Cliente 
Cliente 
addCell(int x, int y, Cell cell) 
fetchCell(int x, int y) 
isEmpty(int x, int y) 
Cell[][] cells 
Map<Coordinate, Cell> newCells
2. MIGRAÇÃO 
31 
Nova Versão 
Cliente 
Versão 
Antiga 
Cliente 
Cliente 
addCell(int x, int y, Cell cell) 
fetchCell(Coordinate c) 
isEmpty(Coordinate c) 
Cell[][] cells 
Map<Coordinate, Cell> newCells
3. CONTRAÇÃO 
32 
Nova Versão 
Cliente 
Cliente 
Cliente 
addCell(Coordinate c, Cell cell) 
fetchCell(Coordinate c) 
isEmpty(Coordinate c) 
Cell[][] cells 
Map<Coordinate, Cell> cells
3. CONTRAÇÃO 
33 
class Grid { 
private Cell[][] cells; 
private Map<Coordinate, Cell> newCells; 
… 
! 
public void addCell(int x, int y, Cell cell) { 
cells[x][y] = cell; 
} 
public void addCell(Coordinate coordinate, Cell cell) { 
newCells.put(coordinate, cell); 
} 
public Cell fetchCell(int x, int y) { 
return cells[x][y]; 
} 
public Cell fetchCell(Coordinate coordinate) { 
return newCells.get(coordinate); 
} 
public boolean isEmpty(int x, int y) { 
return cells[x][y] == null; 
} 
public boolean isEmpty(Coordinate coordinate) { 
return !newCells.containsKey(coordinate); 
} 
}
3. CONTRAÇÃO 
34 
class Grid { 
! 
private Map<Coordinate, Cell> cells; 
… 
!!!! 
public void addCell(Coordinate coordinate, Cell cell) { 
cells.put(coordinate, cell); 
} 
!!! 
public Cell fetchCell(Coordinate coordinate) { 
return cells.get(coordinate); 
} 
!!! public boolean isEmpty(Coordinate coordinate) { 
return !cells.containsKey(coordinate); 
} 
}
35 
IMPLANTAÇÃO 
AZUL-VERDE 
http://www.thoughtworks.com/insights/blog/implementando-implantacoes-azul- 
verde-com-amazon-web-services-aws
IMPLANTAÇÃO AZUL-VERDE 
36 
Verde 
Azul 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Usuários Roteador 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD
IMPLANTAÇÃO AZUL-VERDE 
37 
Verde 
Azul 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Usuários Roteador 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD
“Mas e o Banco de Dados?” 
38
IMPLANTAÇÃO AZUL-VERDE 
39 
Azul 
Verde 
Azul 
Verde 
Servidor 
web 
Servidor de 
BD 
Usuários Roteador 
Servidor 
web 
Servidor de 
BD 
Servidor de 
aplicação 
Servidor de 
aplicação
IMPLANTAÇÃO AZUL-VERDE 
40 
Azul 
Verde 
Azul 
Verde 
Servidor 
web 
Servidor de 
BD 
Usuários Roteador 
Servidor 
web 
Servidor de 
BD 
Servidor de 
aplicação 
Servidor de 
aplicação
IMPLANTAÇÃO AZUL-VERDE 
41 
Azul 
Verde 
Azul 
Verde 
Servidor 
web 
Servidor de 
BD 
Usuários Roteador 
Servidor 
web 
Servidor de 
BD 
Servidor de 
aplicação 
Servidor de 
aplicação
42 
https://speakerdeck.com/mavcunha/releases-sem-interrupcoes
43 
IMPLANTAÇÃO 
CANÁRIO 
http://www.thoughtworks.com/insights/blog/implantações-canário
IMPLANTAÇÃO CANÁRIO 
44 
Versão Antiga 
Nova Versão 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Todos os 
usuários 
Usuários Roteador
IMPLANTAÇÃO CANÁRIO 
45 
Versão Antiga 
Nova Versão 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Maior parte dos 
usuários 
(95%) 
Usuários Roteador 
Alguns 
usuários 
(5%)
IMPLANTAÇÃO CANÁRIO 
46 
Versão Antiga 
Nova Versão 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Alguns 
usuários 
Usuários Roteador 
(2%) 
Maior parte 
dos usuários 
(98%)
IMPLANTAÇÃO CANÁRIO 
47 
Versão Antiga 
Nova Versão 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Servidor 
web 
Servidor de 
aplicação 
Servidor de 
BD 
Usuários 
Roteador 
Todos os 
usuários
48 
FEATURE TOGGLES 
http://martinfowler.com/bliki/FeatureToggle.html 
https://www.flickr.com/photos/waynewilkinson/6187603535
FEATURE TOGGLE 
49 
share_with_friends = false 
Configuração: 
Livro Devops na Prática: Entrega de Software Confiável e Automatizada 
http://www.devopsnapratica.com.br Google
FEATURE TOGGLE 
50 
share_with_friends = true 
Configuração: 
Livro Devops na Prática: Entrega de Software Confiável e Automatizada 
http://www.devopsnapratica.com.br Google
51 
ENTREGA NO 
ESCURO 
https://www.flickr.com/photos/dwrose/3967195917
ENTREGA NO ESCURO 
52 
Web Page Title 
http://facebook.com Google 
João 
Backend de Chat 
Web Page Title 
http://facebook.com Google 
Maria
ENTREGA NO ESCURO 
53 
Web Page Title 
http://facebook.com Google 
Phasellus nulla risus, semper non dictum semper, congue 
vitae augue. Nunc vulputate ligula eget neque tempus. 
Maria 
disse 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Curabitur eget ultrices velit. 
Suspendisse ut justo elementum felis facilisis aliquam ut 
sit amet mi. Praesent sit amet venenatis eros. Fusce est 
João 
João tellus, congue ac augue in, congue elementum quam. 
disse 
Backend de Chat 
Web Page Title 
http://facebook.com Google 
Maria 
Phasellus nulla risus, semper non dictum semper, congue 
vitae augue. Nunc vulputate ligula eget neque tempus. 
Maria 
disse 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Curabitur eget ultrices velit. 
Suspendisse ut justo elementum felis facilisis aliquam ut 
sit amet mi. Praesent sit amet venenatis eros. Fusce est 
João tellus, congue ac augue in, congue elementum quam. 
disse
ENTREGA NO ESCURO 
54 
Web Page Title 
http://facebook.com Google 
Phasellus nulla risus, semper non dictum semper, congue 
vitae augue. Nunc vulputate ligula eget neque tempus. 
Maria 
disse 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Curabitur eget ultrices velit. 
Suspendisse ut justo elementum felis facilisis aliquam ut 
sit amet mi. Praesent sit amet venenatis eros. Fusce est 
João 
João tellus, congue ac augue in, congue elementum quam. 
disse 
Backend de Chat 
Web Page Title 
http://facebook.com Google 
Maria 
Phasellus nulla risus, semper non dictum semper, congue 
vitae augue. Nunc vulputate ligula eget neque tempus. 
Maria 
disse 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Curabitur eget ultrices velit. 
Suspendisse ut justo elementum felis facilisis aliquam ut 
sit amet mi. Praesent sit amet venenatis eros. Fusce est 
João tellus, congue ac augue in, congue elementum quam. 
disse
SERVIDORES 
PHOENIX 
55 
http://martinfowler.com/bliki/PhoenixServer.html
SERVIDORES SNOWFLAKE 
56 
…
SERVIDORES SNOWFLAKE 
57 
… …
SERVIDORES SNOWFLAKE 
58 
… … …
SERVIDORES SNOWFLAKE 
58 
… … …
SERVIDORES PHOENIX 
59 
…
SERVIDORES PHOENIX 
60 
…
SERVIDORES PHOENIX 
60 
…
SERVIDORES PHOENIX 
60 
… …
SERVIDORES PHOENIX 
61 
… …
SERVIDORES PHOENIX 
62 
… …
SERVIDORES PHOENIX 
62 
… …
SERVIDORES PHOENIX 
62 
… …
SERVIDORES PHOENIX 
62 
… … …
SERVIDORES 
IMUTÁVEIS 
http://martinfowler.com/bliki/ImmutableServer.html 
63
SERVIDORES IMUTÁVEIS 
64 
…
SERVIDORES IMUTÁVEIS 
65 
…
SERVIDORES IMUTÁVEIS 
65 
…
SERVIDORES IMUTÁVEIS 
65 
… …
SERVIDORES IMUTÁVEIS 
66 
… …
SERVIDORES IMUTÁVEIS 
67 
… …
SERVIDORES IMUTÁVEIS 
67 
… …
SERVIDORES IMUTÁVEIS 
67 
… … …
SERVIDORES IMUTÁVEIS 
68 
▫︎Imagem como artefato 
! ▫︎Container como artefato
PRINCÍPIOS PARA ENTREGAS 
DE BAIXO RISCO 
1. Incremental é melhor que “big bang” 
2. Implantação != Entrega 
3. Foque em entregar lotes pequenos 
4. Qualidade deve estar embutida no 
processo 
69
PADRÕES DE DEPLOY 
1. Automação 
2. Pipeline de Entrega 
3. Mudança Paralela 
4. Implantação Azul-Verde 
5. Implantação Canário 
6. Feature Toggles 
7. Entrega no Escuro 
8. Servidores Phoenix 
9. Servidores Imutáveis 
70
71 
MAIS INFORMAÇÕES 
▫︎TI de alto desempenho é uma 
vantagem competitiva 
▫︎Práticas de DevOps melhoram o 
desempenho de TI 
▫︎Cultura organizacional é 
importante 
▫︎Satisfação no emprego é o 
preditor Nº 1 de desempenho 
organizacional 
http://puppetlabs.com/2014-devops-report
72 
PRÁTICAS CORRELACIONADAS 
Métricas de vazão Métricas de Estabilidade 
Freqüência de deploy 
- Entrega Contínua 
- Controle de Versões 
Tempo médio para recuperação 
- Controle de Versões 
- Monitoramento da Saúde do Sistema e 
das Aplicações 
Tempo de ciclo para mudanças 
- Controle de Versões 
- Testes Automatizados 
Taxa de falhas para mudanças 
Não apresentou correlação forte com as 
práticas estudadas
MAIS CONTEÚDO 
▫︎Kit de Entrega Contínua: 
▫︎http://info.thoughtworks.com/entrega-continua-toolkit 
▫︎Insights (blogs e artigos) 
▫︎Livros 
▫︎Slides 
▫︎Vídeo 
73
PERGUNTAS? 
74 
#DevopsNaPratica
OBRIGADO! 
Danilo Sato (@dtsato) 
dsato@thoughtworks.com 
75 
www.devopsnapratica.com.br 
! 
#DevopsNaPratica

Más contenido relacionado

La actualidad más candente

Teltools - Fábrica de Software - Resumida - V1
Teltools - Fábrica de Software - Resumida - V1Teltools - Fábrica de Software - Resumida - V1
Teltools - Fábrica de Software - Resumida - V1
slides_teltools
 

La actualidad más candente (20)

Xperience Superlógica 2018 - Infraestrutura Ágil
Xperience Superlógica 2018 - Infraestrutura ÁgilXperience Superlógica 2018 - Infraestrutura Ágil
Xperience Superlógica 2018 - Infraestrutura Ágil
 
Introdução à Segurança de Containers e Kubernetes
Introdução à Segurança de Containers e KubernetesIntrodução à Segurança de Containers e Kubernetes
Introdução à Segurança de Containers e Kubernetes
 
Latinoware - Quarkus io cloud native apps
Latinoware - Quarkus io cloud native appsLatinoware - Quarkus io cloud native apps
Latinoware - Quarkus io cloud native apps
 
DevSecOps
DevSecOpsDevSecOps
DevSecOps
 
[TDC-Arquitetura Java] Pastoreando Gatos
[TDC-Arquitetura Java] Pastoreando Gatos[TDC-Arquitetura Java] Pastoreando Gatos
[TDC-Arquitetura Java] Pastoreando Gatos
 
Webinar Segurança de DevOps
Webinar Segurança de DevOpsWebinar Segurança de DevOps
Webinar Segurança de DevOps
 
DevOps Days SP 2019
DevOps Days SP 2019DevOps Days SP 2019
DevOps Days SP 2019
 
Continuous integration, delivery and deployment in nodejs
Continuous integration, delivery and deployment in nodejsContinuous integration, delivery and deployment in nodejs
Continuous integration, delivery and deployment in nodejs
 
Teltools - Fábrica de Software - Resumida - V1
Teltools - Fábrica de Software - Resumida - V1Teltools - Fábrica de Software - Resumida - V1
Teltools - Fábrica de Software - Resumida - V1
 
12 factor app
12 factor app12 factor app
12 factor app
 
Containers e DevOps
Containers e DevOps Containers e DevOps
Containers e DevOps
 
Desafios e glórias na implementação de infra as code
Desafios e glórias na implementação de infra as codeDesafios e glórias na implementação de infra as code
Desafios e glórias na implementação de infra as code
 
InterCon 2017 - Desenvolvimento de uma Infraestrutura Ágil com Práticas DevOp...
InterCon 2017 - Desenvolvimento de uma Infraestrutura Ágil com Práticas DevOp...InterCon 2017 - Desenvolvimento de uma Infraestrutura Ágil com Práticas DevOp...
InterCon 2017 - Desenvolvimento de uma Infraestrutura Ágil com Práticas DevOp...
 
Dicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOpsDicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOps
 
TDC2018SP | Trilha Arq .Net - Aplicacoes Multi-Tenant no Asp.Net Core
TDC2018SP | Trilha Arq .Net - Aplicacoes Multi-Tenant no Asp.Net CoreTDC2018SP | Trilha Arq .Net - Aplicacoes Multi-Tenant no Asp.Net Core
TDC2018SP | Trilha Arq .Net - Aplicacoes Multi-Tenant no Asp.Net Core
 
TDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps JavaTDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps Java
 
TDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps JavaTDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps Java
 
Entity Framework 7.0 a.k.a Entity Core 1.0
Entity Framework 7.0 a.k.a Entity Core 1.0Entity Framework 7.0 a.k.a Entity Core 1.0
Entity Framework 7.0 a.k.a Entity Core 1.0
 
TDC2016SP - Por dentro do .Net Core
TDC2016SP - Por dentro do .Net CoreTDC2016SP - Por dentro do .Net Core
TDC2016SP - Por dentro do .Net Core
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaS
 

Similar a Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato

[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
Felipe Pimentel
 
Microsoft research e inovação
Microsoft research e inovaçãoMicrosoft research e inovação
Microsoft research e inovação
Vitor Ciaramella
 

Similar a Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato (20)

Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento Android
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Microsoft research e inovação
Microsoft research e inovaçãoMicrosoft research e inovação
Microsoft research e inovação
 
Arquitetura e Design QCon2010 - Paulo Silveira - Caelum
Arquitetura e Design QCon2010 - Paulo Silveira - CaelumArquitetura e Design QCon2010 - Paulo Silveira - Caelum
Arquitetura e Design QCon2010 - Paulo Silveira - Caelum
 
Oficina kinect
Oficina kinectOficina kinect
Oficina kinect
 
Controle de versão com Git
Controle de versão com GitControle de versão com Git
Controle de versão com Git
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
Show Day Droid x
Show Day Droid xShow Day Droid x
Show Day Droid x
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
[FLISOL] Android Faixa Branca (Iniciando no Android) – 2013
[FLISOL] Android Faixa Branca (Iniciando no Android) – 2013[FLISOL] Android Faixa Branca (Iniciando no Android) – 2013
[FLISOL] Android Faixa Branca (Iniciando no Android) – 2013
 
TDC - Introdução ao Actor Model com Microsoft Orleans
TDC - Introdução ao Actor Model com Microsoft OrleansTDC - Introdução ao Actor Model com Microsoft Orleans
TDC - Introdução ao Actor Model com Microsoft Orleans
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
 
QConRio 2014 - Tutorial Iniciando Com Continuous Delivery
QConRio 2014 - Tutorial Iniciando Com Continuous DeliveryQConRio 2014 - Tutorial Iniciando Com Continuous Delivery
QConRio 2014 - Tutorial Iniciando Com Continuous Delivery
 

Más de Thoughtworks

Más de Thoughtworks (20)

Design System as a Product
Design System as a ProductDesign System as a Product
Design System as a Product
 
Designers, Developers & Dogs
Designers, Developers & DogsDesigners, Developers & Dogs
Designers, Developers & Dogs
 
Cloud-first for fast innovation
Cloud-first for fast innovationCloud-first for fast innovation
Cloud-first for fast innovation
 
More impact with flexible teams
More impact with flexible teamsMore impact with flexible teams
More impact with flexible teams
 
Culture of Innovation
Culture of InnovationCulture of Innovation
Culture of Innovation
 
Dual-Track Agile
Dual-Track AgileDual-Track Agile
Dual-Track Agile
 
Developer Experience
Developer ExperienceDeveloper Experience
Developer Experience
 
When we design together
When we design togetherWhen we design together
When we design together
 
Hardware is hard(er)
Hardware is hard(er)Hardware is hard(er)
Hardware is hard(er)
 
Customer-centric innovation enabled by cloud
 Customer-centric innovation enabled by cloud Customer-centric innovation enabled by cloud
Customer-centric innovation enabled by cloud
 
Amazon's Culture of Innovation
Amazon's Culture of InnovationAmazon's Culture of Innovation
Amazon's Culture of Innovation
 
When in doubt, go live
When in doubt, go liveWhen in doubt, go live
When in doubt, go live
 
Don't cross the Rubicon
Don't cross the RubiconDon't cross the Rubicon
Don't cross the Rubicon
 
Error handling
Error handlingError handling
Error handling
 
Your test coverage is a lie!
Your test coverage is a lie!Your test coverage is a lie!
Your test coverage is a lie!
 
Docker container security
Docker container securityDocker container security
Docker container security
 
Redefining the unit
Redefining the unitRedefining the unit
Redefining the unit
 
Technology Radar Webinar UK - Vol. 22
Technology Radar Webinar UK - Vol. 22Technology Radar Webinar UK - Vol. 22
Technology Radar Webinar UK - Vol. 22
 
A Tribute to Turing
A Tribute to TuringA Tribute to Turing
A Tribute to Turing
 
Rsa maths worked out
Rsa maths worked outRsa maths worked out
Rsa maths worked out
 

Último

Último (8)

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato

  • 1. J o r n a d a G o i a n a e m E n g e n h a r i a d e S o f t w a re PADRÕES DE DEPLOY PARA DEVOPS E ENTREGA CONTÍNUA Danilo Sato (@dtsato) dsato@thoughtworks.com
  • 2. MISSÕES AMBICIOSAS EXIGEM IDEIAS DISRUPTIVAS
  • 4. UMA EMPRESA DE 100-ANOS Nossa missão é melhorar a humanidade através do software e ajudar a gerar a criação de um ecossistema socialmente responsável e economicamente justo. Gerir um negócio sustentável Liderar e promover excelência de software e revolucionar a indústria de TI Advogar apaixonadamente em favor da justiça social e econômica
  • 5. MAIS DE 20 ANOS DE LIDERANÇA NO PENSAMENTO …para nomear alguns
  • 6. QUEM SOU EU? ▫︎Desenvolvedor ▫︎Arquiteto ▫︎Coach ▫︎Treinador ▫︎Administrador de Rede 6 @dtsato
  • 8. UMA HISTÓRIA COMUM… 8 “O dia que fizemos o deploy errado”
  • 9. 9 Freqüência de deploy Quantidade de mudanças Risco Processo
  • 10. COM UM FINAL DIFERENTE… 10 “Problemas difíceis não se resolvem do dia para a noite”
  • 11. 11 Freqüência de deploy Quantidade de mudanças Risco Processo DevOps
  • 12. Nosso objetivo é tornar o deploy um “não-evento” 12
  • 15. Ideia Em produção 15 Código Testes Pacote Aprovação Homologação / Ambientes Servidores / Exploração / Implantar
  • 16. Ideia Em produção 15 Código Testes Pacote Aprovação Homologação / Ambientes Servidores / Exploração / Implantar Pipeline de Entrega
  • 18. PIPELINE DE ENTREGA 17 Repositório de Código Build e Testes de Unidade Testes de Aceitação Validação com Usuário Deploy em Produção F commit feedback P commit feedback F P commit P P aprovação
  • 19. PIPELINE DE ENTREGA 18 App A Service B Service C Unit Tests Version Control Artifact Repository Integration Tests Unit Tests Integration Tests Unit Tests Integration Tests Contract Tests Contract Tests Deploy to Dev Smoke Deploy to Int Application Testing Smoke Service D App E Service F Unit Tests Integration Tests Unit Tests Integration Tests Unit Tests Integration Tests Contract Tests Deploy to Dev Smoke Application Testing Contract Tests Deploy to Dev Smoke Deploy to Int Smoke Deploy to Int End to End Testing Dev Environment Deploy to Performance QA Smoke Testing UAT Integration Environment QA Environment Deploy to Production Smoke COTS Production Environment Deploy to Int (...) (…)
  • 20. 19 Monitoramento Alertas Suporte Feedback dos usuários Dados / Análises Insights Em produção
  • 21. 19 Monitoramento Alertas Suporte Feedback dos usuários Dados / Análises Insights Em produção Ideia
  • 22. 20 Tempo de Ciclo Qualidade
  • 23. PRINCÍPIOS PARA ENTREGAS DE BAIXO RISCO 21
  • 24. INCREMENTAL É MELHOR QUE “BIG BANG” 22 … …
  • 25. INCREMENTAL É MELHOR QUE “BIG BANG” 22 … …
  • 26. INCREMENTAL É MELHOR QUE “BIG BANG” 22 … …
  • 27. IMPLANTAÇÃO != ENTREGA https://www.flickr.com/photos/thesurlefilariane/151313600283 5
  • 28. IMPLANTAÇÃO != ENTREGA https://www.flickr.com/photos/thesurlefilariane/14944787618 https://www.flickr.com/photos/thesurlefilariane/151313600283 5
  • 29. FOQUE EM ENTREGAR LOTES PEQUENOS 24 https://www.flickr.com/photos/pelosi/2836152295 https://www.flickr.com/photos/55391407@N03/5137410738 vs.
  • 30. FOQUE EM ENTREGAR LOTES PEQUENOS 24 https://www.flickr.com/photos/pelosi/2836152295 https://www.flickr.com/photos/55391407@N03/5137410738 MTBF Mean Time Between Failure MTTR Mean Time To Recover vs.
  • 31. FOQUE EM ENTREGAR LOTES PEQUENOS 24 https://www.flickr.com/photos/pelosi/2836152295 https://www.flickr.com/photos/55391407@N03/5137410738 MTBF Mean Time Between Failure MTTR Mean Time To Recover vs.
  • 32. QUALIDADE DEVE ESTAR EMBUTIDA NO PROCESSO https://www.flickr.com/photos/edgarallanbro/71979142275 4
  • 33. MUDANÇA PARALELA 26 Também conhecida como “Expansão e Contração” http://www.thoughtworks.com/insights/blog/mudança-paralela https://www.flickr.com/photos/telstar/8246798446
  • 34. 1. EXPANSÃO 27 class Grid { private Cell[][] cells; … ! public void addCell(int x, int y, Cell cell) { cells[x][y] = cell; } public Cell fetchCell(int x, int y) { return cells[x][y]; } !! public boolean isEmpty(int x, int y) { return cells[x][y] == null; } !!! }
  • 35. 1. EXPANSÃO 28 class Grid { private Cell[][] cells; … ! public void addCell(int x, int y, Cell cell) { cells[x][y] = cell; } ! public Cell fetchCell(int x, int y) { return cells[x][y]; } !!! public boolean isEmpty(int x, int y) { return cells[x][y] == null; } !!! }
  • 36. 1. EXPANSÃO 29 class Grid { private Cell[][] cells; private Map<Coordinate, Cell> newCells; … ! public void addCell(int x, int y, Cell cell) { cells[x][y] = cell; } public void addCell(Coordinate coordinate, Cell cell) { newCells.put(coordinate, cell); } public Cell fetchCell(int x, int y) { return cells[x][y]; } public Cell fetchCell(Coordinate coordinate) { return newCells.get(coordinate); } public boolean isEmpty(int x, int y) { return cells[x][y] == null; } public boolean isEmpty(Coordinate coordinate) { return !newCells.containsKey(coordinate); } }
  • 37. 2. MIGRAÇÃO 30 Nova Versão Cliente Versão Antiga Cliente Cliente addCell(int x, int y, Cell cell) fetchCell(int x, int y) isEmpty(int x, int y) Cell[][] cells Map<Coordinate, Cell> newCells
  • 38. 2. MIGRAÇÃO 31 Nova Versão Cliente Versão Antiga Cliente Cliente addCell(int x, int y, Cell cell) fetchCell(Coordinate c) isEmpty(Coordinate c) Cell[][] cells Map<Coordinate, Cell> newCells
  • 39. 3. CONTRAÇÃO 32 Nova Versão Cliente Cliente Cliente addCell(Coordinate c, Cell cell) fetchCell(Coordinate c) isEmpty(Coordinate c) Cell[][] cells Map<Coordinate, Cell> cells
  • 40. 3. CONTRAÇÃO 33 class Grid { private Cell[][] cells; private Map<Coordinate, Cell> newCells; … ! public void addCell(int x, int y, Cell cell) { cells[x][y] = cell; } public void addCell(Coordinate coordinate, Cell cell) { newCells.put(coordinate, cell); } public Cell fetchCell(int x, int y) { return cells[x][y]; } public Cell fetchCell(Coordinate coordinate) { return newCells.get(coordinate); } public boolean isEmpty(int x, int y) { return cells[x][y] == null; } public boolean isEmpty(Coordinate coordinate) { return !newCells.containsKey(coordinate); } }
  • 41. 3. CONTRAÇÃO 34 class Grid { ! private Map<Coordinate, Cell> cells; … !!!! public void addCell(Coordinate coordinate, Cell cell) { cells.put(coordinate, cell); } !!! public Cell fetchCell(Coordinate coordinate) { return cells.get(coordinate); } !!! public boolean isEmpty(Coordinate coordinate) { return !cells.containsKey(coordinate); } }
  • 42. 35 IMPLANTAÇÃO AZUL-VERDE http://www.thoughtworks.com/insights/blog/implementando-implantacoes-azul- verde-com-amazon-web-services-aws
  • 43. IMPLANTAÇÃO AZUL-VERDE 36 Verde Azul Servidor web Servidor de aplicação Servidor de BD Usuários Roteador Servidor web Servidor de aplicação Servidor de BD
  • 44. IMPLANTAÇÃO AZUL-VERDE 37 Verde Azul Servidor web Servidor de aplicação Servidor de BD Usuários Roteador Servidor web Servidor de aplicação Servidor de BD
  • 45. “Mas e o Banco de Dados?” 38
  • 46. IMPLANTAÇÃO AZUL-VERDE 39 Azul Verde Azul Verde Servidor web Servidor de BD Usuários Roteador Servidor web Servidor de BD Servidor de aplicação Servidor de aplicação
  • 47. IMPLANTAÇÃO AZUL-VERDE 40 Azul Verde Azul Verde Servidor web Servidor de BD Usuários Roteador Servidor web Servidor de BD Servidor de aplicação Servidor de aplicação
  • 48. IMPLANTAÇÃO AZUL-VERDE 41 Azul Verde Azul Verde Servidor web Servidor de BD Usuários Roteador Servidor web Servidor de BD Servidor de aplicação Servidor de aplicação
  • 50. 43 IMPLANTAÇÃO CANÁRIO http://www.thoughtworks.com/insights/blog/implantações-canário
  • 51. IMPLANTAÇÃO CANÁRIO 44 Versão Antiga Nova Versão Servidor web Servidor de aplicação Servidor de BD Servidor web Servidor de aplicação Servidor de BD Todos os usuários Usuários Roteador
  • 52. IMPLANTAÇÃO CANÁRIO 45 Versão Antiga Nova Versão Servidor web Servidor de aplicação Servidor de BD Servidor web Servidor de aplicação Servidor de BD Maior parte dos usuários (95%) Usuários Roteador Alguns usuários (5%)
  • 53. IMPLANTAÇÃO CANÁRIO 46 Versão Antiga Nova Versão Servidor web Servidor de aplicação Servidor de BD Servidor web Servidor de aplicação Servidor de BD Alguns usuários Usuários Roteador (2%) Maior parte dos usuários (98%)
  • 54. IMPLANTAÇÃO CANÁRIO 47 Versão Antiga Nova Versão Servidor web Servidor de aplicação Servidor de BD Servidor web Servidor de aplicação Servidor de BD Usuários Roteador Todos os usuários
  • 55. 48 FEATURE TOGGLES http://martinfowler.com/bliki/FeatureToggle.html https://www.flickr.com/photos/waynewilkinson/6187603535
  • 56. FEATURE TOGGLE 49 share_with_friends = false Configuração: Livro Devops na Prática: Entrega de Software Confiável e Automatizada http://www.devopsnapratica.com.br Google
  • 57. FEATURE TOGGLE 50 share_with_friends = true Configuração: Livro Devops na Prática: Entrega de Software Confiável e Automatizada http://www.devopsnapratica.com.br Google
  • 58. 51 ENTREGA NO ESCURO https://www.flickr.com/photos/dwrose/3967195917
  • 59. ENTREGA NO ESCURO 52 Web Page Title http://facebook.com Google João Backend de Chat Web Page Title http://facebook.com Google Maria
  • 60. ENTREGA NO ESCURO 53 Web Page Title http://facebook.com Google Phasellus nulla risus, semper non dictum semper, congue vitae augue. Nunc vulputate ligula eget neque tempus. Maria disse Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur eget ultrices velit. Suspendisse ut justo elementum felis facilisis aliquam ut sit amet mi. Praesent sit amet venenatis eros. Fusce est João João tellus, congue ac augue in, congue elementum quam. disse Backend de Chat Web Page Title http://facebook.com Google Maria Phasellus nulla risus, semper non dictum semper, congue vitae augue. Nunc vulputate ligula eget neque tempus. Maria disse Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur eget ultrices velit. Suspendisse ut justo elementum felis facilisis aliquam ut sit amet mi. Praesent sit amet venenatis eros. Fusce est João tellus, congue ac augue in, congue elementum quam. disse
  • 61. ENTREGA NO ESCURO 54 Web Page Title http://facebook.com Google Phasellus nulla risus, semper non dictum semper, congue vitae augue. Nunc vulputate ligula eget neque tempus. Maria disse Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur eget ultrices velit. Suspendisse ut justo elementum felis facilisis aliquam ut sit amet mi. Praesent sit amet venenatis eros. Fusce est João João tellus, congue ac augue in, congue elementum quam. disse Backend de Chat Web Page Title http://facebook.com Google Maria Phasellus nulla risus, semper non dictum semper, congue vitae augue. Nunc vulputate ligula eget neque tempus. Maria disse Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur eget ultrices velit. Suspendisse ut justo elementum felis facilisis aliquam ut sit amet mi. Praesent sit amet venenatis eros. Fusce est João tellus, congue ac augue in, congue elementum quam. disse
  • 62. SERVIDORES PHOENIX 55 http://martinfowler.com/bliki/PhoenixServer.html
  • 65. SERVIDORES SNOWFLAKE 58 … … …
  • 66. SERVIDORES SNOWFLAKE 58 … … …
  • 75. SERVIDORES PHOENIX 62 … … …
  • 85. SERVIDORES IMUTÁVEIS 68 ▫︎Imagem como artefato ! ▫︎Container como artefato
  • 86. PRINCÍPIOS PARA ENTREGAS DE BAIXO RISCO 1. Incremental é melhor que “big bang” 2. Implantação != Entrega 3. Foque em entregar lotes pequenos 4. Qualidade deve estar embutida no processo 69
  • 87. PADRÕES DE DEPLOY 1. Automação 2. Pipeline de Entrega 3. Mudança Paralela 4. Implantação Azul-Verde 5. Implantação Canário 6. Feature Toggles 7. Entrega no Escuro 8. Servidores Phoenix 9. Servidores Imutáveis 70
  • 88. 71 MAIS INFORMAÇÕES ▫︎TI de alto desempenho é uma vantagem competitiva ▫︎Práticas de DevOps melhoram o desempenho de TI ▫︎Cultura organizacional é importante ▫︎Satisfação no emprego é o preditor Nº 1 de desempenho organizacional http://puppetlabs.com/2014-devops-report
  • 89. 72 PRÁTICAS CORRELACIONADAS Métricas de vazão Métricas de Estabilidade Freqüência de deploy - Entrega Contínua - Controle de Versões Tempo médio para recuperação - Controle de Versões - Monitoramento da Saúde do Sistema e das Aplicações Tempo de ciclo para mudanças - Controle de Versões - Testes Automatizados Taxa de falhas para mudanças Não apresentou correlação forte com as práticas estudadas
  • 90. MAIS CONTEÚDO ▫︎Kit de Entrega Contínua: ▫︎http://info.thoughtworks.com/entrega-continua-toolkit ▫︎Insights (blogs e artigos) ▫︎Livros ▫︎Slides ▫︎Vídeo 73
  • 92. OBRIGADO! Danilo Sato (@dtsato) dsato@thoughtworks.com 75 www.devopsnapratica.com.br ! #DevopsNaPratica