16

Wenn ein Sender eine relativ große Datenmenge (z. B. mehrere Megabyte pro Sekunde) zuverlässig über Ethernet an eine bescheidene Anzahl von Empfängern (weniger als ein Dutzend) im selben Subnetz senden muss, was ist am effizientesten Protokoll? Durch zuverlässig Ich meine, dass, wenn ein Paket verloren geht, das Protokoll sicherstellt, dass es erneut gesendet wird, so dass es keinen Datenverlust in irgendeinem Empfänger gibt. Der Begriff effizient ist viel schwieriger zu definieren, aber sagen wir, wir wollen den Durchsatz maximieren und Netzwerkbandbreite mit bescheidener CPU-Auslastung auf beiden Seiten minimieren. Das ist immer noch keine klare Definition, aber es ist das Beste, was ich mir vorstellen kann. Entweder ein streamorientiertes oder ein nachrichtenorientiertes Protokoll wäre akzeptabel.Welches ist das effizienteste Protokoll für zuverlässiges Multicast?

Ich würde echte Beispiele schätzen und ich werde gerne subjektive Antworten akzeptieren, d. H. Was ist Ihr Lieblings-Multicast-Protokoll, wenn Sie seine Vor- und Nachteile erklären können.

+0

Wie viele Empfänger? Wenn Sie weniger als zehn Empfänger haben, können Sie mehrere Knoten-zu-Knoten-Verbindungen in Betracht ziehen. – mcoolive

Antwort

1

BitTorrent!

Nein, ernsthaft. Vielleicht möchten Sie read up on it.

UDP ist nützlich für Multicast, aber es bietet nicht die Garantien, die Sie suchen - BitTorrent erfordert mehr als eine vollständige Kopie von der ursprünglichen Quelle zu übertragen, aber es ist immer noch ziemlich effizient und bietet vor allem nützliche Garantien wenn man bedenkt, wie viel Prüfsummen bei jedem "Stück" von Daten, die weitergegeben werden, gemacht werden.

+0

Danke, BitTorrent hatte ich nie in Betracht gezogen. Es wird nicht für meine Anwendung geeignet sein, aber es ist sowieso eine interessante Idee. – JayMcClellan

+0

BitTorrent präsentiert viele interessante Ideen in Netzwerkprotokollen und Protokolldesign. – user109878

+2

Er fragte speziell nach einem effizienten Protokoll für die Verteilung von Daten in einem Subnetz. Während BitTorrent für die Freigabe großer Dateien mit mehreren Peers hervorragend geeignet ist, ist es in einer LAN-Einstellung überhaupt nicht effizient. – liwp

21

Beispiel aus der realen Welt: TIBCO Rendezvous.

Die Daten werden über Multicast mit einer Sequenznummer gesendet. Ein Client, der eine fehlende Sequenznummer erkennt, sendet eine Nachricht an die Multicast-Gruppe "hey, ich habe das Paket 12345 verpasst". Der Server führt diese Daten erneut aus. Der Server verfügt über eine konfigurierbare Datenmenge zum Puffern, falls ein Client dies anfordert.

Das Problem:

Stellen Sie sich einen einzigen Kunden hat, die Hälfte seiner Pakete fällt, und 100 gesunden Kunden. Dieser Client sendet eine Anforderung für die erneute Übertragung für jedes andere Paket. Der Server beginnt, einen der fehlerfreien Clients ausreichend zu belasten, so dass er beginnt, Pakete zu verwerfen und erneute Übertragungen anzufordern. Die zusätzliche Belastung von diesem bewirkt, dass ein anderer fehlerfreier Client beginnt, erneute Übertragungen anzufordern. Und so weiter. Ein Stauzusammenbruch resultiert.

Tibco bietet eine Problemumgehung, einen Teilnehmer abzutrennen, der zu viele Neuübertragungsanforderungen sendet. Dies erschwert es einem einzelnen Teilnehmer, einen Stauzusammenbruch zu verursachen.

Die andere Problemumgehung zur Begrenzung des Risikos des Stauzusammenbruchs besteht darin, die Datenmenge zu begrenzen, die ein Server erneut übertragen möchte.

Tibco sollte auch Heuristiken im Client und Server zur Verfügung stellen, ob Multicasting oder Unicast für die erneute Übertragungsanforderung und die erneute Übertragung selbst durchgeführt werden soll. Sie nicht. (Für den Server könnten Sie die Neuübertragung einschnappen, wenn nur ein Client sie in einem bestimmten Zeitfenster anfordert, für den Client können Sie die Neuübertragungsanforderung einkreisen, wenn der Server Ihnen im neu übertragenen Paket mitgeteilt hat, dass Sie der einzige sind Sendewiederholungen und um die Anfragen in Zukunft Unicast zu senden)

Grundsätzlich müssen Sie entscheiden, wie stark Sie sicherstellen wollen, dass Kunden Daten erhalten, gegen das Risiko des Stauzusammenbruchs. Sie müssen Vermutungen darüber anstellen, wo ein Paket gelöscht wurde und ob die Neuübertragung am effizientesten Unicast oder Multicast gesendet wird.Wenn der Server die Daten versteht und entscheiden kann, keine erneute Übertragung zu senden, wenn die aktualisierten Daten trotzdem gesendet werden (was die Neuübertragung irrelevant macht), sind Sie in einer viel besseren Position als ein Framework wie Tibco RV.

