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.

Victor Martinez

December 28, 2021
Tweet

More Decks by Victor Martinez

Other Decks in Technology

Transcript

  1. 5 Mar calmo nunca fez bom marinheiro, mas experimente colocar

    um bug sério em produção para perceber
  2. 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)
  3. 10 ALGUNS PROBLEMAS EM PROJETOS DE SOFTWARE PROCESSOS FALHOS FALTA

    DE CONTEXTO COBERTURA DE TESTES DEPENDÊNCIAS EXTERNAS PRAZO CÓDIGO … ESCOPO
  4. 13 QUAIS SÃO AS SUAS PRÁTICAS DE ENTREGA? Photo by

    Dan Burton on Unsplash AMBIENTE DE DESENVOLVIMENTO
  5. 17 4TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE

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

    TESTE TESTE TESTE TESTE TESTE TESTE UNITÁRIOS INTEGRAÇÃO COMPORTAMENTO
  7. 24 6CODE REVIEW DEFINA UM LINTER / FORMATTER / STYLE

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

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

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

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

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

    GUIDE ARGUMENTAÇÃO TÉCNICA DESIGN COMPLEXIDADE NOMENCLATURA FUNCIONALIDADE COMENTÁRIOS E DOCUMENTAÇÃO TESTES
  13. 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
  14. 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
  15. 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
  16. 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
  17. 43 • Você precisa que terceiros integrem com a sua

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

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

    API. API THIRD-PARTY 1 SERVICE SISTEMA THIRD-PARTY 2 PROXY API ARQUITETURA DEFENSIVA
  20. 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
  21. 47 • Você precisa que terceiros integrem com a sua

    API. API THIRD-PARTY 1 SERVICE SISTEMA THIRD-PARTY 2 PROXY PROXY API ARQUITETURA DEFENSIVA
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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?
  40. 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
  41. 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
  42. 76

  43. 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 *
  44. 108 NÃO DEU TEMPO DE ANOTAR… • ERROS VÃO SEMPRE

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

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

    ACONTECER • FLUXO MUITO MIRABOLANTE? DESCONFIE… • PRECISO TRATAR TODOS OS ERROS POSSÍVEIS? • • • • •
  47. 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 ? • • • •
  48. 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 • • •
  49. 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 • •
  50. 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 •
  51. 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