Invio di una grande quantità di messaggi asincroni

1

Lo scenario è questo: ho un servizio basato sul web che esegue un'elaborazione regolare delle richieste e sta facendo persistenza in db, ecc. La risposta rapida al client è cruciale. Così ora la richiesta media è di circa 100ms che è grande.

Il problema è che ho bisogno di inviare una richiesta analizzata che ricevo al servizio di terze parti su un altro server. Per mantenere la velocità dello script e la risposta al client, devo farlo in modo asincrono. Quindi basta inviare al servizio e andare avanti con lo script di esecuzione.

La mia attuale configurazione è così. Sto usando PHP e MySql sul server CentOS. Ho il servizio di nodo che ascolta i messaggi localmente su una determinata porta. Dall'altra parte ho lo script node.js che riceve il messaggio e quindi genera il processo php-cli che dà il messaggio di script php come argomento e che quindi lo script comunica con il server di terze parti.

Il primo limite qui è che sto usando php lib (devo farlo) che mi sta fornendo un'interfaccia per comunicare con il servizio di terze parti che usa SOAP. Quindi devo chiamare tutti i metodi di libs in PHP. Non posso usare altre lingue.

Il problema è anche che il servizio dei nodi può essere abbastanza instabile e sinceramente voglio allontanarmi il più possibile dal nodo che gestisce questo.

Anche a volte ottengo troppe connessioni sul database perché devo scrivere su db che la richiesta non è più in sospeso e che è chiusa o fallita quando ricevo la risposta. Pertanto, se il servizio di terze parti non è disponibile o richiede troppo tempo, si blocca solo perché è in corso.

Quindi quali sono alcuni dei tuoi consigli. Sto pensando di usare RabbitMQ invece di node.js o forse usare la funzione pub / sub di Redis?

Qualcuno ha dovuto fare qualcosa di simile in queste tecnologie?

P.S. Ho in media circa 3 milioni di richieste sul server in un giorno.

    
posta madeye 09.03.2016 - 15:38
fonte

0 risposte