Vorrei chiedere quale sarebbe, a vostro avviso, una progettazione software preferibile e robusta per l'implementazione dell'elaborazione continua dei record in modo tempestivo. Segue una panoramica del problema da risolvere:
Ci sono record aggiunti al database. Ogni record è un evento con partecipanti registrati. Ogni evento è programmato per svolgersi in un particolare giorno in un'ora specifica. Ogni partecipante dovrebbe ricevere una notifica un'ora prima dell'ora di inizio pianificata dell'evento (che viene anche salvata nel database). Gli eventi vengono aggiunti al database in ogni momento. Ogni partecipante può prendere parte a molti eventi.
Sono particolarmente interessato a risolvere questo requisito: "Ogni partecipante dovrebbe ricevere una notifica un'ora prima dell'ora di inizio pianificata dell'evento (anch'essa salvata nel database)."
Quale sarebbe un buon approccio alla progettazione del software per soddisfare questo requisito aziendale.
Personalmente ho considerato quanto segue:
- Il database viene interrogato per gli ultimi orari di inizio degli eventi a intervalli regolari (ogni 5 minuti) - qualcosa come (SQL semplificato):
SELECT participant FROM events WHERE event.start_time > NOW - 10 minutes AND participant.was_notified = 0
- Ogni partecipante viene quindi passato al sistema di accodamento come, ad es. RabbitMQ
- Un processo di lavoro in coda invia notifiche ai partecipanti selezionati nel passaggio 1 sopra
- Un processo di lavoro in coda contrassegna i partecipanti come "che hanno ricevuto notifica" (
participant.was_notified = 1
) - Il ciclo si ripete
L'approccio descritto sopra probabilmente funzionerebbe in una certa misura, ma ha molti svantaggi e non sembra molto accurato. Alcuni problemi che posso pensare:
- La notifica non è molto precisa nel tempo. Intervallo di 10 minuti significa che un partecipante può ricevere una notifica alle 11:55 anziché alle 12:00,
- Ci deve essere una garanzia che è stata consegnata una notifica e che è stato elaborato un record pubblicato in coda,
- Potrebbero non esserci notifiche da consegnare entro altre ore, ma il database verrà comunque sottoposto a polling ogni 5 minuti.
Sono sicuro che ci sono più problemi con questo approccio, ma volevo solo elencarne alcuni che potrei pensare in cima alla mia testa.
Tornando alla domanda principale, quale sarebbe il modello di progettazione software preferito e adatto alla produzione per risolvere il problema presentato?