2017-02-08 2 views
1

Я планирую создать систему для распределения изображений VM между несколькими станциями с использованием протокола BitTorrent. Текущая система выглядит следующим образом:Распределение P2P - абстрактный алгоритм для контролирующих сверстников

          |-[room with 20PCs]- 
[srv_with_images]-->--[1Gbps-bottlneck]-->--| 
              |-[2nd room with 20PCs]- 

Всех компьютеры сразу загружают изображения через узкое 1Gbps каждую ночь, и это занимает много времени. Мы планируем использовать BitTorrent для ускорения распространения изображений с использованием однорангового обмена между всеми ПК. Однако есть проблема - когда изображение появляется на исходном сервере, оно начинает действовать как одно семя, из которого все одноранговые узлы загружают файл одновременно. Поэтому мы снова попадаем в ловушку узкого места. Чтобы ускорить распространение, мы должны реализовать (по крайней мере, мы считаем, что нам нужны) абстрактный алгоритм высокого уровня, который:

  • обеспечивает на самом начало, когда новое изображение поступает лишь малая часть станций будет загрузив image from origin,
  • Когда небольшая часть начнет посев, остальная часть или другая большая часть ПК начнет пиринг, или они будут всматриваться только с компьютеров в классе, а не из источника,
  • Не должно полагаться на «статический» список начальных сверстников, так как некоторые компьютеры могут быть отключены в течение дня. Мы не можем предположить, что любой из компьютеров всегда будет работать &. Одноранговое соединение также может быть отключено в любое время.

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

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

+0

Возможно, вы можете использовать [Убийство] (https://github.com/lg/murder), (на основе BitTornado), который был разработан и использован Twitter, чтобы сделать аналогичную вещь. [Видео.] (Http://vimeo.com/11280885) [Блог.] (Https://blog.twitter.com/2010/murder-fast-datacenter-code-deploys-using-bittorrent) [Вилка .] (https://github.com/russss/Herd) [TF Article.] (https://torrentfreak.com/twitter-uses-bittorrent-for-server-deployment-100210/) – Encombe

ответ

1

Если вы используете bittorrent, то вам не нужна специальная координация.

Peers за узким местом может напрямую разговаривать друг с другом и делиться пропускной способностью. Использование алгоритма выбора фрагментов rarest-first в основном гарантирует, что они загружают разные части с сервера, а затем передают их друг другу.

LSD может помочь ускорить локальное локальное обнаружение, но он также должен работать с обычным трекером, если в игре нет NAT-шенионов.

Смежные вопросы