Chiamate API multiple che generano potenzialmente più Websocket - Threading vs Async

1

Sto progettando un programma con il flusso come descritto di seguito. Nota, queste sono tutte chiamate di rete, non esiste I / O di sistema (disco rigido).

Inizialmente, è necessario che vengano eseguite più chiamate API indipendenti , che non si basano affatto sugli altri. La risposta da questi verrà elaborata e se soddisfano determinati criteri, dovrebbero generare una connessione web-socket e interrompere le loro chiamate API fino alla chiusura del socket. Ad esempio, se ci sono 4 chiamate API in corso e uno soddisfa i requisiti, si ferma e si connette a un websocket. Ora dovrebbero esserci 3 chiamate API e un websocket che riceve i dati. Non dovrebbero mai esserci più web socket del numero di chiamate API iniziali.

Ora, anche le websocket stanno elaborando i dati ricevuti alla ricerca di requisiti specifici. Se uno qualsiasi dei socket soddisfa il requisito, viene collegato un websocket SECOND . A questo punto, tutte le chiamate / web socket API in sospeso dovrebbero chiudere / interrompere la loro elaborazione. Solo questa nuova websocket dovrebbe essere in esecuzione alla ricerca della sua serie finale di requisiti. Una volta raggiunto questo set finale, l'intero processo dovrebbe essere riavviato (ovvero le chiamate API si riavviano).

Lascia che ti guidi attraverso uno scenario: 4 chiamate API iniziano. Dopo 3 secondi si soddisfano i requisiti. Ora ci sono ancora 3 chiamate API STILL e 1 websocket in esecuzione. Dopo 2 secondi, la websocket non soddisfa i suoi requisiti. Ora ci sono ancora 4 chiamate API che si ripetono. Presto, 2 chiamate API soddisfano entrambi i requisiti. Ora ci sono 2 chiamate API e 2 websocket in ascolto. Dopo altri 3 secondi, una delle websocket soddisfa i suoi requisiti. Tutte le web socket e le chiamate API dovrebbero interrompersi e viene aperta una websocket finale. Dopo questo ultimo uno ha esito positivo o negativo, le 4 chiamate API iniziali devono essere riavviate e il processo si ripete da capo.

La mia domanda: trarrebbe vantaggio da qualche forma di threading (invece di usare solo async) e, in caso affermativo, quale metodo useresti? Ogni chiamata API sul proprio thread che genera anche le sue seguenti web socket su di esso? Forse tutte le chiamate API sul singolo thread, ma poi generano websocket sul loro thread? Forse l'intero programma può essere eseguito in un singolo thread con buone prestazioni? Le operazioni sono sensibili al tempo, quindi più velocemente posso determinare i requisiti che si incontrano meglio è! Grazie in anticipo!

    
posta CuriousGeorge 21.12.2017 - 22:35
fonte

1 risposta

0

Se l'API sottostante esegue una query su un database relazionale, il parallelismo dei dati partizionato può essere utile:

ForBIandanalyticsqueriesforwhichlargeramountsofdataarelikelytobeprocessed,thequeryexecutionarchitectureshouldbeabletoparallelizeatmultiplelevels.Thefirstlevelispartitionedparallelism,sothatmultipleprocessesforanoperationsuchasjoinoraggregationareexecutedinparallel.

L'APIpuòessereconfigurataindiversimodi.Adesempio:

ForeachexecutableSQLstatementinacontext,thefirstrun-timeservicescallalwaystriestoobtainalatch.Ifitissuccessful,itcontinuesprocessing.Ifnot(becauseanSQLstatementinanotherthreadofthesamecontextalreadyhasthelatch),thecallisblockedonasignalingsemaphoreuntilthatsemaphoreisposted,atwhichpointthecallgetsthelatchandcontinuesprocessing.ThelatchishelduntiltheSQLstatementhascompletedprocessing,atwhichtimeitisreleasedbythelastrun-timeservicescallthatwasgeneratedforthatparticularSQLstatement.ThenetresultisthateachSQLstatementwithinacontextisexecutedasanatomicunit,eventhoughotherthreadsmayalsobetryingtoexecuteSQLstatementsatthesametime.Thisactionensuresthatinternaldatastructuresarenotalteredbydifferentthreadsatthesametime.APIsalsousethelatchusedbyrun-timeservices;therefore,APIshavethesamerestrictionsasrun-timeservicesroutineswithineachcontext.Contextsmaybeexchangedbetweenthreadsinaprocess,butnotexchangedbetweenprocesses.Oneuseofmultiplecontextsistoprovidesupportforconcurrenttransactions.

Riferimenti

risposta data 29.09.2018 - 02:54
fonte

Leggi altre domande sui tag