Le migliori pratiche quando si gestiscono lavori asincroni eseguiti da molto tempo

10

Sono nella fase di progettazione di un progetto in cui l'utente finale invierà una richiesta da una pagina Web che genererà un processo elaborato asincrono a lunga esecuzione. Esiste una "best practice" per questo problema? I servizi web e i broker di servizi sono un buon modo per andare? La coda dei messaggi Microsoft è applicabile qui?

    
posta John Ruf 13.02.2011 - 17:45
fonte

2 risposte

6

Non conosco le "migliori pratiche". Conosco gli errori più comuni.

Primo errore: DOS Yourself

Utilizzi il webhandler per elaborare il lavoro di lunga durata. Questo può essere cattivo o estremamente cattivo a seconda della percentuale di hit che diventano lavori in esecuzione di lunga durata, per quanto tempo vengono eseguiti e di quanto traffico continuo si ottiene.

Si desidera assicurarsi che non si ottenga più di 1 lavoro in esecuzione lungo nel periodo di tempo necessario per il completamento di tale lavoro di lunga durata. Se lo fai tu DOS. Inoltre, peggiorerà la quantità di traffico che ottieni assumendo la percentuale e il tempo rimane costante. È uno di quei problemi che impone un limite alla crescita del traffico.

Secondo errore: spawning dal webhandler

Generare un processo dal gestore web per gestire un processo a lungo termine può essere complicato e, di conseguenza, anche soggetto a errori.

  • Devi dissociarti dal genitore correttamente altrimenti il webhandler attende il completamento del figlio.
  • Quando forzi un figlio in unix, eredita le maniglie aperte dal genitore. Questi saranno automaticamente chiusi a meno che non vengano sovrascritti. Questo include cose come connessioni al database, filehandle, altre connessioni di rete aperte. Tutti ricevono chiudi al termine del processo secondario.

Opzioni

Di solito uso at(1) per dissociarti in modo pulito dal webhandler senza biforcarsi.

Puoi anche utilizzare un'implementazione di polling con cron .

È possibile comunicare con un altro processo server che gestisce l'elaborazione. Questa comunicazione può essere eseguita con sockets , pipes o astrazioni di livello superiore come una chiamata http REST o il routing di un messaggio in coda.

    
risposta data 14.02.2011 - 18:01
fonte
2

Suppongo che tu stia parlando di più di qualche minuto.

Se sono pochi minuti, puoi avviare un thread di lavoro sullo sfondo e visualizzare alcuni progressi sull'interfaccia utente. Un sacco di applicazioni web usano quel metodo.

Se è superiore a, diciamo 5 minuti, è possibile delegare l'attività a un servizio dedicato. Un esempio sono i report generati da Google Analytics.

La coda di Microsoft Messaging può essere utilizzata per trasmettere informazioni da un sistema a un altro o un componente a un altro.

    
risposta data 13.02.2011 - 17:51
fonte

Leggi altre domande sui tag