"Mi serve una coda di job" è una richiesta sempre più comune. Le due opzioni serie nel mondo Node.js: Inngest (serverless-first, SaaS) e BullMQ (Redis self-hosted). Vediamole.
BullMQ
Libreria Node.js + Redis. Pro:
- Self-hosted, costo Redis è praticamente l'unico (€5-15/mese su Hetzner).
- Controllo totale: priorità, rate limit, concurrent processing, scheduled jobs.
- Maturo, stabile, milioni di download mensili.
Contro: serve un Redis sempre attivo (no serverless puro), gestire workers e crash recovery è on you, observability bisogna costruirla.
Inngest
Servizio SaaS che esegue funzioni "step-based" via webhook. Pro:
- Zero infra: scrivi una funzione, lui la esegue.
- Step recovery automatico: se step 3 di 5 fallisce, riprende dal 3.
- Dashboard ottima per debug.
- Native cron, fan-out, sleep nelle funzioni.
Contro: vendor lock-in moderato, costo che cresce coi volumi (free fino a 50k step/mese, sopra il piano starter è ~50 USD/mese).
Quando l'uno, quando l'altro
| Caso | Scelta |
|---|---|
| Sotto 1k job/giorno, app serverless | Inngest (free tier basta) |
| 1k-100k job/giorno, app con backend stabile | BullMQ + Redis |
| Sopra 100k job/giorno | BullMQ con cluster, no serverless |
| Job lunghi (ore) con step complessi | Inngest |
| Job brevi ad alto throughput | BullMQ |
Lezione operativa
Per la maggior parte dei progetti italiani che facciamo (backend Node + Hetzner + Postgres), BullMQ vince per costo prevedibile e controllo. Per progetti SaaS edge-native dove l'infrastruttura serverless è già scelta, Inngest è il complemento naturale. Non c'è un vincitore assoluto.