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.
Wie viele Empfänger? Wenn Sie weniger als zehn Empfänger haben, können Sie mehrere Knoten-zu-Knoten-Verbindungen in Betracht ziehen. – mcoolive