SlideShare une entreprise Scribd logo
1  sur  64
G e e k N i g h t R e c i f e
PADRÕES DE DEPLOY PARA
DEVOPS E ENTREGA CONTÍNUA
Danilo Sato (@dtsato)
dsato@thoughtworks.com
QUEM SOU EU?
▫︎Desenvolvedor
▫︎Arquiteto
▫︎Coach
▫︎Treinador
▫︎Administrador de Rede
2
@dtsato
3
www.devopsnapratica.com.br
3
www.devopsnapratica.com.br
Desenvolvimento Operações
Eu quero
mudanças
Desenvolvimento Operações
Eu quero
mudanças
Eu quero
estabilidade
Desenvolvimento Operações
Eu quero
mudanças
Eu quero
estabilidade
Desenvolvimento Operações
Desenvolvimento Operações
+
DevOps
UMA HISTÓRIA
COMUM…
“O dia que fizemos o deploy errado”
6
7
Freqüência de
deploy
Quantidade de
mudanças
Risco
Processo
COM UM FINAL
DIFERENTE…
“Problemas difíceis não se resolvem do dia para a noite”
8
9
Freqüência de
deploy
Quantidade de
mudanças
Risco
Processo
DevOps
10
Ideia Em produção
11
Ideia Em produção
Código
Testes
Pacote
Servidores/Am
bientes
Exploração
/Hom
ologação
/Aprovação
Im
plantar
11
Ideia Em produção
Código
Testes
Pacote
Servidores/Am
bientes
Exploração
/Hom
ologação
/Aprovação
Im
plantar
Pipeline de Entrega
12
M
onitoram
entoAlertas
Suporte
Dados/AnálisesFeedback
dosusuários
Insights
Em produção
12
M
onitoram
entoAlertas
Suporte
Dados/AnálisesFeedback
dosusuários
Insights
Em produção Ideia
13
Qualidade
Tempo de Ciclo
Nosso objetivo é tornar o deploy um
“não-evento”
14
PRINCÍPIOS PARA ENTREGAS
DE BAIXO RISCO
1. Incremental é melhor que “big bang”
PRINCÍPIOS PARA ENTREGAS
DE BAIXO RISCO
1. Incremental é melhor que “big bang”
2. Implantação != Entrega
PRINCÍPIOS PARA ENTREGAS
DE BAIXO RISCO
1. Incremental é melhor que “big bang”
2. Implantação != Entrega
3. Foque em entregar lotes pequenos
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
PRINCÍPIOS PARA ENTREGAS
DE BAIXO RISCO
1. Mudança paralela
2. Implantação Azul-Verde
3. Implantação Canário
4. Feature Toggles
5. Entrega no Escuro
PADRÕES DE DEPLOY
MUDANÇA PARALELA
Também conhecida como “Expansão e Contração”
http://www.thoughtworks.com/insights/blog/mudança-paralela
17https://www.flickr.com/photos/telstar/8246798446
1. EXPANSÃO
18
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
19
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
20
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
21
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
22
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
23
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
24
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
25
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);
}
}
IMPLANTAÇÃO
AZUL-VERDE
http://www.thoughtworks.com/insights/blog/implementando-implantacoes-
azul-verde-com-amazon-web-services-aws
26
IMPLANTAÇÃO AZUL-VERDE
27
Azul
Verde
Servidor
web
Servidor de
aplicação
Servidor de
BD
RoteadorUsuários
Servidor
web
Servidor de
aplicação
Servidor de
BD
IMPLANTAÇÃO AZUL-VERDE
28
Azul
Verde
Servidor
web
Servidor de
aplicação
Servidor de
BD
RoteadorUsuários
Servidor
web
Servidor de
aplicação
Servidor de
BD
“Mas e o Banco de Dados?”
29
IMPLANTAÇÃO AZUL-VERDE
30
Azul
Verde
Azul
Verde
Servidor
web
Servidor de
BD
RoteadorUsuários
Servidor
web
Servidor de
BD
Servidor de
aplicação
Servidor de
aplicação
IMPLANTAÇÃO AZUL-VERDE
31
Azul
Verde
Azul
Verde
Servidor
web
Servidor de
BD
RoteadorUsuários
Servidor
web
Servidor de
BD
Servidor de
aplicação
Servidor de
aplicação
IMPLANTAÇÃO AZUL-VERDE
32
Azul
Verde
Azul
Verde
Servidor
web
Servidor de
BD
RoteadorUsuários
Servidor
web
Servidor de
BD
Servidor de
aplicação
Servidor de
aplicação
IMPLANTAÇÃO
CANÁRIO
http://www.thoughtworks.com/insights/blog/implantações-canário
33
IMPLANTAÇÃO CANÁRIO
34
Nova Versão
Versão Antiga
Servidor
web
Servidor de
aplicação
Servidor de
BD
Servidor
web
Servidor de
aplicação
Servidor de
BD
RoteadorUsuários
Todos os
usuários
IMPLANTAÇÃO CANÁRIO
35
Nova Versão
Versão Antiga
Servidor
web
Servidor de
aplicação
Servidor de
BD
Servidor
web
Servidor de
aplicação
Servidor de
BD
RoteadorUsuários
Maior parte dos
usuários
(95%)
Alguns
usuários
(5%)
IMPLANTAÇÃO CANÁRIO
36
Nova Versão
Versão Antiga
Servidor
web
Servidor de
aplicação
Servidor de
BD
Servidor
web
Servidor de
aplicação
Servidor de
BD
Usuários Roteador
Alguns
usuários
(2%)
Maior parte
dos usuários
(98%)
IMPLANTAÇÃO CANÁRIO
37
Nova Versão
Versão Antiga
Servidor
web
Servidor de
aplicação
Servidor de
BD
Servidor
web
Servidor de
aplicação
Servidor de
BD
Usuários
Todos os
usuários
Roteador
FEATURE TOGGLES
38https://www.flickr.com/photos/waynewilkinson/6187603535
FEATURE TOGGLE
39
share_with_friends = false
Googlehttp://www.devopsnapratica.com.br
Livro Devops na Prática: Entrega de Software Confiável e Automatizada
Configuração:
FEATURE TOGGLE
40
share_with_friends = true
Googlehttp://www.devopsnapratica.com.br
Livro Devops na Prática: Entrega de Software Confiável e Automatizada
Configuração:
ENTREGA NO
ESCURO
41https://www.flickr.com/photos/dwrose/3967195917
ENTREGA NO ESCURO
42
Googlehttp://facebook.com
Web Page Title
João
Backend de Chat
Googlehttp://facebook.com
Web Page Title
Maria
ENTREGA NO ESCURO
43
Googlehttp://facebook.com
Web 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.com
Web 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
44
Googlehttp://facebook.com
Web 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.com
Web 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
DEVOPS ALÉM DAS
FERRAMENTAS
DevOps é mais que automação e ferramentas
45
CALMS
46
CALMS
Cultura
46
CALMS
Cultura
Automação
46
CALMS
Cultura
Automação
Lean (pensamento enxuto)
46
CALMS
Cultura
Automação
Lean (pensamento enxuto)
Medição
46
CALMS
Cultura
Automação
Lean (pensamento enxuto)
Medição
Sharing (compartilhamento)
46
47
MAIS CONTEÚDO
▫︎Kit de Entrega Contínua:
▫︎http://info.thoughtworks.com/entrega-continua-toolkit
▫︎Insights (blogs e artigos)
▫︎Livros
▫︎Slides
▫︎Vídeo
PERGUNTAS?
#DevopsNaPratica
48
Danilo Sato (@dtsato)
dsato@thoughtworks.com
OBRIGADO!
www.devopsnapratica.com.br
!
Continue a discussão usando
a hashtag
#DevopsNaPratica

