SlideShare a Scribd company logo
1 of 46
Download to read offline
DEV VS. OPS
                        Desenvolvendo para operação



Roberto Gaiser
gaiser@geekbunker.org
@rgaiser


                                                      1
SITUAÇÃO ATUAL
                 2
“SIMPLES E DE FÁCIL MANUTENÇÃO”

                                  3
“ISSO FICA PARA A SEGUNDA ENTREGA”

                                     4
PLANNING
  O começo

             5
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
O QUE FAZER?
               7
COMPONENTES
              8
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
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
LOGS
       11
LOGS

• Logar    tudo

• Log    Driven Development

• Logs   devem ser evidências de teste

• Syslog

• Formato    padrão

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

                                         12
LOGS

• Stack    trace não é log

• Identificador   único de transação

• Vários   níveis de log

• Em    português

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

                                                            13
DEPLOY
         14
DEPLOY

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

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

• Resolverdependê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
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
TESTES
         17
TESTES


• Máquinasde 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
TESTES


• Tempo    de teste

• Testar   o que não funciona

• Testar   com componentes fora do ar

• Quantidade    de requests esperados em produção?



                                                     19
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
SEGURANÇA
            21
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
BANCO DE DADOS
                 23
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
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
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
CONFIGURAÇÕES
                27
CONFIGURAÇÕES

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

• Possibilita   automação

• Possibilita   auditoria

• Possibilita   versionamento

• Flexibilidade   para operação


                                    28
BACKUP
         29
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
FALHAS
         31
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
BALANCEAMENTO DE CARGA
                         33
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
INTERFACE PARA OPERAÇÃO
                          35
INTERFACE PARA OPERAÇÃO


• REST   + JSON

• Ferramenta   CLI

• Limpar   cache

• Reconectar   no banco



                          36
INTERFACE PARA OPERAÇÃO


• Controlar   processamento de fila

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

• Controlar   recebimento de requests

• Controlar   o /status



                                        37
MONITORAÇÃO
              38
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
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
EU NÃO PRECISO SABER...
                          41
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
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
DICAS

• Discos   mentem

• Memória    mente

• Máquinas   falham

• VM’s   mentem mais ainda

• “Diminishing        returns“


                                  44
DICAS


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

• Apagar    incêndio = restart

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



                                                            45
PERGUNTAS?
             46

More Related Content

What's hot

Microserviços - Cristiano dos Santos Diedrich - Tchelinux Bento Gonçalves 2017
Microserviços - Cristiano dos Santos Diedrich - Tchelinux Bento Gonçalves 2017Microserviços - Cristiano dos Santos Diedrich - Tchelinux Bento Gonçalves 2017
Microserviços - Cristiano dos Santos Diedrich - Tchelinux Bento Gonçalves 2017Tchelinux
 
Windows Admin Center
Windows Admin CenterWindows Admin Center
Windows Admin CenterFabio Hara
 
Microsoft windows server 2003
Microsoft windows server 2003Microsoft windows server 2003
Microsoft windows server 2003Sara Freitas
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLFernando Ike
 
Sqlite - Introdução
Sqlite - IntroduçãoSqlite - Introdução
Sqlite - IntroduçãoJoao Johanes
 
Usando Hyper-v 2012 para virtualização do SQL Server
Usando Hyper-v 2012 para virtualização do SQL ServerUsando Hyper-v 2012 para virtualização do SQL Server
Usando Hyper-v 2012 para virtualização do SQL Serverleorsilva
 
VMware Virtual SAN 6: Storage definido por software radicalmente simples
VMware Virtual SAN 6: Storage definido por software radicalmente simplesVMware Virtual SAN 6: Storage definido por software radicalmente simples
VMware Virtual SAN 6: Storage definido por software radicalmente simplesBravo Tecnologia
 
Introdução ao MySQL 5.6
Introdução ao MySQL 5.6Introdução ao MySQL 5.6
Introdução ao MySQL 5.6Wagner Bianchi
 
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)Caio Candido
 
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosBanco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosJoão Helis Bernardo
 
Arquitetando sua aplicação de nova geração com MySQL 5.7
Arquitetando sua aplicação de nova geração com MySQL 5.7Arquitetando sua aplicação de nova geração com MySQL 5.7
Arquitetando sua aplicação de nova geração com MySQL 5.7Mathias Brem
 
