Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
-
Upload
thoughtworks -
Category
Technology
-
view
194 -
download
4
description
Transcript of Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
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 r e
PADRÕES DE DEPLOY PARA DEVOPS E ENTREGA CONTÍNUA
Danilo Sato (@dtsato) [email protected]
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
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
ProcessoDevOps
Nosso objetivo é tornar o deploy um “não-evento”
12
AUTOMAÇÃO
13https://www.flickr.com/photos/sushithegreat/2139611429
14
Ideia Em produção
15
Ideia Em produção
Código
Testes
Pacote
Servi
dores /
Ambien
tes
Explor
ação /
Hom
ologa
ção /
Aprov
ação
Implantar
15
Ideia Em produção
Código
Testes
Pacote
Servi
dores /
Ambien
tes
Explor
ação /
Hom
ologa
ção /
Aprov
açã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
feedbackF
P
commit
P
P
aprovação
PIPELINE DE ENTREGA
18
Service B
Service C
App A
UnitTests
Version Control
ArtifactRepository
IntegrationTests
UnitTests
IntegrationTests
UnitTests
IntegrationTests
ContractTests
ContractTests
Deploy to Dev Smoke
Deploy toIntApplication
Testing Smoke
App E
Service F
Service D
UnitTests
IntegrationTests
UnitTests
IntegrationTests
UnitTests
IntegrationTests
ContractTests
Deploy to Dev Smoke
ApplicationTesting
ContractTests
Deploy to Dev Smoke
Deploy toInt Smoke
Deploy toInt
End to End Testing
Dev Environment
Deploy toQA Smoke
Performance Testing UAT
Integration Environment
QA Environment
Deploy toProduction Smoke
COTS
Production Environment
Deploy toInt
(...)
(…)
19
Monito
ramento
Alerta
s
Suport
e
Dados / A
nálises
Feed
back dos
usuário
s
Insights
Em produção
19
Monito
ramento
Alerta
s
Suport
e
Dados / A
nálises
Feed
back dos
usuário
s
Insights
Em produção Ideia
20
Qualidade
Tempo de Ciclo
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
23https://www.flickr.com/photos/thesurlefilariane/15131360085
IMPLANTAÇÃO != ENTREGA
23https://www.flickr.com/photos/thesurlefilariane/15131360085https://www.flickr.com/photos/thesurlefilariane/14944787618
FOQUE EM ENTREGAR LOTES PEQUENOS
24
vs.
https://www.flickr.com/photos/pelosi/2836152295 https://www.flickr.com/photos/55391407@N03/5137410738
FOQUE EM ENTREGAR LOTES PEQUENOS
24
MTBFMean Time Between Failure
MTTRMean Time To Recover
vs.
https://www.flickr.com/photos/pelosi/2836152295 https://www.flickr.com/photos/55391407@N03/5137410738
FOQUE EM ENTREGAR LOTES PEQUENOS
24
MTBFMean Time Between Failure
MTTRMean Time To Recover
vs.
https://www.flickr.com/photos/pelosi/2836152295 https://www.flickr.com/photos/55391407@N03/5137410738
25https://www.flickr.com/photos/edgarallanbro/7197914274
QUALIDADE DEVE ESTAR EMBUTIDA NO PROCESSO
26
MUDANÇA PARALELATambé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ãoAntiga
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ãoAntiga
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-VERDEhttp://www.thoughtworks.com/insights/blog/implementando-implantacoes-azul-verde-com-amazon-web-services-aws
IMPLANTAÇÃO AZUL-VERDE
36
Azul
Verde
Servidorweb
Servidor deaplicação
Servidor deBD
RoteadorUsuários
Servidorweb
Servidor deaplicação
Servidor deBD
IMPLANTAÇÃO AZUL-VERDE
37
Azul
Verde
Servidorweb
Servidor deaplicação
Servidor deBD
RoteadorUsuários
Servidorweb
Servidor deaplicação
Servidor deBD
“Mas e o Banco de Dados?”
38
IMPLANTAÇÃO AZUL-VERDE
39
Azul
Verde
Azul
Verde
Servidorweb
Servidor deBD
RoteadorUsuários
Servidorweb
Servidor deBD
Servidor deaplicação
Servidor deaplicação
IMPLANTAÇÃO AZUL-VERDE
40
Azul
Verde
Azul
Verde
Servidorweb
Servidor deBD
RoteadorUsuários
Servidorweb
Servidor deBD
Servidor deaplicação
Servidor deaplicação
IMPLANTAÇÃO AZUL-VERDE
41
Azul
Verde
Azul
Verde
Servidorweb
Servidor deBD
RoteadorUsuários
Servidorweb
Servidor deBD
Servidor deaplicação
Servidor deaplicação
42https://speakerdeck.com/mavcunha/releases-sem-interrupcoes
43
IMPLANTAÇÃO CANÁRIOhttp://www.thoughtworks.com/insights/blog/implantações-canário
IMPLANTAÇÃO CANÁRIO
44
Nova Versão
Versão Antiga
Servidorweb
Servidor deaplicação
Servidor deBD
Servidorweb
Servidor deaplicação
Servidor deBD
RoteadorUsuários
Todos osusuários
IMPLANTAÇÃO CANÁRIO
45
Nova Versão
Versão Antiga
Servidorweb
Servidor deaplicação
Servidor deBD
Servidorweb
Servidor deaplicação
Servidor deBD
RoteadorUsuários
Maior parte dosusuários(95%)
Algunsusuários
(5%)
IMPLANTAÇÃO CANÁRIO
46
Nova Versão
Versão Antiga
Servidorweb
Servidor de aplicação
Servidor de BD
Servidor web
Servidor de aplicação
Servidor de BD
Usuários Roteador
Algunsusuários
(2%)
Maior partedos usuários
(98%)
IMPLANTAÇÃO CANÁRIO
47
Nova Versão
Versão Antiga
Servidorweb
Servidor deaplicação
Servidor deBD
Servidorweb
Servidor deaplicação
Servidor deBD
Usuários
Todos osusuários
Roteador
48
FEATURE TOGGLEShttp://martinfowler.com/bliki/FeatureToggle.html
https://www.flickr.com/photos/waynewilkinson/6187603535
FEATURE TOGGLE
49
share_with_friends = false
Googlehttp://www.devopsnapratica.com.brLivro Devops na Prática: Entrega de Software Confiável e Automatizada
Configuração:
FEATURE TOGGLE
50
share_with_friends = true
Googlehttp://www.devopsnapratica.com.brLivro Devops na Prática: Entrega de Software Confiável e Automatizada
Configuração:
51
ENTREGA NO ESCURO
https://www.flickr.com/photos/dwrose/3967195917
ENTREGA NO ESCURO
52
Googlehttp://facebook.comWeb Page Title
João
Backend de Chat
Googlehttp://facebook.comWeb Page Title
Maria
ENTREGA NO ESCURO
53
Googlehttp://facebook.comWeb Page Title
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 tellus, congue ac augue in, congue elementum quam. João
disse
João
Backend de Chat
Googlehttp://facebook.comWeb Page Title
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 tellus, congue ac augue in, congue elementum quam. João
disse
Maria
ENTREGA NO ESCURO
54
Googlehttp://facebook.comWeb Page Title
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 tellus, congue ac augue in, congue elementum quam. João
disse
João
Backend de Chat
Googlehttp://facebook.comWeb Page Title
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 tellus, congue ac augue in, congue elementum quam. João
disse
Maria
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ÁVEIShttp://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
1. Incremental é melhor que “big bang”
2. Implantação != Entrega
3. Foque em entregar lotes pequenos
4. Qualidade deve estar embutida no
processo
PRINCÍPIOS PARA ENTREGAS DE BAIXO RISCO
69
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
PADRÕES DE DEPLOY
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
73
MAIS CONTEÚDO
▫︎ Kit de Entrega Contínua:
▫︎ http://info.thoughtworks.com/entrega-continua-toolkit
▫︎ Insights (blogs e artigos)
▫︎ Livros
▫︎ Slides
▫︎ Vídeo
PERGUNTAS?
74
#DevopsNaPratica