Contenu connexe

Similaire à Padrões de deploy para DevOps e Entrega Contínua

Similaire à Padrões de deploy para DevOps e Entrega Contínua (15)

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, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo SatoPadrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
 
Globosat Play Big Data Cases
Globosat Play Big Data CasesGlobosat Play Big Data Cases
Globosat Play Big Data Cases
 
Controle de versão com Git
Controle de versão com GitControle de versão com Git
Controle de versão com Git
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Encontro Locaweb
Encontro  LocawebEncontro  Locaweb
Encontro Locaweb
 
Encontro Locaweb Curitiba
Encontro  Locaweb CuritibaEncontro  Locaweb Curitiba
Encontro Locaweb Curitiba
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSCDesafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
 
Kero Coco - Kit Template
Kero Coco - Kit TemplateKero Coco - Kit Template
Kero Coco - Kit Template
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com python
 
Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?
 
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
 
Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6
 
Codelab - Actions on Google
Codelab - Actions on GoogleCodelab - Actions on Google
Codelab - Actions on Google
 

Plus de Danilo Sato

Plus de Danilo Sato (11)

Keynote RuPy Natal 2014
Keynote RuPy Natal 2014Keynote RuPy Natal 2014
Keynote RuPy Natal 2014
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia Ágil
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
 
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
 
Estratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-báEstratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-bá
 
Coding Dojo Introduction
Coding Dojo IntroductionCoding Dojo Introduction
Coding Dojo Introduction
 
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
 
Refactoring at Large
Refactoring at LargeRefactoring at Large
Refactoring at Large
 
Refatoração em Larga Escala
Refatoração em Larga EscalaRefatoração em Larga Escala
Refatoração em Larga Escala
 
Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011
 
Lean Lego Game
Lean Lego GameLean Lego Game
Lean Lego Game
 

Padrões de deploy para DevOps e Entrega Contínua