Abbiamo un sistema che fornisce un numero di richieste, effettua un numero equivalente di chiamate a un'API di terze parti esterna. Dato che si tratta di un'attività associata all'I/O, al momento utilizziamo un pool di thread memorizzato nella cache di dimensione 20 per soddisfare queste richieste. Diversa dalle precedenti, è la soluzione ai:Ridimensionamento software/hardware per un gran numero di richieste API esterne?
usare meno macchine a più nuclei (meno context-switching, in grado di supportare più thread simultanei)
o
uso più macchine sfruttando commodity/hardware economico (scatole per pizza)
Il numero di richieste che riceviamo un giorno è dell'ordine di milioni di persone.
Stiamo usando Java, quindi i thread qui sono kernel, non "verdi".
altri punti/pensieri:
- Hadoop è comunemente usato per problemi di questa natura, ma questo deve essere in tempo reale contro lo stereotipo dati offline mining.
- Le richieste API richiedere da 200 ms a 2 secondi in media
- Non v'è stato condiviso tra le richieste
- Il partito terzo in questione è in grado di servire più richieste di quanto possiamo fuoco (pagamenti vendor).
Hai uno stato condiviso, utilizzato per gestire le richieste? Se è così, con quale frequenza sta cambiando? Qual è una dimensione di questo stato condiviso? –
Qual è il limite per l'API di terze parti?Non ha senso ridimensionare il tuo stack se l'API che chiami è ancora il collo di bottiglia. È possibile memorizzare nella cache i dati ricevuti o utilizzare i dati di una chiamata il servizio/fornire molti dei vostri clienti contemporaneamente? – Paolo
Modificato il mio post originale per rispondere alle domande sopra. Le chiamate sono completamente indipendenti, quindi non ci sono dati da memorizzare nella cache. – smonky