Skip to main content

Performance de Backend

Camada: Arquitetura — Padrões e boas práticas técnicas para o time de desenvolvimento. Aplica-se a: Todas as APIs, workers e serviços do CRM.


1. Banco de Dados

PráticaDescrição
Pool de conexõesConfigure máximo de conexões, timeout de inatividade e reutilização para evitar esgotamento
Índices eficientesCrie índices para colunas usadas em filtros, joins e ordenação frequentes
Evite SELECT *Busque apenas as colunas necessárias em cada query
Consultas lentasHabilite slow query log e monitore regularmente
PaginaçãoImplemente paginação eficiente (cursor-based) para grandes conjuntos de dados
Lazy / Eager loadingUse conforme o caso de uso — evite N+1 queries
Desnormalização seletivaConsidere para cargas com alto volume de leitura e muitos JOINs
ReplicaçãoConfigure réplicas de leitura para redundância e melhor desempenho
ShardingUse particionamento de dados se o volume exigir distribuição horizontal
ManutençãoExecute VACUUM, reindexação e limpeza de dados obsoletos regularmente

2. Cache

EstratégiaQuando usar
Cache lateral (Cache-Aside)Leitura frequente, escrita eventual — aplicação controla o cache
Write-throughConsistência crítica — escreve no cache e no banco simultaneamente
Read-throughCache atua como proxy transparente de leitura
HTTP CacheConfigure Cache-Control e ETag em respostas da API
CDNRecursos estáticos e dados acessados globalmente
InvalidaçãoImplemente estratégia de invalidação para evitar dados desatualizados

3. Otimização de API

  • Imponha limites de tamanho de payload razoáveis nas rotas.
  • Habilite compressão de resposta (gzip / brotli).
  • Minimize processamento desnecessário no caminho crítico de requisições.
  • Agrupe requisições similares para reduzir round-trips.
  • Implemente streaming para grandes transferências de dados.
  • Defina timeouts de conexão adequados e mecanismos de retry com backoff exponencial.

4. Assincronismo

  • Descarregue tarefas pesadas para workers em background (BullMQ, NATS, RabbitMQ).
  • Use message brokers para comunicação assíncrona entre serviços.
  • Não bloqueie o event loop — operações de I/O devem ser sempre não-bloqueantes.

5. Rede e Infraestrutura

  • Hospede o backend geograficamente próximo dos usuários principais.
  • Use HTTP keep-alive para reduzir overhead de handshake por conexão.
  • Use CDN para recursos estáticos e endpoints acessados com alta frequência.
  • Prefetch de recursos necessários para requisições subsequentes.
  • Use escalabilidade horizontal para picos de carga e vertical para gargalos de memória/CPU.
  • Configure load balancer para distribuir tráfego entre instâncias.

6. Segurança (Performance-Aware)

  • Mantenha dependências atualizadas — vulnerabilidades conhecidas impactam performance e segurança.
  • Implemente rate limiting e throttling para evitar abuso e proteger recursos.
  • Autenticação e autorização devem ser eficientes — use cache de sessão/JWT quando apropriado.

7. Monitoramento e Observabilidade

FerramentaUso
PrometheusColeta de métricas (latência, taxa de erro, throughput)
GrafanaDashboards de visualização de métricas
ELK StackCentralização e análise de logs
Logging assíncronoEvite que o log bloqueie o fluxo principal da aplicação

8. Testes de Performance

  • Realize testes de carga e benchmark regularmente.
  • Identifique regressões de performance a cada ciclo de deploy.
  • Profile o código para localizar gargalos antes de otimizar.
  • Otimize algoritmos e estruturas de dados nos caminhos críticos.