Qual è un buon approccio di progettazione in .NET per eseguire una serie di controlli nel processo in background?

3

Ho un sistema di pianificazione del volo in .NET / SQL Server che deve eseguire diversi controlli di convalida. Questo ha bisogno di lavorare sia su Windows che su un client web. Attualmente i controlli vengono eseguiti in modo sincrono ma questo rallenta il sistema, più spesso si ripetono gli stessi controlli. Come "questo aereo è nella giusta posizione di partenza", "è l'aereo disponibile" e molti altri controlli più complicati. Questo è necessario poiché il sistema attuale non sa se sono stati modificati altri voli che potrebbero causare problemi.

Sto cercando un modo per creare un singolo processo in background che funzioni in modo indipendente e in modo asincrono su un intervallo e possa essere attivato da modifiche dei dati o richieste esplicite. Questo processo potrebbe quindi aggiornare un elenco di problemi trovati per volo. Un altro processo potrebbe semplicemente utilizzare questo elenco per segnalare i problemi all'utente senza dover eseguire i controlli.

Qualche idea sul modello di architettura e le migliori pratiche per implementare qualcosa di simile? Vorrebbe mantenere il processo di installazione abbastanza semplice, quindi meno "parti mobili" sono migliori.

    
posta Theo de Roo 22.07.2014 - 10:15
fonte

1 risposta

3

Un metodo che ho utilizzato in una posizione in qualche modo simile che mi ha permesso di forzare l'integrità dei dati, garantendo al contempo un'esperienza rapida per i miei utenti consisteva nel creare in modo asincrono la richiesta sul lato server.

Quindi, se la funzione A (.75 secondi per elaborare i calcoli), B (2 secondi) e C (3 secondi) facevano tutti parte di una singola pagina e quando ho postato questa pagina il tempo di elaborazione per A + B + C era semplicemente troppo grande. 5.75 secondi non è orribile, ma le persone iniziano a notare velocità a questo punto. L'elaborazione della mia pagina in realtà ha richiesto circa 10 secondi a causa di tutto ciò che era necessario fare. Per risolvere questo problema li ho divisi in funzioni separate sulla stessa pagina.

Quando hai aggiunto A (diciamo la posizione dell'aereo che fa 20 calcoli diversi sulle cose e ti ci sono voluti 0,75 secondi), era asincrono. Avevo una funzione lato server che ha eseguito l'elaborazione per questo, inclusi controlli, movimento dei file, ecc. Le informazioni per A sono state memorizzate sul server come parte di una richiesta parziale (ho usato REDIS per mantenere queste informazioni).

Quando aggiungi le tue informazioni B, l'elaborazione avviene di nuovo in modo asincrono.

E C.

Quindi, quando finalmente si preme "Invia", non è necessario ripetere tutta questa elaborazione. È già stato fatto e i risultati / le informazioni / le verifiche sono sul server in attesa di invio parziale. La tua presentazione effettiva darebbe il via a un processo che dice sostanzialmente "prendi le informazioni parziali sul server e combinale in x (x è un record, una richiesta, o qualsiasi altra cosa tu faccia con esso)".

Mi rendo conto di essere di alto livello. Posso provare a fornire un esempio di codice, se vuoi. Ma, il mio processo sincrono di 10 secondi di una pagina (non è nessuno ha tempo per quello), trasformato in più invii per la pagina. Alla gente non dispiace aspettare 1 secondo dopo aver aggiornato ogni parte della pagina. Quando pubblicano effettivamente la pagina, tutto il lavoro è stato fatto in background, quindi il tempo di risposta è di circa 1 secondo. Pensano che sia molto veloce, ma è solo perché tutto il lavoro è già stato fatto.

Una nota, lo scopo per la memorizzazione delle informazioni sul lato server aiuta a prevenire problemi di sicurezza. Se si "controlla" A solo quando lo completano sulla pagina e si restituisce un messaggio "Va tutto bene", ma dopo l'invio, prendi il valore di A dalle informazioni di invio assumendo che si tratti delle stesse informazioni che hai controllato, potresti aprirti ai dati dannosi. Ricevo le informazioni parziali, le memorizzo sul lato server, e in post, utilizzo quelle informazioni, quindi so con certezza al 100% che le informazioni che sto utilizzando sono quelle che hanno già superato tutti i miei assegni.

Spero che ti aiuti!

    
risposta data 23.07.2014 - 18:51
fonte

Leggi altre domande sui tag