16

Quando un mittente deve eseguire il multicast di un volume relativamente grande di dati (ad esempio diversi megabyte al secondo) in modo affidabile su Ethernet per un numero modesto di ricevitori (ad esempio meno di una dozzina) nella stessa sottorete, qual è il più efficiente protocollo? Con affidabile Intendo dire che se un pacchetto viene perso, il protocollo assicura che venga inviato di nuovo in modo tale che non ci sia perdita di dati in nessun ricevitore. Il termine efficiente è molto più difficile da definire, ma diciamo che vogliamo massimizzare il throughput e ridurre al minimo la larghezza di banda della rete con un utilizzo della CPU modesto su entrambe le estremità. Non è ancora una definizione chiara, ma è il meglio che riesco a trovare. Un protocollo orientato al flusso o orientato ai messaggi sarebbe accettabile.Qual è il protocollo più efficiente per il multicast affidabile?

Apprezzerei esempi del mondo reale e accetterò volentieri le risposte soggettive, cioè qual è il tuo protocollo multicast preferito, se puoi spiegare i suoi pro e contro.

+0

Quanti ricevitori? Se si dispone di meno di dieci ricevitori, è possibile prendere in considerazione diverse comunicazioni da nodo a nodo. – mcoolive

risposta

1

BitTorrent!

No, sul serio. Potresti volere read up on it.

UDP è utile per il multicast ma non fornisce le garanzie che stai cercando - BitTorrent richiederà di trasmettere più di una copia completa dalla fonte originale, ma è ancora abbastanza efficiente e fornisce utili garanzie, in particolare considerando quanto viene eseguito il checksum su ogni "pezzo" di dati trasmessi.

+0

Grazie, non avevo mai considerato BitTorrent. Non sarà adatto alla mia applicazione ma è comunque un'idea interessante. – JayMcClellan

+0

BitTorrent presenta molte idee interessanti nei protocolli di rete e nella progettazione del protocollo. – user109878

+2

Ha chiesto specificamente un protocollo efficiente per la distribuzione dei dati su una sottorete. Mentre BitTorrent è ottimo per condividere file di grandi dimensioni con più peer, non è affatto efficiente in una LAN. – liwp

21

Esempio del mondo reale: TIBCO Rendezvous.

I dati vengono inviati tramite multicast con un numero di sequenza. Un client che rileva un numero di sequenza mancante invia un messaggio al gruppo multicast "hey, ho perso il pacchetto 12345". Il server ri-multicast fuori quei dati. Il server ha una quantità configurabile di dati da memorizzare nel caso in cui un client lo richieda.

Il problema:

immaginare di avere un unico cliente che scende metà dei suoi pacchetti, e 100 clienti sani. Questo client invia una richiesta di ritrasmissione per ogni altro pacchetto. Il server inizia a causare un carico sufficiente su uno dei client sani in modo che inizi a rilasciare pacchetti e richiedere ritrasmissioni. Il carico aggiuntivo da ciò causa che un altro client sano inizi a richiedere le ritrasmissioni. E così via. Una congestione collassa i risultati.

Tibco fornisce una soluzione alternativa per interrompere un utente che invia troppe richieste di ritrasmissione. Ciò rende più difficile per un singolo abbonato causare un collasso di congestione.

L'altro modo per limitare il rischio di compressione della congestione è limitare la quantità di dati che un server è disposto a ritrasmettere.

Tibco deve anche fornire l'euristica nel client e nel server per multicastare o unicast la richiesta di ritrasmissione e la ritrasmissione stessa. Non lo fanno. (Per il server, è possibile unicast della ritrasmissione se solo un client lo ha richiesto in una determinata finestra temporale, per il client è possibile unicast la richiesta di ritrasmissione se il server ti ha detto - nel pacchetto ritrasmesso - che sei l'unico a richiedere ritrasmissioni e per favore unicast le richieste in futuro)

Fondamentalmente dovrete decidere tra quanto forte volete garantire che i clienti ricevano dati rispetto al rischio di crollo della congestione. Dovrete fare ipotesi su dove un pacchetto è stato rilasciato e se la ritrasmissione viene inviata in modo più efficiente unicast o multicast.Se il server comprende i dati e può decidere di non inviare una ritrasmissione se vi sono comunque dati aggiornati da inviare (il che rende irrilevante la ritrasmissione), ci si trova in una posizione molto migliore rispetto a un framework come Tibco RV.

A volte la comprensione dei dati può portare a presupposti errati. Ad esempio, dati di mercato - potrebbe sembrare a prima vista OK non ritrasmettere una citazione quando c'è una citazione aggiornata. Ma più tardi, potresti scoprire che un iscritto stava mantenendo una cronologia delle quotazioni, non solo cercando di tenere traccia della citazione corrente. Forse potresti avere requisiti diversi a seconda dell'abbonato, e alcuni clienti preferiranno unicast TCP o multicast.

