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

Post on 02-Dec-2014

194 views 4 download

description

Práticas de DevOps e Entrega Contínua ajudam a aumentar a frequência de deploys na sua empresa, ao mesmo tempo aumentando a estabilidade e robustez do sistema em produção. Com o foco em automação, é possível realizar diversos deploys por dia, porém é comum encontrar resistência do time de operações quando você tenta colocar isso em prática. Nesta palestra iremos apresentar alguns padrões de deploy que irão te ajudar a diminuir o risco ao implantar novas versões de seus sistemas e aplicativos em produção e discutiremos como estreitar a colaboração entre as equipes de desenvolvimento e de operações para implantar DevOps na sua empresa.

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) 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

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

Danilo Sato (@dtsato) dsato@thoughtworks.com

OBRIGADO!

75

www.devopsnapratica.com.br !

#DevopsNaPratica