Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Defensive Software Delivery

Defensive Software Delivery

Uma pequena lista de práticas e processos para evitar bugs em produção.

Nesta apresentação eu mostro alguns processos de desenvolvimento e padrões arquiteturais para entregarmos software de forma mais defensiva. Além disso, dedico os últimos slides a falar de cronjobs, que é uma font de bugs se não pensarmos em todo o fluxo de dados.

6dbafc7a4ba86959b02c97995bf7be70?s=128

Victor Martinez

December 28, 2021
Tweet

More Decks by Victor Martinez

Other Decks in Technology

Transcript

  1. Defensive Software Delivery Práticas para evitar bugs em produção Victor

    Martinez Photo by Clay Banks on Unsplash
  2. 2 POR QUE ?

  3. 3 Mar calmo nunca fez bom marinheiro,

  4. 4 Mar calmo nunca fez bom marinheiro, mas experimente colocar

    um bug sério em produção
  5. 5 Mar calmo nunca fez bom marinheiro, mas experimente colocar

    um bug sério em produção para perceber
  6. 6 Mar calmo nunca fez bom marinheiro, mas experimente colocar

    um bug sério em produção para perceber como é bom andar de pedalinho na lagoa. - Martinez, Victor (2020)
  7. Victor Martinez Dev @ Magalu vcrmartinez@gmail.com vcrmartinez.com vcrmartinez 7 Mestrando

    em Sistemas de Recomendação (UFBA)
  8. APRENDIZADOS PESSOAIS DE COMO EVITAR PROBLEMAS EM PRODUÇÃO Victor Martinez

    Photo by Clay Banks on Unsplash
  9. 9 ! ESTA APRESENTAÇÃO TEM UM VIÉS PROVOCATIVO, PESSOAL E

    OPINATIVO.
  10. 10 ALGUNS PROBLEMAS EM PROJETOS DE SOFTWARE PROCESSOS FALHOS FALTA

    DE CONTEXTO COBERTURA DE TESTES DEPENDÊNCIAS EXTERNAS PRAZO CÓDIGO … ESCOPO
  11. AMBIENTE & CÓDIGO & ARQUITETURA & CRONJOBS & PERFIS DE

    PROGRAMADOR & LET’S GO!
  12. 12 AMBIENTE DE DESENVOLVIMENTO Photo by Dan Burton on Unsplash

  13. 13 QUAIS SÃO AS SUAS PRÁTICAS DE ENTREGA? Photo by

    Dan Burton on Unsplash AMBIENTE DE DESENVOLVIMENTO
  14. 14 1AMBIENTE DE STAGING & PRODUÇÃO

  15. 15 2ROLLBACK FÁCIL

  16. 16 3TIMING DIFERENTE DE ENTREGA

  17. 17 4TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE

    TESTE TESTE TESTE TESTE TESTE TESTE
  18. 18 4TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE

    TESTE TESTE TESTE TESTE TESTE TESTE UNITÁRIOS INTEGRAÇÃO COMPORTAMENTO
  19. 19 5PULL REQUESTS PADRONIZADOS

  20. 20 5

  21. 21 6CODE REVIEW https://google.github.io/eng-practices/ review/

  22. 22 6CODE REVIEW DEFINA UM LINTER / FORMATTER / STYLE

    GUIDE
  23. 23 6CODE REVIEW DEFINA UM LINTER / FORMATTER / STYLE

    GUIDE ARGUMENTAÇÃO TÉCNICA
  24. 24 6CODE REVIEW DEFINA UM LINTER / FORMATTER / STYLE

    GUIDE ARGUMENTAÇÃO TÉCNICA DESIGN
  25. 25 6CODE REVIEW DEFINA UM LINTER / FORMATTER / STYLE

    GUIDE ARGUMENTAÇÃO TÉCNICA DESIGN COMPLEXIDADE
  26. 26 6CODE REVIEW DEFINA UM LINTER / FORMATTER / STYLE

    GUIDE ARGUMENTAÇÃO TÉCNICA DESIGN COMPLEXIDADE NOMENCLATURA
  27. 27 6CODE REVIEW DEFINA UM LINTER / FORMATTER / STYLE

    GUIDE ARGUMENTAÇÃO TÉCNICA DESIGN COMPLEXIDADE NOMENCLATURA FUNCIONALIDADE
  28. 28 6CODE REVIEW DEFINA UM LINTER / FORMATTER / STYLE

    GUIDE ARGUMENTAÇÃO TÉCNICA DESIGN COMPLEXIDADE NOMENCLATURA FUNCIONALIDADE COMENTÁRIOS E DOCUMENTAÇÃO
  29. 29 6CODE REVIEW DEFINA UM LINTER / FORMATTER / STYLE

    GUIDE ARGUMENTAÇÃO TÉCNICA DESIGN COMPLEXIDADE NOMENCLATURA FUNCIONALIDADE COMENTÁRIOS E DOCUMENTAÇÃO TESTES
  30. 30 7CRITÉRIOS DE ACEITAÇÃO

  31. 31 8TESTES EM DUPLA

  32. 32 9PAIR PROGRAMMING

  33. 33 10FEATURE FLAG <3

  34. 34 11DEPLOY? - HORÁRIO - COMUNICAÇÃO - MONITORAMENTO

  35. 35 12CUIDADO COM MIGRAÇÃO DE BD.

  36. 36 CÓDIGO & ARQUITETURA Photo by Chris Ried on Unsplash

  37. 37 https://en.wikipedia.org/wiki/Defensive_programming CÓDIGO & ARQUITETURA Making the source code comprehensible

    – the source code should be readable and understandable so it is approved in a code audit. General quality – reducing the number of software bugs and problems. Making the software behave in a predictable manner despite unexpected inputs or user actions. UM POUCO DE PROGRAMAÇÃO DEFENSIVA & ARQUITETURA
  38. 38 PROGRAMAÇÃO DEFENSIVA É UM NOME BONITO PARA O FAMOSO

    “E SE …?”
  39. 39 ARQUITETURA DEFENSIVA https://martinfowler.com/bliki/CircuitBreaker.html CIRCUIT-BREAKER

  40. 40 https://martinfowler.com/bliki/CircuitBreaker.html CIRCUIT-BREAKER • Quando as falhas alcançam um limiar

    o circuito abre e as chamadas subsequentes não são efetuadas. • • ARQUITETURA DEFENSIVA
  41. 41 https://martinfowler.com/bliki/CircuitBreaker.html CIRCUIT-BREAKER • Quando as falhas alcançam um limiar

    o circuito abre e as chamadas subsequentes não são efetuadas. • Protege contra uma gama de erros (e.g. conexão de rede). • ARQUITETURA DEFENSIVA
  42. 42 https://martinfowler.com/bliki/CircuitBreaker.html CIRCUIT-BREAKER • Quando as falhas alcançam um limiar

    o circuito abre e as chamadas subsequentes não são efetuadas. • Protege contra uma gama de erros (e.g. conexão de rede). • Nem todos os erros devem ser tratados pelo CB. ARQUITETURA DEFENSIVA
  43. 43 • Você precisa que terceiros integrem com a sua

    API. PROXY API ARQUITETURA DEFENSIVA
  44. 44 • Você precisa que terceiros integrem com a sua

    API. THIRD-PARTY 1 API SERVICE SISTEMA EVENTO PROXY API ARQUITETURA DEFENSIVA
  45. 45 • Você precisa que terceiros integrem com a sua

    API. API THIRD-PARTY 1 SERVICE SISTEMA THIRD-PARTY 2 PROXY API ARQUITETURA DEFENSIVA
  46. 46 • Você precisa que terceiros integrem com a sua

    API. API THIRD-PARTY 1 SERVICE SISTEMA THIRD-PARTY 2 MUDANÇAS PROXY API ARQUITETURA DEFENSIVA
  47. 47 • Você precisa que terceiros integrem com a sua

    API. API THIRD-PARTY 1 SERVICE SISTEMA THIRD-PARTY 2 PROXY PROXY API ARQUITETURA DEFENSIVA
  48. 48 PROXY API • Você precisa que terceiros integrem com

    a sua API. • Vantagens ◦ Escalabilidade. ◦ Desacoplamento. ◦ Facilita mudanças e canary testing. ◦ Stateless. API THIRD-PARTY 1 SERVICE SISTEMA THIRD-PARTY 2 PROXY ARQUITETURA DEFENSIVA
  49. 49 PROXY API • Você precisa que terceiros integrem com

    a sua API. • Vantagens ◦ Escalabilidade. ◦ Desacoplamento. ◦ Facilita mudanças e canary testing. ◦ Stateless. ◦ API aggregation. API THIRD-PARTY 1 SERVICE SISTEMA THIRD-PARTY 2 PROXY API SERVICE ARQUITETURA DEFENSIVA
  50. 50 CLI - Command Line Interface “Pera que eu vou

    fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. ARQUITETURA DEFENSIVA
  51. 51 CLI - Command Line Interface “Pera que eu vou

    fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • • • • • ARQUITETURA DEFENSIVA
  52. 52 CLI - Command Line Interface “Pera que eu vou

    fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • • • • ARQUITETURA DEFENSIVA
  53. 53 CLI - Command Line Interface “Pera que eu vou

    fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • • • ARQUITETURA DEFENSIVA
  54. 54 CLI - Command Line Interface “Pera que eu vou

    fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • • ARQUITETURA DEFENSIVA
  55. 55 CLI - Command Line Interface “Pera que eu vou

    fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • Mais fácil de ser testado. • ARQUITETURA DEFENSIVA
  56. 56 CLI - Command Line Interface “Pera que eu vou

    fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • Mais fácil de ser testado. • Paralelismo. ARQUITETURA DEFENSIVA
  57. 57 CLI - Command Line Interface “Pera que eu vou

    fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • Mais fácil de ser testado. • Paralelismo. https://vcrmartinez.com/pt/blog/2019/2019-05-18-Crian do_scripts_de_linha_de_comando_a_prova_de_balas/ ARQUITETURA DEFENSIVA
  58. 58 https://vcrmartinez.com/pt/blog/2019/2019-05-18-Crian do_scripts_de_linha_de_comando_a_prova_de_balas/ CLI - Command Line Interface “Pera que

    eu vou fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • Mais fácil de ser testado. • Paralelismo. DRY-RUN ARQUITETURA DEFENSIVA
  59. 59 https://vcrmartinez.com/pt/blog/2019/2019-05-18-Crian do_scripts_de_linha_de_comando_a_prova_de_balas/ CLI - Command Line Interface “Pera que

    eu vou fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • Mais fácil de ser testado. • Paralelismo. DRY-RUN LOG ARQUITETURA DEFENSIVA
  60. 60 https://vcrmartinez.com/pt/blog/2019/2019-05-18-Crian do_scripts_de_linha_de_comando_a_prova_de_balas/ CLI - Command Line Interface “Pera que

    eu vou fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • Mais fácil de ser testado. • Paralelismo. DRY-RUN LOG ROLLBACK ARQUITETURA DEFENSIVA
  61. 61 https://vcrmartinez.com/pt/blog/2019/2019-05-18-Crian do_scripts_de_linha_de_comando_a_prova_de_balas/ CLI - Command Line Interface “Pera que

    eu vou fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • Mais fácil de ser testado. • Paralelismo. DRY-RUN LOG ROLLBACK TMUX ARQUITETURA DEFENSIVA
  62. 62 https://vcrmartinez.com/pt/blog/2019/2019-05-18-Crian do_scripts_de_linha_de_comando_a_prova_de_balas/ CLI - Command Line Interface “Pera que

    eu vou fazer um update aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • Mais fácil de ser testado. • Paralelismo. DRY-RUN LOG ROLLBACK TMUX SELF-CHECK ARQUITETURA DEFENSIVA
  63. 63 https://vcrmartinez.com/pt/blog/2019/2019-05-18-Crian do_scripts_de_linha_de_comando_a_prova_de_balas/ “Pera que eu vou fazer um update

    aqui no banco e resolvo isso.” - Programador antes de fazer m**** em produção. Vantagens • Passível de revisão. • Mais fácil de ser reutilizado e mantido. ◦ Dica: scriptland. • Progresso e estimativa. • Documentação. • Mais fácil de ser testado. • Paralelismo. DRY-RUN LOG ROLLBACK TMUX SELF-CHECK PROGRESS BAR ARQUITETURA DEFENSIVA CLI - Command Line Interface
  64. 64 KEEP THE INTERFACE PROGRAMAÇÃO DEFENSIVA

  65. 65 PROGRAMAÇÃO DEFENSIVA KEEP THE INTERFACE

  66. 66 PROGRAMAÇÃO DEFENSIVA USE INTERFACES & FAVOREÇA COMPOSIÇÃO

  67. 67 PROGRAMAÇÃO DEFENSIVA USE INTERFACES & FAVOREÇA COMPOSIÇÃO

  68. 68 PROGRAMAÇÃO DEFENSIVA USE INTERFACES & FAVOREÇA COMPOSIÇÃO

  69. 69 PROGRAMAÇÃO DEFENSIVA CUIDADO COM A MUTABILIDADE

  70. 70 PROGRAMAÇÃO DEFENSIVA CUIDADO COM A MUTABILIDADE https://web.mit.edu/6.005/www/fa15/classes/09-immutability/

  71. 71 PROGRAMAÇÃO DEFENSIVA CUIDADO COM A MUTABILIDADE https://web.mit.edu/6.005/www/fa15/classes/09-immutability/ ❌ ✅

  72. 72 PROGRAMAÇÃO DEFENSIVA CUIDADO COM A MUTABILIDADE https://web.mit.edu/6.005/www/fa15/classes/09-immutability/ ❌ ✅

    ESTADO APENAS QUANDO NECESSÁRIO EDITAR CRIAR LISTA EVITE MODIFICAR OBJETOS PROPRIEDADES READ-ONLY
  73. 73 PROGRAMAÇÃO DEFENSIVA IDEMPOTÊNCIA SE ALGUÉM EXECUTAR JOB COMMAND PROCESSO

    REQUEST ... MAIS DE UMA VEZ ALTERA O RESULTADO ALÉM DO RESULTADO INICIAL?
  74. 74 PROGRAMAÇÃO DEFENSIVA IDEMPOTÊNCIA SE ALGUÉM EXECUTAR JOB COMMAND PROCESSO

    REQUEST ... MAIS DE UMA VEZ ALTERA O RESULTADO ALÉM DO RESULTADO INICIAL? PENSE EM MÁQUINA DE ESTADOS
  75. 75 PROGRAMAÇÃO DEFENSIVA • Evite lógicas mirabolantes • Cuidado com

    overengineering • Nomes significativos • Complexidade Ciclomática • Tipagem, se possível • Cuidado com estado • Imutabilidade sempre que puder KISS: KEEP IT SIMPLE, STUPID
  76. 76

  77. 77 PRECISAMOS FALAR SOBRE CRONJOBS

  78. 78 PRECISAMOS FALAR SOBRE CRONJOBS */5 * * * *

    “At every 5th minute.”
  79. 79 P C Produtor Consumidor Fila Banco de Dados Serviço

    Externo */5 * * * *
  80. 80 P C Produtor Consumidor Fila Banco de Dados Serviço

    Externo 1 */5 * * * *
  81. 81 P C Produtor Consumidor Fila Banco de Dados Serviço

    Externo 1 2 */5 * * * *
  82. 82 P C Produtor Consumidor Fila Banco de Dados Serviço

    Externo 1 2 3 */5 * * * *
  83. 83 P C Produtor Consumidor Fila Banco de Dados Serviço

    Externo 1 2 3 4 */5 * * * *
  84. 84 P C Produtor Consumidor Fila Banco de Dados Serviço

    Externo 1 2 3 4 5 */5 * * * *
  85. 85 P C VAMOS TENTAR ENCONTRAR POSSÍVEIS PONTOS DE FALHA…

  86. 86 P C SELECT *

  87. 87 P C MEMORY ERROR MEMORY ERROR

  88. 88 P C MUDAR O CRON

  89. 89 P C MUDANÇA DE FILA MUDANÇA DE FILA

  90. 90 P C CONEXÃO COM BD CONEXÃO COM BD

  91. 91 P C EXECUTAR NOVAMENTE?

  92. 92 P C FILA DOWN?

  93. 93 P C LATÊNCIA LATÊNCIA

  94. 94 P C CONSUMO + PROCESSAMENTO > TEMPO DE PRODUÇÃO

  95. 95 P C TRANSACTIONS

  96. 96 P C LONG QUEUE?

  97. 97 P C OLDEST UNACKED MESSAGE AGE

  98. 98 P C ALTO TEMPO DE PROCESSAMENTO

  99. 99 P C ERRO DURANTE PROCESSAMENTO

  100. 100 P C SCHEMA MUDOU

  101. 101 P C ERROR

  102. 102 P C TIMEOUT

  103. 103 P C RESPOSTA INESPERADA

  104. 104 P C EXCEPTION

  105. 105 P C ATUALIZAÇÃO ERRADA

  106. 106 P C

  107. 107 P C ATUALIZAÇÃO ERRADA EXCEPTION ERROR RESPOSTA INESPERADA TIMEOUT

    ALTO TEMPO DE PROCESSAMENTO ERRO DURANTE PROCESSAMENTO OLDEST UNACKED MESSAGE AGE MEMORY ERROR LONG QUEUE? FILA DOWN? CONSUMO + PROCESSAMENTO > TEMPO DE PRODUÇÃO LATÊNCIA MUDANÇA DE FILA LATÊNCIA SCHEMA MUDOU MUDANÇA DE FILA MUDAR O CRON EXECUTAR NOVAMENTE? MEMORY ERROR CONEXÃO COM BD CONEXÃO COM BD SELECT *
  108. 108 NÃO DEU TEMPO DE ANOTAR… • ERROS VÃO SEMPRE

    ACONTECER • • • • • • •
  109. 109 NÃO DEU TEMPO DE ANOTAR… • ERROS VÃO SEMPRE

    ACONTECER • FLUXO MUITO MIRABOLANTE? DESCONFIE… • • • • • •
  110. 110 NÃO DEU TEMPO DE ANOTAR… • ERROS VÃO SEMPRE

    ACONTECER • FLUXO MUITO MIRABOLANTE? DESCONFIE… • PRECISO TRATAR TODOS OS ERROS POSSÍVEIS? • • • • •
  111. 111 NÃO DEU TEMPO DE ANOTAR… • ERROS VÃO SEMPRE

    ACONTECER • FLUXO MUITO MIRABOLANTE? DESCONFIE… • PRECISO TRATAR TODOS OS ERROS POSSÍVEIS? • COMO RECUPERAR & REPROCESSAR ? • • • •
  112. 112 NÃO DEU TEMPO DE ANOTAR… • ERROS VÃO SEMPRE

    ACONTECER • FLUXO MUITO MIRABOLANTE? DESCONFIE… • PRECISO TRATAR TODOS OS ERROS POSSÍVEIS? • COMO RECUPERAR & REPROCESSAR ? • MONITORAMENTO & OBSERVABILIDADE • • •
  113. 113 NÃO DEU TEMPO DE ANOTAR… • ERROS VÃO SEMPRE

    ACONTECER • FLUXO MUITO MIRABOLANTE? DESCONFIE… • PRECISO TRATAR TODOS OS ERROS POSSÍVEIS? • COMO RECUPERAR & REPROCESSAR ? • MONITORAMENTO & OBSERVABILIDADE • CONSIDERE MÁQUINA DE ESTADOS • •
  114. 114 NÃO DEU TEMPO DE ANOTAR… • ERROS VÃO SEMPRE

    ACONTECER • FLUXO MUITO MIRABOLANTE? DESCONFIE… • PRECISO TRATAR TODOS OS ERROS POSSÍVEIS? • COMO RECUPERAR & REPROCESSAR ? • MONITORAMENTO & OBSERVABILIDADE • CONSIDERE MÁQUINA DE ESTADOS • JOBS “ATÔMICOS” & FILAS MENORES •
  115. 115 NÃO DEU TEMPO DE ANOTAR… • ERROS VÃO SEMPRE

    ACONTECER • FLUXO MUITO MIRABOLANTE? DESCONFIE… • PRECISO TRATAR TODOS OS ERROS POSSÍVEIS? • COMO RECUPERAR & REPROCESSAR ? • MONITORAMENTO & OBSERVABILIDADE • CONSIDERE MÁQUINA DE ESTADOS • JOBS “ATÔMICOS” & FILAS MENORES • RETRY & EXPONENTIAL BACKOFF
  116. Victor Martinez Dev @ Magalu vcrmartinez@gmail.com vcrmartinez.com vcrmartinez 116 Mestrando

    em Sistemas de Recomendação (UFBA)