Usiamo il sedano per effettuare chiamate http di terze parti. Abbiamo circa 100+ attività che chiamano semplicemente le chiamate API HTTP di terze parti. Alcune attività chiamano le API in blocco, ad esempio mezzo milione di richieste alle 4 del mattino, mentre alcune sono continue chiamate API che ricevono richieste quasi una o due volte al secondo.Ottimizzazione di Celery per chiamate HTTP di terzi
La maggior parte dei tempi di risposta alle chiamate API è compresa tra 500 e 800 ms.
Stiamo vedendo tassi di consegna molto lenti con il sedano. Per la maggior parte delle attività di cui sopra, la velocità massima di consegna è di circa 100/s (max) a quasi 1/s (min). Credo che questo sia molto povero e qualcosa è decisamente sbagliato, ma non sono in grado di capire di cosa si tratta.
Abbiamo iniziato con un cluster di 3 server e ne abbiamo fatto un cluster di 7 server, ma senza miglioramenti. Abbiamo provato con diverse impostazioni di concorrenza da scala automatica a fisso 10, 20, 50, 100 lavoratori. Non ci sono backend di risultati e il nostro broker è RabbitMQ.
Poiché il tempo di esecuzione del nostro task è molto piccolo, meno di un secondo per la maggior parte, abbiamo anche provato a rendere il numero di prefetch illimitato a vari valori.
--time-limit=1800 --maxtasksperchild=1000 -Ofair -c 64 --config=celeryconfig_production
server sono 64 G RAM, Centos 6.6.
Puoi darmi un'idea di cosa potrebbe essere sbagliato o di indicazioni su come risolverlo?
Dovremmo andare con i gevents? Anche se non ho idea di cosa sia.
Quanto sono piene le code in RabbitMQ? RabbitMQ è più veloce quando le code sono vuote. È possibile monitorare l'utilizzo della CPU della macchina RabbitMQ. Se si vede un forte utilizzo della CPU, probabilmente, è perché RabbitMQ sta facendo molto per far fronte alle enormi dimensioni della coda. – LearnerEarner
Potrebbe sembrare sciocco e sicuramente hai prestato attenzione a questo ma hai controllato se il server di terze parti si sta comportando bene sotto carico? Sta ancora rispondendo a 500-800 ms anche quando lo colpisci con molte richieste simultanee? – LearnerEarner
http://www.rabbitmq.com/blog/2012/05/11/some-queuing-theory-throughput-latency-and-bandwidth/ – LearnerEarner