{"id":83,"date":"2005-02-24T00:28:21","date_gmt":"2005-02-23T22:28:21","guid":{"rendered":"http:\/\/blogs.bl0rg.net\/netzstaub\/?p=83"},"modified":"2005-02-24T00:28:21","modified_gmt":"2005-02-23T22:28:21","slug":"papierkurzfassung-maintaining-high-bandwidth","status":"publish","type":"post","link":"https:\/\/blogs.bl0rg.net\/netzstaub\/2005\/02\/24\/papierkurzfassung-maintaining-high-bandwidth\/","title":{"rendered":"Papierkurzfassung: Maintaining High Bandwidth&#8230;"},"content":{"rendered":"<p>\nWie versprochen, eine kleine Zusammenfassung des Papiers &#8220;Maintaining High Bandwidth under Dynamic Network Conditions&#8221;, das ich gestern kurz verlinkt hatte. Thema des Artikels ist das Verteilen von Daten in einem Peer-to-Peer Netzwerk, zum Beispiel um ISOs oder Patches zu verteilen, oder Multimediadaten zu verteilen, ohne einen hohen Load auf den &#8220;prim&#228;ren&#8221; Datenverteiler einb&#252;ssen zu m&#252;ssen. Die Daten, die verteilt werden, sind meistens nur von einer einzigen Quelle erh&#228;ltlich, werden aber von vielen Leuten gleichzeitig und schnell gezogen (in dem Artikel, und scheinbar auch woanders, wird dieser Effekt &#8220;flash-crowd effect&#8221; genannt).\n<\/p>\n<p>\nSeit geraumer Zeit gibt es jetzt zum Beispiel BitTorrent, in dem Artikel wird untersucht, wie man ein solches Verfahren verbessern kann. Das Interessante ist aber, dass bei dem Versuch diese Verteilungsverfahren zu optimieren, verschiedene Alternativen vorgeschlagen und dokumentiert werden. Man kriegt also einen Einblick, wie solche Peer-to-Peer Protokolle zu designen sind, je nachdem, welchen Schwerpunkt man haben will. Eine wichtige Entscheidung ist z.B., ob man ein faires Netzwerk haben will, wo praktisch jeder Knoten gleich runterl&#228;dt und hochl&#228;dt, oder ein schnelles Netzwerk (bei dem also ein Knoten so schnell zu den Daten kommt, die er haben will). Die untersuchten Entscheidungen in dem Artikel sind:\n<\/p>\n<ol>\n<li>Ob Knoten (bzw. Peers) in dem P2P-Netz die Daten gesendet bekommen (PUSH-Modell), oder diese Daten anfragen (PULL-Modell)<\/li>\n<li>Welcher Algorithmus eingesetzt wird, um neue Knoten zu finden, die gute &#8220;Transfer&#8221;-Charakteristiken haben (Bandbreite, Latenz)<\/li>\n<li>Welche Daten angefordert werden sollen, je nachdem wie die Netzwerksituation ist<\/li>\n<li>Welche Daten anderen Peers zu senden sind<\/li>\n<li>Welche Verfahren eingesetzt werden, um die Daten umzukodieren (z.B. Fehlerkorrektur, oder gar keine Kodierung)<\/li>\n<\/ol>\n<p>\n<strong>Push oder Pull?<br \/>\n<br \/><\/strong><br \/>\n<br \/>Push ist nat&#252;rlich die Methode, die einfacher zu realisieren ist. Bei Streaming-anwendungen sollten z.B. alle empfangenden Knoten dieselben Daten mit derselben Geschwindigkeit bekommen. Allerdings wird es gleich komplizierter, wenn Daten von mehreren Sendern gleichzeitig empfangen werden. In dem Fall m&#252;ssen die Empf&#228;nger den Sendern mitteilen, welche  Daten sie schon empfangen, damit nicht doppelte Pakete verschickt werden (alles klar?). Bei Pull k&#246;nnen die Empf&#228;nger genauer kontrollieren, was sie empfangen wollen und von wem. Allerdings wird dadurch die Latenz der Kommunikation erh&#246;ht, und es kann unter Umst&#228;nden auch zu einer nicht zu ignorierenden Erh&#246;hung der ausgetauschten Datenmenge kommen. Hier gibt es also keinen klaren Gewinner, und in dem implementierten Ansatz der Autoren werden auch beide Verfahren gleichzeitig verwendet.\n<\/p>\n<p>\n<strong>Nachbarnsuche (Peering-Strategie)<\/strong>\n<\/p>\n<p>\nEin extrem wichtiger Punkt (vielleicht der wichtigste) ist, wie ein Knoten seine Nachbarn findet, wie es sie ausw&#228;hlt, und wie er neue Nachbarn hinzuzieht, wenn Knoten ausfallen oder sich ihre Verbindung verschlechtert. Im Idealfall weiss jeder Knoten &#252;ber alle anderen Knoten bescheid, und kennt auch ihre Parameter in Sachen Bandbreite, usw&#8230; Das ist nat&#252;rlich kaum m&#246;glich, denn der Overhead, diese ganze Daten im Netzwerk zu verteilen w&#228;re viel zu hoch (das ist auch so eins der Probleme der herk&#246;mmlichen Multicast-Routing Algorithmen). Eine andere M&#246;glichkeit w&#228;re, das ein zentraler Knoten diese Information festh&#228;lt, und ich glaube (aber ich weiss nicht wirklich genau wie Bittorrent funktionniert), dass in Bittorrent diese Rolle von dem Tracker &#252;bernommen wird. Ist dieser Tracker nun weg oder schlecht erreichbar, bricht das Ganze zusammen. Nicht zu &#252;bersehen ist auch die Bandbreite, die der Tracker dann zur Verf&#252;gung stellen muss, um diese Daten managen zu k&#246;nnen. Ein weitere &#8220;triviale&#8221; M&#246;glichkeit w&#228;re einfach, dass jeder Knoten eine feste Liste von Nachbarn ermittelt, und diese dann nicht mehr &#228;ndert. Wenn diese Knoten aufh&#246;ren oder nicht mehr erreichbar sind, oder diese Anfangsliste einfach schlecht ist, hat der Knoten verloren. Ein sinnvoller Ansatz ist also eine Peeringstrategie, wo der Knoten nicht &#252;ber ein globales Wissen verf&#252;gen muss (das gesamte Netzwerk kennen), und auch nicht mit vielen Nachbarknoten kommunizieren muss, aber trotzdem relativ schnell gute Nachbarn finden kann.\n<\/p>\n<p>\nIch weiss nicht, wie die das im Artikel l&#246;sen (noch nicht komplett durchgelesen), aber ein sinnvoller Ansatz w&#228;re denke ich eine Art &#8220;randomisierte&#8221; Aggregierung von Nachbarsdaten durch die Knoten selber. Also Knoten A kommuniziert mit 10 Knoten, welche selber 10 Knoten als Nachbarn haben, A kann mit diesen 10 Knoten die kompletten Nachbarsdaten austauschen (also mit Tiefe 1), irgendwie die 5 Besten + 5 Zuf&#228;llige zusammenbasteln, und an weitere Knoten schicken (oder an den Tracker, der deswegen nicht alle Daten von allen Peers kennen muss). Kommt ein neuer Knoten in das Netz, kriegt er eine zuf&#228;llige, aggregierte Menge von Nachbarn, und kann sich so durchhangeln. Gehen ein paar Knoten hops, k&#246;nnen ihre Nachbarn beim Tracker wieder &#8220;randomisierte&#8221;, im Durchschnitt gute Nachbarn bekommen. Hauptsache, im Durchschnitt klappt es gut, und relativ schnell kann man die Nachbarnauswahl verfeinern, indem man neue Nachbarn hinzunimmt, und die schlechtesten rauswirft.\n<\/p>\n<p>\nSo, das ist auch genug f&#252;r heute, denn langsam wird es sp&#228;t. Mehr in den n&#228;chsten Tagen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wie versprochen, eine kleine Zusammenfassung des Papiers &#8220;Maintaining High Bandwidth under Dynamic Network Conditions&#8221;, das ich gestern kurz verlinkt hatte. Thema des Artikels ist das Verteilen von Daten in einem Peer-to-Peer Netzwerk, zum Beispiel um ISOs oder Patches zu verteilen, &hellip; <a href=\"https:\/\/blogs.bl0rg.net\/netzstaub\/2005\/02\/24\/papierkurzfassung-maintaining-high-bandwidth\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,10],"tags":[],"class_list":["post-83","post","type-post","status-publish","format-standard","hentry","category-netzstaub","category-programmstaub"],"_links":{"self":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/posts\/83","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/comments?post=83"}],"version-history":[{"count":0,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/posts\/83\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/media?parent=83"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/categories?post=83"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/tags?post=83"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}