Poiché abbiamo bisogno di mantenere bassi i tempi di risposta, riceviamo tonnellate di richieste e dobbiamo essenzialmente elaborare ALMOST gli stessi dati (che chiamerò X) ogni richiesta (gli input sono diversi però, quindi possiamo t cache responses), stiamo usando una tecnica in cui prendiamo una nuova copia di X ogni 90 secondi dal database e la memorizziamo localmente in memoria come un elenco python di dizionari, sui nostri server delle applicazioni (stiamo usando uwsgi).
Il nodo nella macchina: ci sono analisi temporanee di cui dobbiamo tenere traccia in questi 90 secondi per regolare i nostri dati ogni iterazione, e ogni iterazione dipende da ciò che calcoliamo dall'ultima iterazione.
Il problema è che abbiamo più server di applicazioni che memorizzano gli stessi dati, X, in memoria e ognuno di questi server ha bisogno di aggiornare X allo stesso tempo per mantenere i calcoli coerenti per l'intervallo successivo. Ho provato alcune tecniche, come trasmettere un messaggio dopo ogni calcolo per ricaricare la X di ogni server, ma non è stato così efficace come spero, e rende le cose più complicate.
Dovrei dire, il motivo per cui non abbiamo usato memcached o qualcosa di simile è perché non vogliamo sacrificare alcuna velocità se possiamo. Forse sono ignorante su quanto velocemente possiamo recuperare e caricare la lista in oggetti python da memcached.
Capisco che la mia spiegazione non sia la più grande e risponderò a qualsiasi domanda per dare un quadro migliore della situazione.
Modifica: siamo a circa 5000 richieste al secondo, la dimensione dei dati che elaboriamo è di circa 2 MB al momento, ma continuerà a crescere, quindi vorremmo evitare di inviarlo via cavo per ogni richiesta.