Capacidade e Escalabilidade
Estimativa de Carga (Setup Base)
Setup base: 2-4 vCPUs por serviço, PostgreSQL dedicado, Redis dedicado.
| Componente | Capacidade Estimada | Gargalo Principal |
|---|---|---|
| Runner (1 instância) | ~500-1.000 items/min | CPU + latência APIs externas |
| Runner (3 instâncias) | ~1.500-3.000 items/min | Redis throughput |
| BullMQ (Redis) | ~10.000-50.000 jobs/min | Memória Redis |
| PostgreSQL (writes) | ~5.000-10.000 inserts/min | Disco + connections |
| http_logs (async) | ~15.000-30.000 logs/min | Fila logs + batch insert |
Na prática: o gargalo real é a latência das APIs externas. Se cada push leva 200ms, um worker processa ~300 items/min. Com concurrency 10 por handler, sobe para ~3.000/min por instância.
Volume Suportado Sem Mudança de Arquitetura
| Faixa | Items/dia | Requisitos |
|---|---|---|
| Confortável | até 100.000 | Setup base, sem ajustes |
| Com tuning | até 500.000 | Mais instâncias Runner, batch inserts no DB |
| Limite | até 1.000.000 | Redis Cluster, PgBouncer otimizado, múltiplas instâncias de todos os serviços |
Ordem de Saturação
Para Ultrapassar 1M+ Items/Dia
Requer mudança arquitetural:
- Substituir BullMQ por Apache Kafka (throughput massivo)
- Database sharding por tenant
- Separar Log Writer em serviço dedicado
- Considerar event sourcing
Para o cenário de integrações CRM, dificilmente o volume ultrapassa 500K items/dia.
Mecanismos de Escalabilidade Já Previstos
| Mecanismo | Fase | Descrição |
|---|---|---|
| Escala horizontal do Runner | Nativo | BullMQ suporta N workers concorrentes |
| Concurrency por handler | Fase 2 | Controle fino na tabela configs |
| Rate limiting por handler | Fase 2 | Proteção contra throttle de APIs externas |
| Logs assíncronos | Fase 2 | Fila logs desacopla escrita do processamento |
| PgBouncer | Fase 5 | Connection pooling para N instâncias |
| Redis Sentinel | Fase 5 | Alta disponibilidade e failover automático |
| Métricas de fila | Fase 5 | Prometheus + Bull Board para observabilidade |
| Pausa por handler | Fase 5 | Backpressure granular |
| Retenção diferenciada | Fase 5 | Logs 30 dias, executions 6 meses |