Manchmal kann das Verstehen der Daten zu falschen Annahmen führen. Zum Beispiel, Marktdaten - es scheint zunächst OK zu sein, ein Angebot nicht erneut zu senden, wenn es ein aktualisiertes Angebot gibt. Aber später können Sie feststellen, dass ein Abonnent einen Kursverlauf verfolgt und nicht nur versucht, den aktuellen Kurs zu verfolgen. Vielleicht haben Sie unterschiedliche Anforderungen je nach Teilnehmer, und einige Clients bevorzugen Unicast TCP vs Multicast.

Irgendwann müssen Sie auf dem Server willkürliche Entscheidungen darüber treffen, wie viele Daten bei erneuten Übertragungen oder langsamen Clients gepuffert werden sollen.

+0

+1 sehr klare prägnante Erklärung. Soweit ich weiß, verwendet Tibco das PGM-Protokoll und von der OpenPGM-Website, ist es klar, dass es zuverlässiges Multicasting bietet. Ich bin mir jedoch nicht sicher, ob es auch eine geringe Latenz garantieren kann. Ist es möglich, Echtzeit-Multicast zu haben? Wenn nicht mit PGM, gibt es eine verfügbare Technologie? Danke vielmals. – chepukha

+0

Ja Tibco bietet niedrige Latenz. Ein typischer Anwendungsfall ist das Senden finanzieller Werte auf vielen Bildschirmen in einem Raum (demselben LAN). Aufgrund des Risikos von Multicast-Storm (wie oben erläutert) möchten wir das Netzwerk in getrennte Multicast-Zonen aufteilen. Es ist kein junges Produkt, jetzt gibt es andere Lösungen. – mcoolive

0

Dies ist eine offene Forschungsfrage; Es gibt kommerzielle Lösungen, die jedoch unerschwinglich teuer sind. Viel Glück.

0

Ich denke, Sie sollten vielleicht einen Blick auf Stream Control Transmission Protocol als Alternative zu UDP/Multicasting, wenn Sie wirklich zuverlässige gleichzeitige Übertragung an mehrere Clients wollen.

+0

Alan: Bestätigen Sie, dass mit diesem Protokoll die gleichen Informationen von einem Endpunkt zu mehreren Clients "gleichzeitig" übertragen werden können? Ich untersuche derzeit die Möglichkeit, sie für den Versand von Finanzmarktdaten zu verwenden. – Guillaume07

+0

SCTP und Unicast im Allgemeinen sind für das, was das OP versucht, nicht effizient: Übertragung von "mehreren Megabyte pro Sekunde" an mehrere Empfänger und "Maximierung des Durchsatzes und Minimierung der Netzwerkbandbreite". Der Bandbreitenverbrauch wächst linear mit der Anzahl der Empfänger, und eine 1GbE-Verbindung wäre bei 10 MB/s mit 12 Empfängern gesättigt. Unter Verwendung von zuverlässigem Multicast, z.B. PGM, ist die Bandbreite unter idealen Umständen (kein Paketverlust) vollständig unabhängig von der Anzahl der Empfänger, d. H. Eine 1GbE-Verbindung wäre weniger als 10% gesättigt, wenn 10MB/s ausgeführt würden. –

+0

Ist SCTP auch für mehrere Clients besser als TCP? TCP ist sogar in Hardware, d. H. NICs, stark optimiert. Das bedeutet oft eine stark reduzierte CPU-Auslastung (etwas, an dem das OP auch interessiert ist), wie Rx Coalescing, Checksum Offload und so weiter. Im Allgemeinen wird es jedem Neuling schwerfallen, das zu schlagen. Nichtsdestotrotz hoffe ich, dass SCTP und seine Konzepte, insbesondere das effiziente Multiplexing über IP, die Akzeptanz finden werden, die sie verdienen. –

5

Im Anschluss an TIBCO ist das PGM-Protokoll ein offener Standard für zuverlässiges Multicasting mit vielen Optimierungen, um bei sehr großen Maßstäben mit Netzwerkelementbeschleunigung effizient arbeiten zu können. PGM wurde von TIBCO und CISCO entwickelt und ist ein optionales Protokoll unter TIBCO Rendezvous. Das Standardprotokoll ist TRDP, das im Design sehr ähnlich ist.

können Sie theoretische Wirkungsgrad berechnen, wie hier für PGM aufgeführt,

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

Leider reale Welt Netzelemente, NICs und allgemeine Computerarchitekturen führen viel weniger als die theoretischen Maxima.

1

Darf ich vorschlagen UFTP. Es verwendet einen NAK-basierten Mechanismus, um zu bestimmen, welche Pakete erneut übertragen werden sollen und hat eine Option für entweder eine feste Übertragungsrate oder eine Überlastungssteuerung unter Verwendung von TFMCC.

Jede Datei wird in Durchgängen gesendet, wobei der erste Durchgang die gesamte Datei überträgt, während nachfolgende Durchgänge nur Sendewiederholungen senden. Jeder Client verfolgt, welche Pakete empfangen und welche verpasst wurden. An bestimmten Kontrollpunkten (und am Ende eines Passes), wenn der Empfänger irgendwelche Pakete seit dem letzten Kontrollpunkt verpasste, wird er einen NAK senden, der die verpassten Pakete auflistet. Dies hat den Vorteil, dass verlustarme Empfänger vor hochverlustigen Empfängern enden. UFTP kann auch so konfiguriert werden, dass Empfänger fallengelassen werden, deren Prozentsatz an NAKs einen bestimmten Schwellenwert überschreitet.

Durch die Begrenzung von NAKs auf nur Empfänger, die einen Verlust aufweisen, wird das Risiko eines Stauzusammenbruchs reduziert, wodurch der Sender vom Empfänger-Feedback überwältigt wird.

Offenlegung: Autor von UFTP.

Verwandte Themen