Progettare un sistema di job in background con code e worker
Progetta code e worker per attività asincrone: scelta tecnologica, job idempotenti, retry per tipo di errore, priorità, limiti di concorrenza, pattern outbox e monitoraggio. Pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Include 4 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.
Avanzato · Testo · In attesa di revisione editoriale
Prompt
Agisci come architetto software esperto di elaborazione asincrona e sistemi di code.
Voglio togliere dalle richieste web il lavoro pesante o lento della mia applicazione.
- Attività da spostare in background: {{attivita}}
- Volumi e picchi previsti: {{volume}}
- Stack attuale: {{stack}}
- Infrastruttura e vincoli: {{infrastruttura}}
Consegna:
1. Una classificazione di ogni attività: urgenza, durata tipica, se chiama servizi esterni, se può essere eseguita due volte senza effetti collaterali e cosa succede se va persa.
2. Opzioni tecnologiche (coda nel database, Redis o un message broker) con pro, contro e costo operativo nel mio caso, senza cifre di prestazioni inventate. Una raccomandazione motivata.
3. Design dei job: payload minimo (id, non oggetti completi), idempotenza tramite chiavi o controlli di stato, timeout e versionamento del formato dei messaggi.
4. Una politica di retry per tipo di errore (transitorio, rate limit di terzi, dati errati, bug), backoff con jitter e coda dei messaggi falliti con una procedura per esaminarli e rielaborarli.
5. Code separate e priorità, concorrenza per coda e limiti di frequenza per le API esterne.
6. Consistenza tra database e coda: pattern outbox o accodamento dopo il commit, e perché non accodare dentro una transazione aperta.
7. Attività pianificate: come evitare esecuzioni doppie con più worker.
8. Rilasci e spegnimento ordinato: cosa succede ai job in corso.
9. Monitoraggio: metriche (profondità della coda, età del job più vecchio, tasso di errori, durata), alert e dashboard.
10. Un piano di migrazione a fasi dalla situazione attuale.
Vincoli:
- Se mancano informazioni su volumi, tolleranza ai ritardi o infrastruttura, chiedimele prima o segna [DA COMPLETARE].
- Preferisci l’opzione più semplice che soddisfa i requisiti e spiega quando converrebbe cambiare.
- Includi un diagramma testuale dell’intero flusso.Come usarlo
- Elenca le attività lente di oggi e quanto durano dentro la richiesta.
- Indica quale infrastruttura puoi davvero gestire (per esempio se hai già Redis o solo un database).
- Sposta prima una sola attività, aggiungi le metriche e poi migra il resto.
Esempio d'uso
Attività: invio email, generazione fatture PDF, sincronizzazione ordini con l’ERP · 20.000 job al giorno con picchi durante i saldi · Stack: Laravel con MySQL · Un server, Redis disponibile.
Esempio di risultato
1. Classificazione delle attività
| Attività | Urgenza | Durata tipica | Servizio esterno | Ripetibile? | Se si perde… |
|---|---|---|---|---|---|
| Email transazionale | Alta (secondi) | Breve | Sì (SMTP/API) | Non senza chiave di idempotenza | Il cliente non riceve la conferma |
| Fattura PDF | Media (minuti) | Media, pesante sulla CPU | No | Sì, se sovrascrive lo stesso file | Si rigenera |
| Sync ERP | Media | Variabile | Sì, con rate limit | Solo verificando lo stato | Ordini disallineati |
2. Raccomandazione
Code di Laravel su Redis + Horizon. Redis c’è già, non aggiunge componenti da gestire e Horizon offre dashboard e retry senza configurazioni extra. Un broker dedicato varrebbe la pena solo con più consumer indipendenti o garanzie di consegna più rigide.
5. Code e concorrenza
emails— priorità alta, più worker.fatture— pochi worker per non saturare la CPU dell’unico server.erp— 1–2 worker eRateLimitedin base al limite dell’ERP → [DA COMPLETARE].
Diagramma
Request → DB::transaction → outbox / afterCommit → Redis
→ Horizon (emails | fatture | erp) → retry con backoff → failed_jobs
Con un team di due persone senza reperibilità, gli alert vanno in un canale controllato in orario d’ufficio, tranne «coda email ferma», che merita una notifica immediata…
Dati chiave
- Categoria
- Programmazione e sviluppo · Architettura software
- Tipo di output
- Testo
- Livello
- Avanzato
- Pensato per
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificato in
- In attesa di verifica editoriale
- Variabili
- Attività in background, Volumi e picchi, Stack attuale e Infrastruttura e vincoli
- Lingua
- Italiano
- Prezzo
- Gratuito, senza registrazione
- Aggiornato
- 07/11/2026
Domande frequenti
Cos’è il pattern outbox e perché è consigliato?
Si scrive il messaggio in una tabella nella stessa transazione dei dati di business e lo si pubblica dopo. Così non si accoda un job per qualcosa che non è stato salvato, né si salva qualcosa senza il suo job.
Basta una coda nel database?
Per volumi moderati di solito sì, e non aggiunge infrastruttura. Quando la coda entra in competizione con le query dell’applicazione o serve molta concorrenza, conviene passare a Redis o a un broker.
A cosa serve questo prompt?
Progetta code e worker per attività asincrone: scelta tecnologica, job idempotenti, retry per tipo di errore, priorità, limiti di concorrenza, pattern outbox e monitoraggio.
Con quali strumenti di IA funziona?
È pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.
Come personalizzo il prompt?
Clicca su «Personalizza» e compila le variabili (Attività in background, Volumi e picchi, Stack attuale e Infrastruttura e vincoli). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.
Serve esperienza per usarlo?
È di livello avanzato: è pensato per persone con esperienza nell'argomento, in grado di valutare e regolare il risultato.
Questo prompt è gratuito?
Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.
Posso fidarmi dell'output dell'IA?
Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.