Backend robusto para o desafio Rinha de Backend 2025, implementando processamento de pagamentos com alta disponibilidade, performance otimizada e monitoramento avançado.
- ✅ Processamento de Pagamentos - Integração com processadores externos (Default e Fallback)
- ✅ Circuit Breaker - Proteção contra falhas em cascata
- ✅ Retry com Exponential Backoff - Recuperação automática de falhas
- ✅ Health Checks - Monitoramento de saúde dos processadores
- ✅ Audit Logging - Logs detalhados para auditoria
- ✅ Data Consistency - Verificações de consistência de dados
- ✅ Cache Redis - Cache distribuído para health checks e summaries
- ✅ Connection Pooling Otimizado - Pool de conexões PostgreSQL configurado
- ✅ Queries Otimizadas - Consultas SQL com índices e agregações
- ✅ Monitoramento P99 - Métricas de latência e throughput em tempo real
- ✅ Cache Invalidation - Invalidação inteligente de cache
- ✅ Performance Metrics - Métricas detalhadas de performance
- ✅ Health Endpoints -
/health,/health/payment-processors - ✅ Performance Monitoring -
/health/performance(P99, throughput) - ✅ Detailed Statistics -
/health/stats(métricas completas) - ✅ Audit Logs -
/health/audit(logs de auditoria)
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Nginx (LB) │ │ App Instance │ │ PostgreSQL │
│ Port: 80 │◄──►│ Port: 3000 │◄──►│ Port: 5432 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Redis │
│ Port: 6379 │
└─────────────────┘
- Target: < 1000ms
- Monitoring:
/health/performance - Alerts: Automático quando P99 > 1s
- Target: Máximo possível
- Monitoring: Requests por segundo
- Window: 1 minuto
- Target: > 99%
- Monitoring: Taxa de sucesso em tempo real
- Runtime: Node.js 20+
- Framework: Express.js
- Database: PostgreSQL
- Cache: Redis
- Load Balancer: Nginx
- Containerization: Docker & Docker Compose
- Testing: Jest & Supertest
- Logging: Winston
- Validation: Joi
git clone <repository>
cd rinha-de-backend-2025
npm installcp env.example .env
# Configure as variáveis de ambiente# Build e start
./scripts/build.sh
# Ou manualmente:
docker compose up -d# Start PostgreSQL e Redis
docker compose up -d postgres redis
# Start app
npm run devPOST /payments
Content-Type: application/json
{
"correlationId": "uuid-v4",
"amount": 100.50
}GET /payments/summary?from=2024-01-01T00:00:00Z&to=2024-01-31T23:59:59ZGET /health # Health básico
GET /health/payment-processors # Health dos processadores
GET /health/performance # Métricas P99 e throughput
GET /health/stats # Estatísticas detalhadas# Database
DB_HOST=postgres
DB_PORT=5432
DB_NAME=rinha_backend
DB_USER=rinha_user
DB_PASSWORD=rinha_password
# Redis
REDIS_URL=redis://redis:6379
# App
NODE_ENV=production
PORT=3000
SIMULATE_PAYMENTS=false
# Performance
P99_THRESHOLD=1000
CACHE_TTL=300# Limites de recursos (conforme especificação)
nginx: 0.1 CPU, 50MB RAM
app1: 0.9 CPU, 225MB RAM
app2: 0.9 CPU, 225MB RAM
postgres: 0.1 CPU, 50MB RAM
redis: 0.1 CPU, 50MB RAMnpm testnpm run test:integration# Teste de carga básico
npm run test:performance- Latência: P50, P95, P99, média, min, max
- Throughput: Requests/segundo
- Success Rate: Taxa de sucesso
- Database Pool: Conexões ativas, idle, waiting
- Cache Hit Rate: Taxa de acerto do cache
- Circuit Breaker: Estados e transições
- P99 > 1000ms
- Success rate < 99%
- Database pool esgotado
- Redis indisponível
{
"level": "info",
"message": "Payment processed successfully",
"correlationId": "uuid",
"processor": "default",
"responseTime": 150,
"timestamp": "2024-01-01T00:00:00.000Z"
}# Ver logs de auditoria
curl http://localhost/health/audit
# Ver logs por correlation ID
curl http://localhost/health/audit/{correlationId}- CLOSED: Normal operation
- OPEN: Failing, reject requests
- HALF_OPEN: Testing recovery
{
failureThreshold: 3,
timeout: 30000, // 30s
monitoringPeriod: 60000 // 1min
}- Health Checks: TTL 1 hora
- Payment Summaries: TTL 5 minutos
- Correlation IDs: TTL 10 minutos
- Automática após novos pagamentos
- Manual via endpoints de admin
- Fallback para memória se Redis indisponível
- P50: < 100ms
- P95: < 500ms
- P99: < 1000ms
- Target: Máximo possível
- Monitoring: Real-time RPS
- Target: 99.9%
- Monitoring: Health checks contínuos
curl -X POST http://localhost/health/reset-circuit-breakerscurl -X POST http://localhost/health/clear-health-cachecurl -X POST http://localhost/health/clear-audit-logslogs/
├── combined.log # Todos os logs
├── error.log # Apenas erros
└── access.log # Logs de acesso
- error: Erros críticos
- warn: Avisos importantes
- info: Informações gerais
- debug: Debug detalhado
# Build e push automático via GitHub Actions
docker pull wesleyisr4/rinha-backend-2025:latestdocker build -t rinha-backend-2025 .
docker run -p 9999:9999 rinha-backend-2025- Fork o projeto
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido para o Rinha de Backend 2025 🏆