| Integrações via HTTP | Stateless, testáveis isoladamente, deploy independente |
| 3 filas BullMQ | runs (baixo volume), items (alto volume), logs (async write) — escala independente |
| FlowProducer | Parent/child nativo BullMQ para rastrear fan-out |
| Config como jsonb | Cada handler tem necessidades diferentes; colunas fixas não escalam |
| Granularidade por handler | Controle fino: schedule, execução e reprocessamento por handler |
| Service discovery via DB | types.base_url — escala para N integrações sem env vars |
| Logs assíncronos | Fila logs desacopla escrita de http_logs/queue_logs do processamento |
| Concurrency/rate limit por handler | Evita derrubar APIs externas, controle granular |
| Circuit Breaker layered (2 camadas) | Tenant (threshold 5) isola falhas por conta; Global (threshold 15) protege contra outage generalizado |
| CB transição lazy (sem setTimeout) | Timer setTimeout se perde em restart do processo; checagem lazy via Redis TTL garante transição open→half-open mesmo após crash |
| Rate Limiter por tenant | Sliding window evita starvation — tenant massivo não bloqueia outros |
| Timeout HTTP por fase | Collect 60s, Process 30s, Gateway 15s — protege contra hang indefinido de fetch sem timeout |
| Backpressure via queue depth | Check antes do fan-out evita crescimento descontrolado da fila de items |
| Job Priority | Webhooks (priority 1) passam na frente de schedules (priority 5) |
| Cache Redis | types.base_url em cache TTL 60s — max 1 query/min ao PostgreSQL |
| Batch Processing | Contrato opcional /map-batch e /push-batch para alto volume |
| Particionamento mensal | Expurgo via DROP TABLE — instantâneo, sem VACUUM |
| PgBouncer + Redis Sentinel | Connection pooling + HA para escala horizontal |