Каково оптимальное количество узлов в рое BitTorrent?

#math #protocols #bittorrent

#математика #протоколы #bittorrent

Вопрос:

Каково оптимальное количество узлов в рое BitTorrent? Я думаю, что существует математический способ выразить наиболее эффективное количество узлов. Честно говоря, у меня проблема с простым эмпирическим числом X, без какой-либо строгости для его резервного копирования.

Согласно этой спецификации, это число равно 30.

«Примечание разработчика: даже 30 одноранговых узлов — это много, официальная версия клиента 3 фактически активно формирует новые соединения только в том случае, если у него менее 30 одноранговых узлов, и откажется от соединений, если у него 55. Это значение важно для производительности. Когда загрузка новой части завершится, сообщения HAVE (см. Ниже) необходимо будет отправить большинству активных одноранговых узлов. В результате стоимость широковещательного трафика растет прямо пропорционально количеству одноранговых узлов. Выше 25 новые узлы вряд ли увеличат скорость загрузки. Разработчикам пользовательского интерфейса настоятельно рекомендуется сделать это неясным и трудно изменяемым, поскольку это очень редко бывает полезно.»

Накладные расходы, на которые ссылается эта цитата, заключаются в получении сообщений.

Комментарии:

1. Лучшее, что можно сделать, ИМХО, это написать быстрый и грязный симулятор bittorrent в коде и поиграть с числами.

2. Эта проблема не в том, насколько эффективно, а в выборе подходящего компромисса. Больше узлов означает улучшенные шансы достижения максимальной скорости загрузки. Чем больше узлов, тем больше широковещательного трафика и, следовательно, больше используемых ресурсов. Вопрос в том, как вы обмениваете эти два. Учитывая, что широковещательный трафик увеличивается линейно, в то время как предельная выгода от добавления другого узла падает экспоненциально, наступит момент, когда компромисс будет очевиден.

3. Лучшее, что можно сделать, это определить «оптимальный». Кроме того, вы захотите различать количество узлов и количество одноранговых узлов, потому что вы спрашиваете об одном, но предоставляете цитаты о другом.

4. Ответ, всегда, 42.

5. @cweiske хах, интересная гипотеза, не хочешь написать доказательство?

Ответ №1:

вы имеете в виду количество узлов в рое. Звучит так, как будто вы имеете в виду общее количество участников в рое, но ваша цитата относится к количеству узлов, к которым вы должны подключиться. Давайте предположим, что вопрос в последнем.

Вы также не указали, какую метрику производительности использовать. Что для вас значит «эффективный»?

Если оптимальное означает наименьшее количество служебных байт на байт полезной нагрузки, вам нужно 1 соединение (или, возможно, 0 соединений).

Давайте предположим, что вы хотите максимизировать скорость загрузки. Ответ на этот вопрос (к скольким одноранговым узлам я должен подключиться, чтобы максимизировать скорость загрузки) таков:

Наименьшее количество одноранговых узлов, которые будут насыщать ваш нисходящий канал.

Итак, что это значит? Ну, это зависит от роя и от того, какой пропускной способностью обладают другие одноранговые узлы, и это зависит от того, сколько в рое распределенных копий.

Другой вопрос, который также необходимо решить, заключается в том, на сколько одноранговых узлов вы должны загружать? Ответ здесь:

Наибольшее количество узлов, между которыми вы можете разделить свою пропускную способность для загрузки, чтобы все они продолжали отвечать взаимностью, или наименьшее число, которое будет насыщать вашу нисходящую ссылку

Обратите внимание, что деление не обязательно должно быть четным, подробности см. в документе bittyrant.

Теперь вам нужно по крайней мере столько соединений, чтобы отключить.

Хитрость в достижении хорошей скорости загрузки в основном сводится к достаточно быстрой отправке одноранговым узлам, чтобы они отвечали взаимностью, но предпочтительно не быстрее этого. Если есть свободная емкость для загрузки, ее следует использовать, чтобы заставить другого однорангового узла отвечать взаимностью. Подключение ко многим одноранговым узлам означает, что вы можете найти хороших торговых партнеров немного быстрее, и вы будете меньше страдать от высокого оттока в роях.

Комментарии:

1. 1 за статью, но, честно говоря, остальная часть вашего поста просто преследует вопрос. Зачем публиковать вопрос на мой вопрос, когда у вас есть точно такая же информация, с которой я имею дело? Это не очень хорошая основа для ответа SO.

Ответ №2:

Если вы имеете в виду оптимальное количество узлов в рое, то оно, вероятно, где-то около бесконечности. Поскольку каждому пиявочнику лучше всего подобрать 1 сеялку, скорость загрузки которой равна скорости загрузки пиявок.

Если вы имеете в виду оптимальное количество узлов для подключения в качестве личера, это число невозможно (или его чрезвычайно трудно) найти, потому что оно зависит от слишком большого количества переменных. Переменные, которые следует учитывать:

  • количество узлов в swarm (1 — 1000)
  • соотношение семян / пиявок для каждого узла (0 — 10000%)
  • задержка каждого узла (1-1 мс)
  • максимальное количество активных подключений каждого узла (0 — 1000)
  • максимальная скорость загрузки каждого узла (1 КБ / с — 1000 мб / с)
  • максимальная скорость загрузки каждого узла (1 КБ / с — 1000 мб / с)
  • размер торрента (1 КБ — 1 тб)
  • интеллектуальность трекера (трудно поддается количественной оценке)
  • размер фрагмента торрента (1 КБ — 4 мб)
  • фрагменты торрента (1-0000)

Итак, для каждого узла существует по меньшей мере миллион возможных конфигураций, тогда у каждого другого узла также есть эти опции. Итак, для роя с 1000 узлами возможно 1.000.000 ^ 1000 конфигураций.

Когда имеется много низкоскоростных узлов, вы, вероятно, захотите подключиться ко многим узлам.
Когда высокоскоростных узлов много, вы, вероятно, захотите подключиться только к 1 или 2 узлам.