2013-01-09 9 views
6

Ho un sito Web asp.net che elabora le richieste utilizzando un exe di terze parti. Attualmente il mio flusso di lavoro èAsp.Net - Elaborazione offload su applicazione esterna

  1. utente accede sito web utilizzando qualsiasi browser e compila un modulo con i dettagli del processo

  2. Sito chiama un servizio di Windows self hosted WCF che è in ascolto su una porta

  3. di Windows servizio avvia terze parti exe per elaborare il lavoro e restituisce il risultato al sito web

  4. Sito Web visualizza il risultato restituito all'utente

Il sito Web di cui sopra era un prototipo che ora deve essere trasformato in un'implementazione pronta per la produzione. Mi rendo conto che l'architettura di cui sopra ha molti punti che potrebbero rompersi. Ad esempio, se la macchina è spenta o se il servizio di Windows si arresta in modo anomalo e non è più in ascolto sulla porta, tutte le richieste correnti cesseranno di essere elaborate. Per rendere l'architettura più robusta, sto considerando il seguente

  1. utente accede sito web utilizzando qualsiasi browser e compila un modulo con i dettagli del processo

  2. Sito scrive i dettagli del processo a un database

  3. Il servizio Windows che esegue il polling del database ogni 10 secondi per un nuovo lavoro preleva il lavoro e lo esegue utilizzando l'applicazione di terze parti. I risultati sono riscritti nel database.

  4. Il sito Web che ha ora avviato il polling del database, raccoglie i risultati e li visualizza all'utente.

La seconda architettura mi fornisce più capacità di registrazione e i lavori possono essere riavviati se sono in coda. Tuttavia coinvolge grandi quantità di polling che potrebbero non essere scalabili. Qualcuno può consigliare un'architettura migliore?

+0

Avevamo eseguito POC per un tipo simile di requisito, abbiamo considerato MSMQ al passaggio 2 ma non implementato nel progetto. In attesa di risposte su questa interessante implementazione. – Sunny

+0

@Sundeep - Quale alternativa a MSMQ hai utilizzato per il tuo progetto? Il progetto è stato completato o è ancora in corso? Grazie –

+0

Molto tempo fa, l'applicazione eseguiva un processo di backend e inviava l'e-mail di notifica all'utente. Quindi, volevo sostituirlo per l'elaborazione istantanea. – Sunny

risposta

0

Invece di Polling Vorrei andare con MSMQ o RabbitMQ.

In questo modo è possibile scaricare l'elaborazione su più utenti (possibilmente separare server dal server Web) della coda ed elaborare più richieste in parallelo.

+0

Questa sembra essere la migliore opzione al momento. Altri hanno suggerito MSMQ, ma posso accettare solo una risposta. Lo accetterò come risposta poiché ha una buona ragione per scegliere questo metodo rispetto ai sondaggi. –

0

Ho implementato la stessa architettura in una delle mie applicazioni in cui gli utenti stanno effettuando richieste multiple da elaborare. Così ho -

  1. utenti del sito GOTO e selezionare i parametri ecc sottoporre la richiesta
  2. richiesta viene memorizzata nella tabella del database con tutti i dettagli + nome utente ecc
  3. Un servizio guarda la tabella del database e prende la richiesta in modalità FIFO
  4. Dopo che la richiesta è stata elaborata, lo stato viene aggiornato come Failed o Completato nella tabella del database rispetto a tale ID di richiesta, che può essere visualizzato dagli utenti sul sito web
  5. Il servizio preleva la richiesta successiva se ce n'è una, altrimenti si ferma.
  6. servizio passa ogni 30 minuti
+0

Sarei andato con questo metodo se avessi il lusso di raccogliere le richieste una volta ogni 30 minuti. Tuttavia, per la mia attuale applicazione, la risposta deve essere in tempo reale e vi è la possibilità di grandi volumi (oltre 200 richieste ogni ora). –

Problemi correlati