Pular para o conteúdo principal

Testes de Stress & Limites de Capacidade

Resultados de testes de carga extrema para identificar a capacidade máxima do edgeProxy, pontos de quebra e limiares de degradação de performance.

Data do Teste: 2025-12-08 Alvo: EC2 Hub (Irlanda) - t3.micro (2 vCPU, 1GB RAM) Rede: Brasil → Irlanda (~200ms latência base) Ferramentas: hey, k6


Resumo Executivo

MétricaValor
Throughput Máximo~3.000 req/s
Concorrência Ideal500-1.000 VUs
Ponto de Degradação~2.000 VUs
Ponto de Quebra~5.000 VUs
Limite Absoluto~10.000 VUs (esgotamento de portas do cliente)

Análise de Capacidade

┌─────────────────────────────────────────────────────────────────────────┐
│ THROUGHPUT vs CONCORRÊNCIA │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 3000 │ ████ │
│ │ ████████ │
│ 2500 │ ███████████ │
│ │ ██████████████ │
│ 2000 │ █████████████████ │
│ │ ███████████████████ │
│ 1500 │ █████████████████████ │
│ │ ██████████████████████ │
│ 1000 │ ███████████████████████████████ │
│ │ ████████████████████████████████████ │
│ 500 │██████████████████████████████████████████ │
│ └────────────────────────────────────────────────────────────── │
│ req/s 100 500 1000 2000 3000 4000 5000 10000 VUs │
│ │
│ ────────── PICO DE THROUGHPUT: ~3.000 req/s @ 1000 VUs ────────── │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Resultados por Nível de Concorrência

Zona Ideal (100-1000 VUs)

VUsThroughputSucessoErrosLatência P50Latência P99Status
100472 req/s100%0%206ms454msIDEAL
5002.166 req/s100%0%207ms667msIDEAL
1.0002.928 req/s100%0%204ms282msPICO

Zona de Stress (2000-5000 VUs)

VUsThroughputSucessoErrosLatência P50Latência P99Status
2.000945 req/s96,3%3,7%694ms14,7sSTRESS
5.000691 req/s89,5%10,5%4,0s16,5sDEGRADADO

Zona de Quebra (10000+ VUs)

VUsThroughputSucessoErrosLatência P50Latência P99Status
10.000696 req/s61%39%12,3s17sQUEBRADO

Resultados Detalhados dos Testes

Teste 1: 2000 Conexões Simultâneas

Comando:

hey -z 60s -c 2000 http://34.246.117.138:8081/health

Resultados:

Summary:
Total: 66.5827 secs
Slowest: 20.0022 secs
Fastest: 0.5028 secs
Average: 1.2738 secs
Requests/sec: 944.8406

Latency distribution:
10% in 0.6283 secs
50% in 0.6946 secs
90% in 1.9032 secs
95% in 4.4142 secs
99% in 14.7191 secs

Status code distribution:
[200] 60604 responses

Error distribution:
[2306] context deadline exceeded

Análise:

  • 96,3% taxa de sucesso
  • Throughput cai para ~945 req/s (do pico de 2.928)
  • Latência P99 aumenta para 14,7s
  • Sistema sob stress mas ainda funcional

Teste 2: 5000 Conexões Simultâneas

Comando:

hey -z 60s -c 5000 http://34.246.117.138:8081/health

Resultados:

Summary:
Total: 76.8109 secs
Slowest: 19.9438 secs
Fastest: 0.6229 secs
Average: 4.5102 secs
Requests/sec: 690.9043

Latency distribution:
10% in 1.1920 secs
50% in 4.0097 secs
90% in 7.9034 secs
95% in 10.0572 secs
99% in 16.4712 secs

Status code distribution:
[200] 47495 responses

Error distribution:
[5573] context deadline exceeded
[1] connection reset by peer

Análise:

  • 89,5% taxa de sucesso
  • Throughput degrada ainda mais para ~691 req/s
  • Latência P50 sobe para 4s (inaceitável para maioria dos casos)
  • Taxa de erro excede limiar de 10%

Teste 3: 10000 Conexões Simultâneas (Ponto de Quebra)

Comando:

hey -z 30s -c 10000 http://34.246.117.138:8081/health

Resultados:

Summary:
Total: 47.5847 secs
Slowest: 19.5618 secs
Fastest: 1.2016 secs
Average: 9.9553 secs
Requests/sec: 695.5801

Latency distribution:
10% in 2.8706 secs
50% in 12.2853 secs
90% in 15.5906 secs
95% in 16.4277 secs
99% in 17.0278 secs

Status code distribution:
[200] 20169 responses