Scale out database apps através de galera cluster e maria db
Scale out database apps através de galera cluster e maria dbScale out database apps através de galera cluster e maria db
Scale out database apps através de galera cluster e maria dbFrancisco Gonçalves
 

What's hot (20)

Sql server 2019 big data cluster
Sql server 2019 big data clusterSql server 2019 big data cluster
Sql server 2019 big data cluster
 
Microserviços - Cristiano dos Santos Diedrich - Tchelinux Bento Gonçalves 2017
Microserviços - Cristiano dos Santos Diedrich - Tchelinux Bento Gonçalves 2017Microserviços - Cristiano dos Santos Diedrich - Tchelinux Bento Gonçalves 2017
Microserviços - Cristiano dos Santos Diedrich - Tchelinux Bento Gonçalves 2017
 
VMware Portfolio 2015
VMware Portfolio 2015VMware Portfolio 2015
VMware Portfolio 2015
 
Windows Admin Center
Windows Admin CenterWindows Admin Center
Windows Admin Center
 
2012 - Veris - DBA Career and Oracle Database
2012 - Veris - DBA Career and Oracle Database2012 - Veris - DBA Career and Oracle Database
2012 - Veris - DBA Career and Oracle Database
 
Microsoft windows server 2003
Microsoft windows server 2003Microsoft windows server 2003
Microsoft windows server 2003
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
Flisol 2015
Flisol 2015 Flisol 2015
Flisol 2015
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQL
 
Aws for Developers
Aws for DevelopersAws for Developers
Aws for Developers
 
Sqlite - Introdução
Sqlite - IntroduçãoSqlite - Introdução
Sqlite - Introdução
 
Usando Hyper-v 2012 para virtualização do SQL Server
Usando Hyper-v 2012 para virtualização do SQL ServerUsando Hyper-v 2012 para virtualização do SQL Server
Usando Hyper-v 2012 para virtualização do SQL Server
 
VMware Virtual SAN 6: Storage definido por software radicalmente simples
VMware Virtual SAN 6: Storage definido por software radicalmente simplesVMware Virtual SAN 6: Storage definido por software radicalmente simples
VMware Virtual SAN 6: Storage definido por software radicalmente simples
 
Introdução ao MySQL 5.6
Introdução ao MySQL 5.6Introdução ao MySQL 5.6
Introdução ao MySQL 5.6
 
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
 
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosBanco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
 
Meetup Everis Cassandra
Meetup Everis CassandraMeetup Everis Cassandra
Meetup Everis Cassandra
 
Redis
RedisRedis
Redis
 
Arquitetando sua aplicação de nova geração com MySQL 5.7
Arquitetando sua aplicação de nova geração com MySQL 5.7Arquitetando sua aplicação de nova geração com MySQL 5.7
Arquitetando sua aplicação de nova geração com MySQL 5.7
 
Scale out database apps através de galera cluster e maria db
Scale out database apps através de galera cluster e maria dbScale out database apps através de galera cluster e maria db
Scale out database apps através de galera cluster e maria db
 

Viewers also liked

Evolving Team Structure in DevOps
Evolving Team Structure in DevOpsEvolving Team Structure in DevOps
Evolving Team Structure in DevOpsSherry Chang
 
Building a DevOps organization
Building a DevOps organizationBuilding a DevOps organization
Building a DevOps organizationZinnov
 
DevOps Patterns - Team Topologies
DevOps Patterns -  Team TopologiesDevOps Patterns -  Team Topologies
DevOps Patterns - Team TopologiesMatthew Skelton
 
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at FlickrJohn Allspaw
 

Viewers also liked (7)

Software Instability
Software InstabilitySoftware Instability
Software Instability
 
Agile or Fragile
Agile or FragileAgile or Fragile
Agile or Fragile
 
Itil for failers
Itil for failersItil for failers
Itil for failers
 
Evolving Team Structure in DevOps
Evolving Team Structure in DevOpsEvolving Team Structure in DevOps
Evolving Team Structure in DevOps
 
Building a DevOps organization
Building a DevOps organizationBuilding a DevOps organization
Building a DevOps organization
 
DevOps Patterns - Team Topologies
DevOps Patterns -  Team TopologiesDevOps Patterns -  Team Topologies
DevOps Patterns - Team Topologies
 
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
 

Similar to Dev vs. Ops

Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com HudsonLuis Reis
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpCampus Party Brasil
 
