dev vs. ops

46
DEV VS. OPS Desenvolvendo para operação Roberto Gaiser [email protected] @rgaiser 1

Post on 22-Oct-2014

2.686 views

Category:

Technology


2 download

DESCRIPTION

Tech Talk IG - Dez/2010 R7 - Jan/2011

TRANSCRIPT

Page 1: Dev vs. Ops

DEV VS. OPSDesenvolvendo para operação

Roberto [email protected]@rgaiser

1

Page 2: Dev vs. Ops

SITUAÇÃO ATUAL

2

Page 3: Dev vs. Ops

“SIMPLES E DE FÁCIL MANUTENÇÃO”

3

Page 4: Dev vs. Ops

“ISSO FICA PARA A SEGUNDA ENTREGA”

4

Page 5: Dev vs. Ops

PLANNINGO começo

5

Page 6: Dev vs. Ops

O COMEÇO

• “É fácil, está pronto na minha maquina”

• “Só fazer um serviço que responde <...>”

• “Colocamos tudo junto para facilitar”

• “Isso fica para a segunda entrega”

• “Depois a gente arruma”

• “Criamos uma <...> a mais no banco”

6

Page 7: Dev vs. Ops

O QUE FAZER?

7

Page 8: Dev vs. Ops

COMPONENTES

8

Page 9: Dev vs. Ops

COMPONENTES

• “Um sistema é um sistema, outro sistema é outro sistema”

• Automação para criar o ambiente

• Ferramentas/Linguagens mais produtivas

• Isolar problemas e tornar serviços assíncronos

9

Page 10: Dev vs. Ops

COMPONENTES

• Benefícios a longo prazo

• Flexibilidade para operação na alocação de recursos

• “code outlives its [developers] intentions”

• “All software is permanent”

10

Page 11: Dev vs. Ops

LOGS

11

Page 12: Dev vs. Ops

LOGS

• Logar tudo

• Log Driven Development

• Logs devem ser evidências de teste

• Syslog

• Formato padrão

• “Vou olhar no código...”

12

Page 13: Dev vs. Ops

LOGS

• Stack trace não é log

• Identificador único de transação

• Vários níveis de log

• Em português

• Log deve de ser parte do desenvolvimento, não algo a ser acrescentado depois

13

Page 14: Dev vs. Ops

DEPLOY

14

Page 15: Dev vs. Ops

DEPLOY

• “É só pegar do <...> e jogar lá”

• Aplicação deve ser construída pensando no deploy

• Resolver dependências/requisitos sem criar conflitos com o repositório da distribuição

• Scripts de inicialização, rotacionar logs, etc

• Servidores de produção não tem acesso a internet

15

Page 16: Dev vs. Ops

DEPLOY

• Evitar permissões incorretas

• Evitar arquivos em caminhos errados

• Evitar pacotes/arquivos desnecessários em produção

• Evitar versões diferentes dos mesmos módulos em caminhos diferentes

• Criar pacotes

16

Page 17: Dev vs. Ops

TESTES

17

Page 18: Dev vs. Ops

TESTES

•Máquinas de homologação e desenvolvimento na monitoração

• Usar gráficos de monitoração como evidência de teste

•Documentar para que outros possam reproduzir seu resultado

18

Page 19: Dev vs. Ops

TESTES

• Tempo de teste

• Testar o que não funciona

• Testar com componentes fora do ar

•Quantidade de requests esperados em produção?

19

Page 20: Dev vs. Ops

TESTES

• TCPDump

•Número de requests X Requests simultâneos

• Evidências de teste

•Métricas úteis, ex: tempo de resposta ao invés de CPU Idle

20

Page 21: Dev vs. Ops

SEGURANÇA

21

Page 22: Dev vs. Ops

SEGURANÇA

• Nunca rodar como ROOT

• Nunca colocar no sistema de versionamento informações como: credencias de acesso, logins, senhas, API Keys, etc

• Separação em componentes = Liberdade para Operação utilizar redes distintas

• Logs de auditoria, se necessários

• Regra de Apache != ACL

22

Page 23: Dev vs. Ops

BANCO DE DADOS

23

Page 24: Dev vs. Ops

BANCO DE DADOS

• Utilizar da melhor forma possível, não porque “é mais fácil”

• Separar leitura e escrita

