Come ripristinare lo stato corretto quando il processo in esecuzione potrebbe chiudersi, mancando così alcuni eventi?

2

Ecco i requisiti: (non il caso reale, solo la versione molto semplificata)

  1. C'è una sorta di promozione che dura per una settimana.

  2. Gli utenti selezionati che possono beneficiare della promozione sono stati corretti all'inizio.

  3. Ogni giorno, ogni utente selezionato riceve dei bonus (ad esempio alcuni punti di credito) dal sistema.

Sto pensando di implementarlo con lo schema di stato, pianificando alcuni eventi di aggiornamento con un ritardo di 24 ore. Dopo aver ricevuto l'evento, pianifica un altro evento di aggiornamento con un ritardo di 24 ore, fino al completamento.

Ma c'è un problema. Cosa succede se il processo (il server) che esegue il programma viene arrestato e riavviato 2 giorni dopo? Vorrei che il sistema si comportasse correttamente riconsegnando i bonus promessi dei 2 giorni mancati.

Come posso farlo?

Quindi, la mia vera domanda è: "Come modellate qualcosa in relazione a questi tipi di problemi (eventi correlati al tempo)?" Qual è la natura di questo problema? Potrei averlo descritto ma non lo riconosco molto bene.

Grazie in anticipo.

    
posta du369 30.11.2018 - 21:15
fonte

1 risposta

4

Progetta il processo del server in modo che controlli di volta in volta (non necessariamente in intervalli di 24 ore) quando è stato fornito l'ultimo bonus (che dovresti inserire in qualche database, ovviamente, come attributo del record bonus) . Quando la differenza tra l'ora corrente e l'ultimo tempo di assegnazione è maggiore di 24 ore, assegna il bonus successivo, almeno una volta, ma se la differenza di tempo è maggiore di n x 24h , ripeti l'assegnazione n volte.

Ora, non è più così importante quanto spesso viene ricevuto l'evento di aggiornamento. 24h è l'ideale, quindi il server non controlla il tempo di bonus troppo spesso o troppo di rado, ma se l'evento viene dopo 1 ora o dopo 50 ore, funzionerà comunque correttamente. Quando il server si riavvia, potrebbe esserci, ad esempio, un evento di aggiornamento immediato, quindi il boni mancante verrà consegnato immediatamente.

TLDR; utilizza gli eventi solo per le notifiche per riattivare il server, ma non per le misurazioni del tempo.

    
risposta data 30.11.2018 - 21:29
fonte

Leggi altre domande sui tag