Meccanismi per garantire che i sistemi distribuiti non si sincronizzino (anti-sincronizzazione)

2

Abbiamo un servizio che basato su un timer locale fa una richiesta GET al nostro server su Azure per trasmettere alcune informazioni da salvare sul server. In questa fase stiamo solo testando e stiamo scoprendo che alcuni dei client si stanno sincronizzando in modo da colpire il server allo stesso tempo. Questo sembra essere causato da ritardi all'interno dell'infrastruttura azzurra (lunga storia dietro quella), ad esempio il database non è disponibile per un minuto o così. Questo fa sì che i client si sincronizzino.

Quindi la risposta ovvia per noi è introdurre un po 'di casualità nel timer dei client per assicurare una distribuzione ragionevolmente uniforme sul nostro server dato che il problema è quando andiamo a vivere ucciderà il nostro server se molti client sono sincronizzati.

Quanta casualità è richiesta per assicurare una distribuzione uniforme? La ricerca aumenta i lotti sulla sincronizzazione (specialmente java) ma non i suggerimenti sull'anti-sincronizzazione.

La domanda si presenta in due forme: a) Qual è la terminologia corretta per questo problema in modo che possa trovare i termini del dominio giusto per ottenere la teoria dietro questo > b) Suggerimenti su come definire la quantità di casualità diversa dalla semplice ipotesi e impostazione di elaborati test ed errori.

Qualsiasi aiuto apprezzato.

    
posta miltonb 17.11.2015 - 05:31
fonte

1 risposta

2

Mi vengono in mente due approcci.

Cron consente di specificare ciò che equivale a un ordine di grandezza piuttosto che a un momento specifico. Se hai bisogno che questi client colpiscano un endpoint su un intervallo fisso, questa potrebbe essere una soluzione allettante.

TCP gestisce le collisioni attraverso il back-off esponenziale, che ha il rovescio della medaglia che richiede una quantità irregolare di tempo per il completamento. Questo può essere un po 'imbarazzante a meno che il client non sia stato scritto come servizio asincrono. Poiché il comportamento corrente induce già un ritardo, è più probabile che migliori le prestazioni rispetto a degradarlo.

    
risposta data 17.11.2015 - 06:22
fonte

Leggi altre domande sui tag