Error distribution:
[5651] context deadline exceeded
[7279] dial tcp: can't assign requested address

Análise:

  • Apenas 61% taxa de sucesso
  • can't assign requested address = esgotamento de portas do cliente
  • O cliente (macOS) esgotou portas efêmeras, não uma limitação do servidor
  • Servidor ainda processando ~700 req/s mesmo sob carga extrema

Análise de Gargalos

1. Latência de Rede (Fator Dominante)

Cliente (Brasil) ──── 200ms ────> Servidor (Irlanda)

- RTT base: ~200ms
- Isso é irredutível sem realocação geográfica
- Representa a maior parte do tempo de resposta em baixa concorrência

2. Recursos da Instância

RecursoValorImpacto
vCPUs2Limita processamento paralelo de requisições
RAM1GBAdequado para estado de conexões
RedeBaixa-ModeradaBanda compartilhada no t3.micro
Tipo de Instânciat3.microCréditos de CPU podem throttle sob carga sustentada

3. Limitações do Cliente

Com 10.000+ conexões simultâneas:

  • Faixa de portas efêmeras do macOS: 49152-65535 (~16k portas)
  • Cada conexão requer uma porta local
  • can't assign requested address indica esgotamento de portas

Zonas de Performance

┌─────────────────────────────────────────────────────────────────────────┐
│ ZONAS DE PERFORMANCE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ │
│ │ ZONA IDEAL │ 100-1000 VUs │
│ │ 100% Sucesso │ Pico: 3.000 req/s │
│ │ <300ms P99 │ Recomendado para produção │
│ └──────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ ZONA STRESS │ 1000-2000 VUs │
│ │ 95-99% Sucesso │ Erros começam a aparecer │
│ │ <5s P99 │ Monitorar de perto │
│ └──────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ ZONA DEGRADADA │ 2000-5000 VUs │
│ │ 85-95% Sucesso │ Erros significativos │
│ │ <15s P99 │ Requer escalabilidade │
│ └──────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ ZONA QUEBRADA │ 5000+ VUs │
│ │ <85% Sucesso │ Taxas de erro inaceitáveis │
│ │ Timeouts │ Sistema sobrecarregado │
│ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Recomendações de Escalabilidade

Escalabilidade Vertical

Tipo de InstânciavCPUsRAMThroughput Esperado
t3.micro21GB~3.000 req/s
t3.small22GB~4.000 req/s
t3.medium24GB~5.000 req/s
t3.large28GB~6.000 req/s
c6i.large24GB~8.000 req/s (otimizado para computação)

Escalabilidade Horizontal

                    ┌─────────────────┐
│ Load Balancer │
│ (ALB/NLB) │
└────────┬────────┘

┌─────────────────┼─────────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│edgeProxy │ │edgeProxy │ │edgeProxy │
│ #1 │ │ #2 │ │ #3 │
└──────────┘ └──────────┘ └──────────┘

3 instâncias × 3.000 req/s = ~9.000 req/s total

Distribuição Geográfica

Deploy do edgeProxy mais próximo dos usuários:

RegiãoRedução de LatênciaGanho de Throughput
Mesma região-150ms+50% throughput efetivo
Mesmo continente-100ms+30% throughput efetivo
Edge location-180ms+60% throughput efetivo

Recomendações para Produção

Para < 1.000 req/s

  • Instância t3.micro única é suficiente
  • Monitorar taxas de erro
  • Configurar alertas para >1% erros

Para 1.000-5.000 req/s

  • Usar t3.medium ou maior
  • Considerar 2 instâncias atrás de NLB
  • Implementar health checks

Para 5.000+ req/s

  • Escalabilidade horizontal necessária
  • 3+ instâncias atrás de load balancer
  • Auto-scaling group recomendado
  • Deploy multi-região para resiliência

Principais Descobertas

  1. Performance de Pico: 2.928 req/s com 1.000 conexões simultâneas e 100% sucesso
  2. Degradação Graceful: Sistema permanece parcialmente funcional mesmo com 10x sobrecarga
  3. Sem Crashes: edgeProxy nunca travou durante testes extremos
  4. Comportamento Previsível: Taxas de erro aumentam linearmente com sobrecarga
  5. Limitação do Cliente: Em concorrência extrema, esgotamento de portas do cliente ocorre antes da falha do servidor

Conclusão

edgeProxy em uma instância t3.micro pode lidar com confiança:

  • ~3.000 requisições/segundo de throughput sustentado
  • 1.000 conexões simultâneas com 100% sucesso
  • 2.000+ conexões com degradação graceful

Para cargas maiores, escale horizontalmente com múltiplas instâncias atrás de um load balancer.