QR Code em Horário Nobre
📖 Introdução
Com o crescimento exponencial de aplicações web e APIs em arquiteturas modernas (.NET 6/7/8), a observabilidade e a capacidade de suportar alto tráfego tornam-se prioridades.
Neste artigo, vamos mostrar como testar e validar esse tipo de carga extrema usando o K6, um poderoso e moderno framework de teste de performance open source, amplamente usado com APIs REST em aplicações .NET.
🧰 Tecnologias Utilizadas
Tecnologia | Descrição |
---|---|
K6 | Ferramenta de teste de carga e performance moderna |
.NET 6+ | Framework moderno para desenvolvimento backend |
Docker | Containerização do K6 e da aplicação |
Azure / AWS | Para simular testes em produção real (opcional) |
QRCode API | Ponto de entrada de tráfego em massa (GET/POST) |
🎯 Objetivo
- Testar endpoints críticos da aplicação .NET (QR Code, login, checkout, etc.)
- Simular milhares de acessos simultâneos com K6
- Avaliar latência, throughput e taxa de erro
- Provar escalabilidade horizontal/autoscaling
⚙️ Setup do Projeto .NET
dotnet new webapi -n QrCodeApi
cd QrCodeApi
Crie um endpoint que representa o acesso ao QR Code:
[ApiController]
[Route("api/[controller]")]
public class QrCodeController : ControllerBase
{
[HttpGet("{id}")]
public IActionResult Get(string id)
{
// Simula acesso ao QR Code
return Ok(new { message = "QR Code accessed", code = id });
}
}
Rode a aplicação:
dotnet run
🧪 Escrevendo o Script de Carga (K6)
Crie um arquivo load-test.js
:
import http from 'k6/http';
import { check, sleep } from 'k6';
export let options = {
stages: [
{ duration: '10s', target: 100 }, // rampa rápida
{ duration: '30s', target: 1000 }, // simula campanha em horário nobre
{ duration: '1m', target: 0 }, // finaliza
],
thresholds: {
http_req_duration: ['p(95)<500'], // 95% das requisições < 500ms
http_req_failed: ['rate<0.01'], // menos de 1% de falha
},
};
export default function () {
let res = http.get('http://localhost:5000/api/qrcode/abc123');
check(res, {
'status é 200': (r) => r.status === 200,
'tempo < 500ms': (r) => r.timings.duration < 500,
});
sleep(1);
}
🐳 Executando com Docker
docker run --rm -i grafana/k6 run - <load-test.js
Ou com K6 instalado:
k6 run load-test.js
📊 Análise de Resultados
Exemplo de output:
✓ status é 200
✓ tempo < 500ms
checks................: 100.00% ✓ 15000 ✗ 0
http_req_duration.....: avg=320ms min=50ms med=270ms p(95)=480ms
http_req_failed.......: 0.01% ✓ 1 ✗ 14999
✅ Aplicação aguentou 1000 requisições simultâneas com 99% de sucesso!
📈 Observabilidade Integrada
Integre com Prometheus + Grafana ou Datadog para analisar em tempo real:
docker-compose up -d prometheus grafana
Ou envie métricas do K6 com:
k6 run --out datadog load-test.js
🧠 Estratégias para Aguentar o Pico de Tráfego
- Use CDN para arquivos estáticos
- Escale horizontalmente com Kubernetes (HPA)
- Use caching distribuído (ex: Redis)
- Gere QR Codes de forma assíncrona
- Aplique circuit breakers / retries
✅ Conclusão
Realizar testes de carga realistas com K6 ajuda sua aplicação .NET a estar preparada para eventos de alto impacto como campanhas com QR Code ao vivo, Black Friday, ou lançamento de produto.
Não espere falhar em produção. Teste agora. Escale antes.
🔗 Recursos
- Documentação oficial do K6
- .NET Worker Services
- Teste distribuído com K6 Cloud
- GitHub: Exemplo completo em .NET + K6
🤝 Conecte-se Comigo
Fique à vontade para conversar sobre arquitetura, migração e modernização de aplicações .NET:
- 🌐 shifters.dev
- ✍️ Medium
- 📬 contato@dopme.io