Gabriel Novaes
Publicada em:

Benchmark da API: Desempenho, Análise e Otimizações para Maior Eficiência com laravel 🚀

Authors

Ao testar o desempenho da minha API de notícias desenvolvida com Laravel, utilizei o Apache Benchmark (ab) para avaliar sua performance sob carga. Os resultados mostram que a API é estável e responde bem a múltiplas requisições simultâneas, mas ainda há espaço para otimizações. Neste post, compartilho a análise detalhada do benchmark, destacando os pontos positivos, desafios encontrados e sugestões para melhorar a velocidade e eficiência da API. Se você também usa Laravel e quer aprimorar a performance do seu sistema, este artigo é para você! 🚀

Benchmarking api.onovaes.com.br (be patient)
Finished 2102 requests


Server Software:        nginx
Server Hostname:        api.onovaes.com.br
Server Port:            443
SSL/TLS Protocol:       TLSv1.3,TLS_AES_256_GCM_SHA384,2048,256
Server Temp Key:        X25519 253 bits
TLS Server Name:        api.onovaes.com.br

Document Path:          /api/v1/posts/?per_page=20
Document Length:        39494 bytes

Concurrency Level:      10
Time taken for tests:   64.399 seconds
Complete requests:      2102
Failed requests:        0
Total transferred:      84088408 bytes
HTML transferred:       83016388 bytes
Requests per second:    32.64 [#/sec] (mean)
Time per request:       306.368 [ms] (mean)
Time per request:       30.637 [ms] (mean, across all concurrent requests)
Transfer rate:          1275.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       44  100 236.7     76    3154
Processing:    83  138  37.9    138    1124
Waiting:       82  137  38.0    138    1124
Total:        128  238 240.1    217    3331

Percentage of the requests served within a certain time (ms)
  50%    217
  66%    241
  75%    252
  80%    258
  90%    278
  95%    292
  98%    330
  99%   1224
 100%   3331 (longest request)


Análise do chatGPT

O desempenho da sua API de notícias parece sólido, mas há alguns pontos que podem ser otimizados. Aqui está a análise dos principais indicadores:

Pontos Positivos 🚀

  1. Nenhuma requisição falhou

    • Todas as 2.102 requisições foram concluídas com sucesso, o que mostra estabilidade no seu sistema.
  2. Boa taxa de transferência 📈

    • 1275.15 KB/s indica que o servidor está conseguindo entregar os dados de maneira eficiente.
  3. Tempo médio de resposta razoável ⏱️

    • 306 ms por requisição não é ruim para uma API que retorna um payload grande (39 KB por resposta).
    • O tempo médio por requisição concorrente (30.6 ms) mostra que o servidor consegue lidar bem com múltiplos usuários simultâneos.

Pontos de Atenção ⚠️

  1. Variação nos tempos de resposta (desvio padrão alto)

    • O tempo de resposta médio é 306 ms, mas com um desvio padrão de 240 ms.
    • Algumas requisições demoraram até 3.3 segundos ⏳, o que pode impactar a experiência do usuário.

    Sugestões para melhoria:

    • Cache de resposta (Redis, Cloudflare, Laravel Response Cache).
    • Otimizar queries do banco (indexação, evitar N+1, etc.).
    • Otimizar serialização JSON para reduzir o peso da resposta.
  2. Picos de latência (1% das requisições > 1,2s)

    • 99% das requisições foram concluídas em até 1,2s, mas algumas chegaram a 3,3s.
    • Isso pode indicar gargalos ocasionais no banco de dados ou processamento pesado.

    Sugestões:

    • Monitorar queries lentas com o Laravel Telescope ou o slow_query_log do MySQL.
    • Otimizar workers e filas (caso esteja rodando jobs junto com as requisições).
    • Configurar o banco para melhor desempenho (tuning no MySQL/PostgreSQL).
  3. Número de requisições por segundo pode ser melhorado

    • 32.64 requisições/segundo é um número decente, mas pode melhorar com cache de API e otimizações no código.

Conclusão e Próximos Passos

Sua API está estável e performa bem sob carga moderada.
Com algumas otimizações, o tempo médio pode cair para menos de 200ms e o throughput aumentar para 50+ req/s.

Se quiser testar melhorias, posso te ajudar a configurar cache, otimização de queries, ou profiling com Laravel Debugbar/Telescope. 🚀