Approccio di progettazione per l'elaborazione continua e sensibile ai tempi dei record

3

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:

  1. 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
  2. Ogni partecipante viene quindi passato al sistema di accodamento come, ad es. RabbitMQ
  3. Un processo di lavoro in coda invia notifiche ai partecipanti selezionati nel passaggio 1 sopra
  4. Un processo di lavoro in coda contrassegna i partecipanti come "che hanno ricevuto notifica" ( participant.was_notified = 1 )
  5. 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?

    
posta luqo33 27.05.2017 - 22:34
fonte

1 risposta

2

Prenderò in considerazione la pianificazione. Ogni volta che viene creato un evento, puoi dire a un servizio di pianificazione (che non è abbinato al servizio di creazione di eventi) per notificare a tutti i partecipanti di quell'evento di essere avvisati a qualche ora.

Oltre ai problemi che hai elencato, ce n'è anche uno con la condivisione di un db / tabella per due servizi e il controllo totale del sistema con un unico polling.

    
risposta data 28.05.2017 - 20:43
fonte

Leggi altre domande sui tag