A un certo punto è necessario prendere decisioni arbitrarie sul server di quanti dati da bufferare in caso di ritrasmissioni o client lenti.

+0

+1 spiegazione succinta molto chiara. Come ho capito, Tibco utilizza il protocollo PGM e dal sito Web OpenPGM, è chiaro che fornisce multicasting affidabile. Tuttavia, non sono sicuro che possa garantire anche una bassa latenza. È possibile avere un multicast affidabile in tempo reale? Se non con PGM, c'è qualche tecnologia disponibile là fuori? Grazie molto. – chepukha

+0

Sì Tibco fornisce una bassa latenza. Un tipico caso d'uso è la trasmissione di valori finanziari su più schermi in una stessa stanza (la stessa LAN). A causa del rischio di tempesta multicast (come spiegato sopra) ci piace tagliare la rete in zone multicast segregate. Non è un prodotto giovane, ora ci sono altre soluzioni. – mcoolive

0

Questa è una domanda di ricerca aperta; ci sono soluzioni commerciali disponibili ma che sono proibitivamente costose. In bocca al lupo.

0

Penso che dovresti forse dare un'occhiata a Stream Control Transmission Protocol in alternativa a UDP/multicasting se vuoi davvero una trasmissione simultanea affidabile a più client.

+0

Alan: Confermate che con questo protocollo le stesse informazioni possono essere trasmesse da un endpoint verso diversi client "simultaneamente"? Attualmente sto studiando la possibilità di usarlo per i dati del mercato finanziario di spedizione. – Guillaume07

+0

SCTP, e unicast in generale, non è efficiente per ciò che l'OP sta cercando di fare: trasferire "diversi megabyte al secondo" a più ricevitori e "massimizzare il throughput e minimizzare la larghezza di banda della rete". Il consumo di larghezza di banda cresce in modo lineare con il numero di ricevitori e un collegamento 1GbE viene saturato a 10 MB/s con 12 ricevitori. Utilizzando un multicast affidabile, ad es. PGM, la larghezza di banda, in circostanze ideali (senza perdita di pacchetti), è completamente indipendente dal numero di ricevitori, cioè un collegamento 1GbE sarebbe inferiore al 10% saturo quando si eseguono 10 MB/s. –

+0

Inoltre, SCTP è migliore per più client di, ad esempio, TCP? TCP è fortemente ottimizzato anche nell'hardware, ad esempio NIC. Ciò significa spesso un consumo di CPU molto ridotto (qualcosa a cui l'OP è anche interessato), come Rx Coalescing, checksum offload e così via. Quindi in generale qualsiasi nuovo arrivato avrà difficoltà a batterlo. Detto questo, spero che SCTP e i suoi concetti, in particolare il multiplexing efficiente su IP, troveranno l'adozione che meritano. –

5

In seguito a TIBCO, il protocollo PGM è un multicast affidabile standard aperto con molte ottimizzazioni per lavorare in modo efficiente su scale molto grandi con l'accelerazione degli elementi di rete. PGM è stato sviluppato da TIBCO e CISCO ed è un protocollo opzionale sotto TIBCO Rendezvous, il protocollo di default è TRDP che è molto simile nel design.

È possibile calcolare l'efficienza teorici, come elencato qui per PGM,

http://code.google.com/p/openpgm/wiki/PgmPerformance

Purtroppo elementi di rete del mondo reale, schede di rete e architetture informatiche generali eseguire molto meno dei massimi teorici.

1

potrei suggerire UFTP. Utilizza un meccanismo basato su NAK per determinare quali pacchetti ritrasmettere e ha un'opzione per una velocità di trasmissione fissa o un controllo di congestione usando TFMCC.

Ogni file viene inviato in passaggi, dove il primo passaggio trasmette l'intero file, mentre i passaggi successivi inviano solo ritrasmissioni. Ogni cliente tiene traccia di quali pacchetti ha ricevuto e quali mancano. A particolari checkpoint (e alla fine di un passaggio), se il destinatario ha perso pacchetti dall'ultimo checkpoint, invierà un NAK che elenca i pacchetti che sono stati persi. Questo ha il vantaggio che i ricevitori a bassa perdita finiranno prima dei ricevitori ad alta perdita. UFTP può anche essere configurato per eliminare i ricevitori la cui percentuale di NAK supera una determinata soglia.

Limitando i NAK ai soli ricevitori che hanno manifestato una perdita, si riduce il rischio di crollo della congestione, che è il mittente che viene travolto dal feedback del ricevitore.

Informativa: autore di UFTP.

Problemi correlati