Come garantire che più client non eseguano il polling del server contemporaneamente?

1

Sto creando un'app per Android che parlerà con un servizio Web per ottenere dati. Il servizio web ha un limite di velocità di 100 chiamate al minuto. Esiste un modo, metodo consigliato per garantire che l'app su vari dispositivi non effettui la chiamata al server nello stesso momento. Un modo per scaglionare le richieste su tutti i dispositivi?

    
posta Rasmus 08.10.2014 - 22:08
fonte

4 risposte

10

In sostanza, è necessario eseguire il proxy di quel servizio Web con uno dei tuoi che limita il tasso. I dispositivi non saprebbero nulla l'uno dell'altro e puoi mettere in cache / re-implementare il servizio se hai bisogno di scalare ulteriormente.

    
risposta data 08.10.2014 - 22:44
fonte
4

Se la tua app avrà una base di utenti molto piccola (ad esempio un'app aziendale, con meno di poche centinaia di utenti), potrai fare in modo che ogni client si limiti a controllare il server meno di una volta ogni N / 100 secondi, dove N = numero di client. Aggiungete un po 'di ritardo in più come margine di sicurezza e forse randomizzate un po' quel margine per ridurre la probabilità che i client si accumulino in un dato istante.

Ma attenzione, questa è una soluzione molto bassa. Può funzionare adeguatamente per basi di utenti molto piccole, soprattutto se necessitano di aggiornamenti molto rari. Questo è essenzialmente il modo in cui funzionano i plugin di Twitter e Facebook per i siti di blog WordPress.

Ma se la tua app è molto popolare, non è possibile che siano sufficienti 100 richieste / minuto. Assolutamente no. In tal caso, il servizio proxy di @ Sign è la strada da percorrere. Se l'app ha molto successo, il proxy avrà anche bisogno di essere un cluster multi-macchina con bilanciamento del carico, memorizzazione nella cache, failover ad alta disponibilità e così via.

    
risposta data 08.10.2014 - 23:24
fonte
0

Stai essenzialmente cercando di eseguire il rilevamento delle collisioni nello stesso modo in cui Ethernet e altri protocolli di rete eseguono il rilevamento delle collisioni per i pacchetti di rete in un'impostazione distribuita. Il problema è che non si ha il vantaggio che il protocollo sia a conoscenza di tali scenari se si sta parlando con un server che non si controlla. L'unica vera soluzione in tal caso è quella di delegare tutte le richieste attraverso un intermediario che controlli e quindi renderlo consapevole delle collisioni. Invece di un cavo come nel caso di Ethernet, in pratica hai 100 fili ciascuno dei quali può avere solo una richiesta attiva. Ecco un articolo che dovrebbe essere utile: Il gestore rileva l'accesso multiplo con il rilevamento delle collisioni .

    
risposta data 09.10.2014 - 00:53
fonte
0

è necessario implementare una coda, non il rilevamento delle collisioni, quando i pacchetti si scontrano vengono rinviati dopo le verifiche, si hanno risorse limitate, se si rileva la collisione e si rinviano i dati tutto il tempo, si possono avere molti problemi con il proprio hosting .

Una coda orientata al tempo, che utilizza il tempo come metrica per controllare quante richieste al minuto stai gestendo senza inviare nuovamente i dati.

Solo dicendo.

    
risposta data 09.10.2014 - 20:52
fonte

Leggi altre domande sui tag