Load Testing com VisualStudio + Azure
Load Testing com VisualStudio + AzureLoad Testing com VisualStudio + Azure
Load Testing com VisualStudio + AzureBruno Nunes Trassante
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisJefferson Martins de Andrade
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsRafael Salerno de Oliveira
 
SNMP - Rafael Rodriques
SNMP - Rafael RodriquesSNMP - Rafael Rodriques
SNMP - Rafael Rodriquesmarleigrolli
 
Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Fabio Vieira Mello
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDenis Vieira
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosAlex Hübner
 
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...tdc-globalcode
 
2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA Career2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA CareerMarcus Vinicius Miguel Pedro
 
O caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendlyO caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendlyRicardo Faria
 
História dos Sistemas - Por que estamos fazendo desse jeito
História dos Sistemas - Por que estamos fazendo desse jeitoHistória dos Sistemas - Por que estamos fazendo desse jeito
História dos Sistemas - Por que estamos fazendo desse jeitoLeo Lorieri
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Douglas Fischer
 

Similar to Dev vs. Ops (20)

Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com Hudson
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
 
Load Testing com VisualStudio + Azure
Load Testing com VisualStudio + AzureLoad Testing com VisualStudio + Azure
Load Testing com VisualStudio + Azure
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | Florianópolis
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Automatizando Nmap com NSE
Automatizando Nmap com NSEAutomatizando Nmap com NSE
Automatizando Nmap com NSE
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
 
SNMP - Rafael Rodriques
SNMP - Rafael RodriquesSNMP - Rafael Rodriques
SNMP - Rafael Rodriques
 
Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full Javascript
 
Internet sem drama
Internet sem dramaInternet sem drama
Internet sem drama
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
 
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
 
2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA Career2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA Career
 
O caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendlyO caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendly
 
História dos Sistemas - Por que estamos fazendo desse jeito
História dos Sistemas - Por que estamos fazendo desse jeitoHistória dos Sistemas - Por que estamos fazendo desse jeito
História dos Sistemas - Por que estamos fazendo desse jeito
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
 

Dev vs. Ops

  • 1. DEV VS. OPS Desenvolvendo para operação Roberto Gaiser gaiser@geekbunker.org @rgaiser 1
  • 3. “SIMPLES E DE FÁCIL MANUTENÇÃO” 3
  • 4. “ISSO FICA PARA A SEGUNDA ENTREGA” 4
  • 5. PLANNING O começo 5
  • 6. 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
  • 9. 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
  • 10. 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
  • 11. LOGS 11
  • 12. LOGS • Logar tudo • Log Driven Development • Logs devem ser evidências de teste • Syslog • Formato padrão • “Vou olhar no código...” 12
  • 13. LOGS • Stack trace não é log • Identificador único de transação • Vários níveis de log • Em português • Logdeve de ser parte do desenvolvimento, não algo a ser acrescentado depois 13
  • 14. DEPLOY 14
  • 15. DEPLOY • “É só pegar do <...> e jogar lá” • Aplicação deve ser construída pensando no deploy • Resolverdependê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
  • 16. 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
  • 17. TESTES 17
  • 18. TESTES • Máquinasde 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
  • 19. TESTES • Tempo de teste • Testar o que não funciona • Testar com componentes fora do ar • Quantidade de requests esperados em produção? 19
  • 20. 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
  • 22. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 28. CONFIGURAÇÕES • Fora do jar, war, egg, gem... • Possibilita automação • Possibilita auditoria • Possibilita versionamento • Flexibilidade para operação 28
  • 29. BACKUP 29
  • 30. 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
  • 31. FALHAS 31
  • 32. 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
  • 34. 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
  • 36. INTERFACE PARA OPERAÇÃO • REST + JSON • Ferramenta CLI • Limpar cache • Reconectar no banco 36
  • 37. INTERFACE PARA OPERAÇÃO • Controlar processamento de fila • Colocar aplicação em “read-only” • Controlar recebimento de requests • Controlar o /status 37
  • 39. 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
  • 40. 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
  • 41. EU NÃO PRECISO SABER... 41
  • 42. 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
  • 43. 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
  • 44. DICAS • Discos mentem • Memória mente • Máquinas falham • VM’s mentem mais ainda • “Diminishing returns“ 44
  • 45. DICAS • Gerar logs se a aplicação permitir, antes do restart • Apagar incêndio = restart simples: ping, date, route, dig e df identificam a • Testes maior parte dos problemas 45