• Utilizar o banco relacional para o que ele faz melhor: integridade e transação

• Envolver AD no projeto

• Stored procedure?

24

Page 25: Dev vs. Ops

BANCO DE DADOS

• Usar ORM para tudo? (Black Magic)

•Otimizar query. Se o ORM não permitir... você está fazendo errado!

• Sua aplicação deve se adaptar ao modelo de dados

• Índices

• Atenção com colunas “auto increment” + replicação do MySQL

25

Page 26: Dev vs. Ops

BANCO DE DADOS

• Alternar automaticamente para um banco de Stand-by

• Reconectar automaticamente

• Usar filas, o banco falha!

• Cache e Replicação: “The good, the bad and the ugly”

• “Architectural anti-patterns for data handling” - http://www.slideshare.net/gleicon

26

Page 27: Dev vs. Ops

CONFIGURAÇÕES

27

Page 28: Dev vs. Ops

CONFIGURAÇÕES

• Fora do jar, war, egg, gem...

• Possibilita automação

• Possibilita auditoria

• Possibilita versionamento

• Flexibilidade para operação

28

Page 29: Dev vs. Ops

BACKUP

29

Page 30: Dev vs. Ops

BACKUP

• “Minha aplicação precisa de backup”

•Qual a finalidade? Desastre? Restaurar um único registro?

• Teste de restore

• Segurança

• Tempo de retenção e vida útil da mídia

• dump/restore dentro da aplicação

30

Page 31: Dev vs. Ops

FALHAS

31

Page 32: Dev vs. Ops

FALHAS

• Falha elegante e rápida

• Apresentar menos funcionalidade ao invés de “Erro 500”

• Recuperação automática

• Conectar em múltiplos backend

•Distribuir carga

32

Page 33: Dev vs. Ops

BALANCEAMENTO DE CARGA

33

Page 34: Dev vs. Ops

BALANCEAMENTO DE CARGA

• Aplicações que respondam ao teste do SLB

• /status => 200

• Possibilita testar uma máquina sem que ela esteja ativa para o SLB

• Entender os algoritmos disponíveis

34

Page 35: Dev vs. Ops

INTERFACE PARA OPERAÇÃO

35

Page 36: Dev vs. Ops

INTERFACE PARA OPERAÇÃO

• REST + JSON

• Ferramenta CLI

• Limpar cache

• Reconectar no banco

36

Page 37: Dev vs. Ops

INTERFACE PARA OPERAÇÃO

• Controlar processamento de fila

• Colocar aplicação em “read-only”

• Controlar recebimento de requests

• Controlar o /status

37

Page 38: Dev vs. Ops

MONITORAÇÃO

38

Page 39: Dev vs. Ops

MONITORAÇÃO

• REST + JSON

• Ferramenta CLI

• Versão da aplicação e das dependências

• Conexões com backend, banco, cache, uptime, etc

• /monit

39

Page 40: Dev vs. Ops

MONITORAÇÃO

• Usuários ativos

•Operações com erro, sucesso, etc

• Tempo das operações: média e desvio padrão

• Tipos de requisição: get, post, etc

•Número de itens na fila, tempo de processamento, etc

40

Page 41: Dev vs. Ops

EU NÃO PRECISO SABER...

41

Page 42: Dev vs. Ops

VOCÊ PRECISA SABER QUE:

• Existe um sistema operacional embaixo do software

• Existe rede e storage fora do software

• “System” e similares somente em situações extremas ou de licença

• “Eu programo em <...>, roda em qualquer coisa”

•Memória, processamento e disco são recursos finitos

42

Page 43: Dev vs. Ops

DICAS

• “Bringing a knife to a gunfight”

• Você define os requisitos

• “Quando você só tem martelo, tudo é prego”

• Framework?

•O universo conspira contra você

43

Page 44: Dev vs. Ops

DICAS

•Discos mentem

•Memória mente

•Máquinas falham

• VM’s mentem mais ainda

• “Diminishing returns“

44

Page 45: Dev vs. Ops

DICAS

• Gerar logs se a aplicação permitir, antes do restart

• Apagar incêndio = restart

• Testes simples: ping, date, route, dig e df identificam a maior parte dos problemas

45

Page 46: Dev vs. Ops

PERGUNTAS?

46