Como resolver o aumento repentino de latência de API no momento do deploy - caso com Django + Gunicorn
- O sistema de backend era composto por Django + Gunicorn
- Foi identificado um problema em que, a cada deploy, a latência da API aumentava drasticamente
- Ao analisar o funcionamento do Gunicorn, constatou-se que havia partes sujeitas a Cold Start
- Ao analisar o código interno do Django, descobriu-se que, no momento do
fork no processo master worker, mesmo com a opção de preload ativada, havia elementos que não eram pré-carregados, e o problema foi resolvido a partir disso
Aprendizados
- Frameworks web amplamente usados, como o Django, costumam ter alta confiabilidade na maior parte de seus comportamentos, o que leva à tendência de presumir que isso também se aplica ao uso real
- No entanto, ao examinar o código de fato, foi encontrado um trecho problemático, e foi possível aprender que não se deve confiar cegamente no framework utilizado
- O processo de resolver o problema de latência da API foi difícil de entender rapidamente por conta da falta de documentação adequada + falta de compreensão profunda da estrutura interna e do funcionamento + relutância em mergulhar a fundo no codebase de um projeto open source
- Também houve o fator de que vários problemas complexos estavam interligados, o que dificultava uma identificação simples
- No fim, foi possível resolver o problema analisando o código interno do Django
- Nesse processo, além de ampliar o entendimento sobre as ferramentas Django utilizadas, foi possível aprender que examinar o código interno pode ajudar a encontrar soluções para alguns problemas difíceis
- É importante identificar a causa raiz do problema.
- Ajustar a condição de sucesso do Health Check para exigir mais tentativas ou mais tempo poderia reduzir a frequência de ocorrência da latência da API, mas não teria resolvido o problema de forma fundamental
- Usar a inteligência coletiva permite descobrir mais rapidamente os pontos em que vale focar e adquirir conhecimentos diversos
- O problema relacionado à latência da API foi compartilhado rapidamente com a organização, e diversos engenheiros deram opiniões sobre o que poderia estar causando o problema
- Foi possível reunir essas opiniões rapidamente e absorver com agilidade conhecimentos sobre onde valia a pena concentrar a investigação
- É importante configurar um ambiente de reprodução do sintoma para resolver o problema
- Foi possível reproduzir o mesmo problema localmente e, com isso, verificar se ele havia sido realmente resolvido
- Foi possível reconhecer a importância de reproduzir o sintoma no processo de resolução do problema
1 comentários
Cliquei no link e vi que o conteúdo do post é muito bom.