Provare a utilizzare python-rq
per supportare il back-end della nostra applicazione Web, ma l'inserimento di nuovi lavori richiede molto tempo - fino a 12 secondi.Prestazioni push di lavoro insoddisfacenti con Python RQ
Il colpo di prestazioni si verifica quando si esegue la chiamata di funzione enqueue_call
, in particolare quando aumenta il numero di processi di lavoro connessi al sistema (oltre 200).
il sistema funziona nel modo seguente:
- L'anteriore spinge lavori al server di coda compito. Questo usa la funzione
enqueue_call
per passare argomenti al lavoro (come timeout e ttl), oltre agli argomenti effettivi alla funzione da eseguire. - Più processi (distribuiti su più macchine) sono lavoratori in esecuzione, ciascuno sotto UNIX
screen
. I lavoratori seguono lo schema fornito nella documentazione, eseguendo la funzione di ciclo infinitoWorker.work()
per l'ascolto sulle code. - Durante l'elaborazione, alcune attività ne generano di nuove, di solito nella stessa coda su cui sono in esecuzione.
Circa le infrastrutture:
- Il server Redis che gestisce questa coda compito è dedicato ad esso. Inoltre, la persistenza è disabilitata. È in esecuzione su un server Rackspace da 4 GB.
- Quando si esegue
redis-benchmark
sul server con la coda delle attività, otteniamo risultati superiori a 20000 r/s in media per la maggior parte dei benchmark.
Come possiamo migliorare le prestazioni di spinta per nuovi lavori in una situazione come questa? C'è uno schema migliore che dovremmo usare?
Did commutazione (a sedano) migliorare le prestazioni in modo significativo? Sto vivendo lo stesso problema. –
Attualmente non sto più lavorando allo stesso progetto. Tuttavia, abbiamo continuato a utilizzare 'rq' come back-end, e alla fine i problemi di prestazioni sono stati risolti con la pulizia dell'infrastruttura. Non potrei raccomandare di passare a 'celery' o rimanere con' rq' per il tuo caso d'uso specifico; I * would *, tuttavia, suggerisco di eseguire test. Potrebbe non essere così difficile come penseresti inizialmente, e io ** garantisco che qualsiasi tempo speso con la creazione di buoni test ripagherà alla fine, come meglio comprendi la natura del tuo sistema. Buona fortuna! –