Congestione della larghezza di banda in un grande sistema distribuito

-1

Ho lavorato su un grande sistema distribuito in genere con oltre 10.000 clienti che vivono su una singola rete (LAN) che accedono a un insieme centrale di API nel cloud. Non è esattamente un problema impegnativo. Dove diventa interessante è che a ogni cliente può essere richiesto di caricare una grande quantità di dati da un file 1 KiB a un file multi GiB. Una singola richiesta di caricamento avverrà ~ simultaneamente attraverso i client.

Parti del sistema che sono stocastiche:

  • Quali client sono vivi.
  • Da quanti client è richiesto un file.
  • La dimensione del file.
  • Il numero di richieste di file.

La mia domanda è: ci sono buoni documenti bianchi o algoritmi noti che potrebbero essere usati per coordinare tutti i client in modo che non sovraccarichino immediatamente la rete che stanno risiedendo e consumino tutta la larghezza di banda? Il problema principale sarebbe il router periferico poiché hanno risolto la larghezza di banda. Il risultato atteso sarebbe che i clienti escogitino un modo per coordinarsi con se stessi per completare alla fine la richiesta di file mantenendo al minimo l'uso della larghezza di banda e minimizzando la comunicazione con l'API durante questo processo.

Fino ad oggi, sto solo permettendo a un numero fisso di client di trasmettere grandi quantità di dati contemporaneamente. Non è ottimale anche se funziona. La limitazione della velocità standard è fuori dato che il sistema non può semplicemente arrestare le connessioni client poiché sono parte integrante della funzionalità del sistema.

La mia ipotesi sarebbe che qualcuno che lavora con map-reduce si sarebbe imbattuto in un problema simile. Inoltre, ho esaminato la possibilità di creare un protocollo per il voto locale e globale su priorità, simile al processo elettorale di MongoDB.

Esempio

Hai un'azienda di 100 dipendenti con una dorsale di 300x300 su Internet. Hanno client installati su tutti i loro laptop e server. Immaginiamo che ogni dipendente abbia un laptop e ci siano 10 server.

Se non è difficile concepire una situazione in cui ci sono molti file che coprono la maggior parte delle macchine e sono stati richiesti allo stesso tempo. Ciò potrebbe facilmente causare una situazione in cui tutta la larghezza di banda viene consumata per un breve periodo di tempo che influisce sulla consegna di tali file, il che probabilmente influirà sulla capacità del dipendente di svolgere il proprio lavoro.

    
posta icirellik 01.08.2017 - 21:03
fonte

2 risposte

1

Devi implementare il tuo servizio in modo che le richieste falliscano velocemente se vengono consumate troppe risorse o vengono serviti i client. Un interruttore automatico è utile qui. Il server dovrebbe fornire una risposta significativa ai client che hanno tentato in modo che i client sappiano che riprovano più tardi (ad esempio la risposta HTTP 503) ei client devono utilizzare un backoff esponenziale (con un po 'di casualità) per riprovare le richieste.

Limitare le connessioni simultanee potrebbe essere un approccio sufficiente per limitare il consumo della larghezza di banda senza ricorrere al calcolo effettivo della larghezza di banda utilizzata.

    
risposta data 02.08.2017 - 01:01
fonte
0

Questo è davvero un problema di rete piuttosto che uno di applicazione.

Quello che puoi fare è identificare i tipi di traffico a livello di rete. forse con un numero di porta separato? per consentire ad altro traffico di avere la priorità su di esso.

    
risposta data 03.08.2017 - 10:36
fonte

Leggi altre domande sui tag