Nunca fora do ar: como manter uma aplicação sempre disponível com Continuous Delivery

Preview:

DESCRIPTION

Palestra ministrada no Agile Vale 2013 sobre entrega continua, ou continuous delivery.

Citation preview

Giovanni Bassigiovanni@lambda3.com.br

@giovannibassi

Nunca fora do arComo manter uma aplicação sempre disponível com Continuous Delivery

Escalador, ciclista, pai Lambda3 Programador (a.k.a não gerente)

C#, Ruby, Node, Coffeescript, Powershell, Bash... OO, Funcional, Estática, Dinâmica... Linux, Windows Desktop, web, mobile, game...

Fundou o .NET Architects Tecnoretórica, blog, palestras, artigos, MVP… Trouxe a Scrum.org pro Brasil Gosta de “humanas” (gestão, coaching, psicologia...)

@GiovanniBassi

Tenha cuidado, posso ser eu na sua

frente

http://bit.ly/lambda3democracia

Uma empresa democrática• Sem gerentes ou estrutura hierárquica• Livros abertos• Decisões por consenso• 100% ágil

Continuous Delivery

Primeiro princípio do manifesto ágil“Nossa maior prioridade é satisfazer o cliente através da entrega contínua (continuous delivery) e adiantada de software com valor agregado.”

http://agilemanifesto.org/principles.html

Continuous Delivery

Software sempre pronto para ir para produção

Todo commit pode ir para produção sem interferência do desenvolvedor

Decisão de ir pra produção vem do negócio, não de TI

Continuous Deployment

Não é Continuous Delivery

É ir para produção a cada commit que passar nos critérios de publicação

Continuous Deployment demanda Continuous Delivery

Como fazer?Testes automatizadosIntegração contínua (build server, fast build, etc)Branches de vida curtaFeature togglesOne click deployment/rollbackBinaries RepositoryDeployment pipelineSempre produzindo código pronto para produção

Build

Um build por push (ou commit)Testes rápidos rodamAnálises de código rodamScripts de deployment geradosDados de testes preparadosRepositório de binários recebe o resultado do build, dos script e dos dados

Feature Toggles

Funcionalidade presente no código mas ainda não finalizada fica desabilitada e pode ir para produçãoPode substituir o uso de branchesMais complexo de escrever e testarPode ser feito facilmente “escondendo” uma funcionalidadeEm alguns cenários não é possível usar

Feature branches, do or do not?

Sem resposta simples, idealmente eviteSe existir, sempre de vida curtaUse pull requestsDevem ser vistos como “ambientes de staging privados”

* branches de ambiente (staging, UAT) são ok

Releasing

Os resultados da compilação progridem de ambiente para ambiente dentro do deployment pipeline

Os resultados do build são usados durante todo o processo, nunca o build é refeito

Ambientes idealmente são sempre criados do zero

Deployment Pipeline

Deployment Pipeline

Ambiente mais parecido com produção

Esse commit vai para produção a qualquer momento sem meu

envolvimento

Mindset

Nunca fora do ar: green blue deployment

Green blue deployments: nunca fora do arCada deploy sobe um ambiente completamente novoO ambiente antigo continua no arO novo ambiente tem outro endereçoTestes são feitos no novo endereçoSe tudo estiver ok, vire o interruptor e desligue o ambiente antigoSuportado pelos principais provedores de cloud (AWS e Azure)

Aplicando green blue deployment

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Banco de dados verde

MinhaEmpresa.com.br

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Web server azul

Banco de dados verde

Banco de dados azul

MinhaEmpresa.com.br

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Web server azul

Banco de dados verde

Banco de dados azul

MinhaEmpresa.com.br

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server azul

Banco de dados azul

MinhaEmpresa.com.br

Green blue deployment: testando

em produção

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Banco de dados verde

MinhaEmpresa.com.br

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Web server azul

Banco de dados verde

Banco de dados azul

MinhaEmpresa.com.br

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Web server azul

Banco de dados verde

Banco de dados azul

MinhaEmpresa.com.br

90%

10%

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Web server azul

Banco de dados verde

Banco de dados azul

MinhaEmpresa.com.br

90%

10%

Logs

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Web server azul

Banco de dados verde

Banco de dados azul

MinhaEmpresa.com.br

50%

50%

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Web server azul

Banco de dados verde

Banco de dados azul

MinhaEmpresa.com.br

50%

50%

Logs

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server verde

Web server azul

Banco de dados verde

Banco de dados azul

MinhaEmpresa.com.br

Servidor banco de dados

Servidor web

Green blue deployment

Roteador

Web server azul

Banco de dados azul

MinhaEmpresa.com.br

Giovanni Bassigiovanni@lambda3.com.br

@giovannibassi

Dúvidas?

Giovanni Bassigiovanni@lambda3.com.br

@giovannibassi

Obrigado!

www.lambda3.com.br

Recommended