Richieste di arricciatura 100K

4

Sto usando curl_multi_exec per elaborare più di 100.000 richieste. Faccio 100 richieste alla volta perché curl_multi_exec può gestire solo 100 richieste alla volta per ottenere infine richieste di 100K. Abbiamo aggiunto più server a questo sistema per distribuire il carico [stiamo utilizzando il bilanciamento del carico]. Qual è il modo migliore per gestire le richieste 100K di curl e utilizzare questi server aggiuntivi? Qual è il lato negativo (diverso dal tempo) della gestione di molte richieste su un server? Come posso utilizzare i server aggiuntivi per gestire queste richieste?

Stavo pensando di far gestire a ciascun server un batch di richieste (come un server gestisce 500 richieste, un altro 500, un altro 500, ecc.

Per elaborare - in sostanza, stiamo usando arricciatura per inviare oltre 100.000 richieste a server di terze parti. Il problema con l'utilizzo di un solo server è che esiste un limite di memoria nel numero di richieste che un server può gestire. Quindi abbiamo deciso di aggiungere altri server, ma non siamo sicuri di come progettare questo sistema per utilizzare curl per gestire le numerose richieste ..

Il server di terze parti è un'API come Facebook; sono consapevoli che faremo molte richieste ai loro server.

Per il bilanciamento del carico, utilizziamo il cloud server di Rackspace, in pratica il bilanciamento del carico indirizza le richieste in entrata a server separati.

    
posta Pota Onasys 27.12.2011 - 23:07
fonte

2 risposte

3

Il modo in cui stai facendo il bilanciamento del carico sembra un po 'fuori di me. Il bilanciamento del carico cloud di Rackspace si trova di fronte ai server e bilancia le richieste in entrata tra loro. Questo è ottimo per bilanciare le richieste in arrivo.

Tuttavia, stai facendo richieste in uscita. Questo dovrebbe essere un demone in esecuzione sui tuoi server. E se lo è, allora il bilanciamento del carico del frontend non ha alcun effetto. Quello che devi fare è dividere le attività che stai facendo e far processare i lavoratori in parallelo.

Il modo in cui di solito lo fai è usando un qualche tipo di messaggio o coda di lavoro. Gearman è una possibilità. Puoi anche usare una coda di messaggi come rabbitmq. Personalmente mi piace davvero zeromq.

A differenza di altri sistemi di accodamento, zeromq non è un demone. Non è un server che fa da coda. È una libreria che ti consente di creare code e simultaneità. Consiglio vivamente di guardare questa presentazione .

Ciò che ti permette di fare è creare una quantità di lavoratori che lavorano. Nel tuo caso invieranno richieste API. E poi puoi creare un sink che raccolga i risultati di quelle chiamate. Quindi ogni lavoratore ha il proprio processo e si arriccia multi su 100 richieste. E se si generano 100 o 1000 processi di lavoro (possono essere distribuiti tra macchine, connessi tramite TCP), saranno in grado di eseguire il lavoro in parallelo.

Penso che si adatti bene al tuo caso d'uso: ZeroMQ .

    
risposta data 30.12.2011 - 18:54
fonte
0

Dato lo sfondo fornito finora, sembra che Gearman potrebbe essere utile: link

È un ottimo strumento che è molto facile da usare in PHP ed è stato creato appositamente per aiutare

...farm out work to other machines or processes...

Esistono alcuni casi di utilizzo eccezionali documentati all'interno del sito che possono aiutarti a iniziare.

    
risposta data 30.12.2011 - 08:58
fonte

Leggi altre domande sui tag