2010-08-26 10 views
8

Sfondo

Ho un'app Web che creerà un'immagine dall'input dell'utente. La creazione dell'immagine potrebbe richiedere richiedere un paio di secondi.Questa app Web richiede una coda di attività?

Problema

Se lascio il thread del server, che gestisce la richiesta/risposta anche generare l'immagine, che sta per impegnare un thread per un paio di secondi, e, eventualmente, impantanarsi il mio server, influenzano le prestazioni , uccidere i cuccioli, ecc

domanda

Dovrei usare una coda compito, come ad esempio Celery, in modo che il server può mano fuori la creazione di immagini, e tornare alla gestione delle richieste/risposte? Non ho alcun problema nel lasciare che l'utente che sta creando l'immagine attenda, ma non voglio che abbia effetto sull'accesso di altre persone al sito.

risposta

6

Ho intenzione di dire di no - per ora.

  • Un paio di secondi non è così lungo.
  • Dovrai comunque implementare una sorta di polling (o elaborazione di comete) per riportare l'immagine all'utente.
  • Renderà il sistema più complesso.
  • Progettare il sistema in modo che l'aggiunta di una coda di attività in un secondo momento sia fattibile e facile.

Quindi, prima è semplice e funziona, ma tieni presente che potresti aggiungere una coda di attività in un secondo momento.

Implementare quella coda di attività quando/se è necessario ridimensionare.

+1

+1: E ... se utilizzi Apache, gestirà una grande quantità di buffer e concorrenza per te. In effetti con mod_wsgi, puoi avere molti, molti processi di back-end in esecuzione contemporaneamente. Fino al tuo benchmark, non puoi esserne sicuro, ma il carico di lavoro che può gestire è spesso enorme. –

+0

Ok. Grazie per avermi salvato N ore di lavoro. La preoccupazione principale per me era che un paio di secondi era così lungo .. Uno dei miei obiettivi personali era fornire una buona interfaccia utente, e pensavo che l'utente fissasse uno schermo vuoto per un paio di secondi mentre l'immagine veniva generata e inviata, sarebbe sotto la pari Se c'era una coda, potevo almeno sondare e tenerli occupati con un messaggio o qualcosa da guardare. –

+0

@random_person: "fissando uno schermo vuoto"? Come può una pagina HTML presentare una "schermata vuota"? Come si fa a farlo? Principalmente quando invio un modulo, fisso la pagina precedente per un po '. Quindi la pagina viene sostituita improvvisamente. Inoltre, molte persone fanno i fannulloni di fantasia in Javascript per mostrare qualche azione. Ma non so come creare uno "schermo bianco" in un browser. Puoi spiegarlo? –

0

Ho anche un sito di generazione di immagini (Names4Frames) e ho fatto cose come questa tramite AJAX (e PHP). Non ho avuto alcun rallentamento apprezzabile (o cuccioli morti), ma il sito in questione non genera enormi quantità di traffico. Non sono un esperto di thread e, sinceramente, non sono sicuro al 100% quale sia la tua preoccupazione esatta e quali tecnologie stai utilizzando ...

Fondamentalmente una pagina richiede l'immagine da un'altra pagina (Forse si trova anche su un altro server), e quando viene eseguita la seconda pagina restituisce alla prima qualsiasi informazione pertinente sull'immagine per scopi di elaborazione/visualizzazione. Se parliamo solo di pochi secondi, non riesco a vedere che sia un vero problema, a meno che tu non abbia a che fare con enormi quantità di visitatori che utilizzano costantemente questo servizio di creazione di immagini.

0

regola generale: utilizzare una coda se le attività possono accumularsi.

Nel tuo caso, l'attività potrebbe richiedere fino a 2 secondi, supponendo 8 ore al giorno, è possibile eseguire fino a 8 * 60 * 60/2 = 14400 immagini al giorno senza concorrenza. Se ricevi oltre 7200 richieste al giorno, hai una probabilità del 50% di sovrapporle. Esistono analisi più sofisticate per mostrare il livello previsto di sovrapposizione che è probabile ottenere; ma sembra sicuro che potresti fare più di mille immagini al giorno prima di sovraccaricarti.

Ora la domanda sembra più semplice: pensi che otterrai più di mille o due creazioni di immagini al giorno presto? Se è così, allora imposta una coda; se no, lascialo per dopo.

In ogni caso, tenere buoni registri; assicurati di sapere quando si verificano sovrapposizioni di elaborazione. Ricorda che una volta che due task vengono elaborati contemporaneamente, impiegheranno più tempo, aumentando le probabilità che un terzo arrivi prima di finire gli altri due, e un quarto ... quando arrivi a una soglia invisibile, le prestazioni crolleranno drasticamente. Non perdere il sonno su questo, non lasciarlo accadere prima di notare.

Problemi correlati