Использование протокола bittorrent для распространения ночных сборок и сборок CI

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

В ответах на вышеупомянутые вопросы было ясно, что git не подойдет моим потребностям, и было рекомендовано пересмотреть его с помощью BitTorrent.


Краткая версия

Необходимо распространять ночные сборки среди более чем 70 человек каждое утро, хотелось бы использовать git BitTorrent для балансировки нагрузки при передаче.

Полная версия

NB. Вы можете пропустить следующий абзац, если прочитали мой предыдущий вопрос.

Каждое утро нам нужно распространять нашу ночную сборку в студии, состоящей из более чем 70 человек (художников, тестировщиков, программистов, продюсеров и т. Д.). До сих пор мы копировали сборку на сервер и написали программу синхронизации, которая ее загружает (используя Robocopy ниже); даже с настройкой зеркал скорость передачи неприемлемо низка, так как для синхронизации в часы пик требуется до часа или дольше (время непиковой нагрузки составляет примерно 15 минут), что указывает на узкое место аппаратного ввода-вывода и, возможно, пропускную способность сети.

Что я знаю на данный момент

Что я нашел на данный момент:

  • Я нашел отличную запись в Википедии о протоколе BitTorrent, который был интересным прочтите (раньше я знал только основы работы торрентов). Также нашел этот ответ StackOverflow на обмен BITFIELD, который происходит после рукопожатия клиент-сервер.

  • Я также нашел библиотеку MonoTorrent C # (GitHub Source), который я могу использовать для написания нашего собственного трекера и клиента. Мы не можем использовать готовые трекеры или клиенты (например, uTorrent).

Вопросы

В моем первоначальном дизайне наша система сборки создает файл .torrent и добавляет его в трекер. Я бы супер-посев торрент использовал наши существующие зеркала сборки.

При таком дизайне нужно ли мне создавать новый файл .torrent для каждой новой сборки? Другими словами, можно ли создать "скользящий" .torrent, где, если содержимое сборки изменилось только на 20%, это все, что нужно загрузить, чтобы получить последнюю < / em>?

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

В ответ на комментарии

  1. Для полной синхронизации всей сборки (включая: игру, исходный код, локализованные данные и образы дисков для PS3 и X360) ~ 37 000 файлов и чуть размером менее 50 ГБ. Это будет увеличиваться по мере продолжения добычи. Эта синхронизация заняла 29 минут, в то время как было только 2 других синхронизации, что является низким пиком, если учесть, что в 9 утра у нас будет более 50 человек, желающих получить последнюю информацию.

  2. Мы исследовали дисковый ввод-вывод и пропускную способность сети вместе с ИТ-отделом; был сделан вывод, что сетевое хранилище было переполнено. Мы также записываем статистику в базу данных синхронизации, эти записи показывают, что даже с небольшим количеством пользователей мы получаем неприемлемую скорость передачи.

  3. Что касается отказа от использования стандартных клиентов, то наличие такого приложения, как uTorrent, установленного на пользовательских машинах, является юридической проблемой, поскольку другие элементы могут быть легко загружены с помощью этой программы. Мы также хотим иметь собственный рабочий процесс для определения того, какую сборку вы хотите получить (например, только PS3 или X360, в зависимости от того, какой DEVKIT у вас на столе), и иметь уведомления о доступных новых сборках и т. Д. Создание клиента с использованием MonoTorrent не является частью что меня беспокоит.


person Dennis    schedule 08.09.2011    source источник
comment
Какого размера файлы, которые вы распространяете? Вы пробовали хорошее сжатие? Вы также можете использовать двоичный инструмент сравнения с предыдущей версией, патча, которого хватит почти для всех (другие загрузят полный пакет).   -  person Guillaume    schedule 08.09.2011
comment
Вы уверены, что изменение протокола / инструмента решит проблему? Проверили ли вы какие-либо реальные вычисления относительно того, что вы пытаетесь распространить в своей сети, по сравнению с вашим оборудованием, пропускной способностью сети и т. Д ... Например, проверили ли вы кеш файловой системы (cf: blogs.technet.com/b/askperf/archive/ 2007/05/08 /)?   -  person Simon Mourier    schedule 08.09.2011
comment
Я действительно не понимаю, почему вы не можете использовать готовые клиенты, используете ли вы собственные веб-браузеры и текстовые процессоры?   -  person grapefrukt    schedule 08.09.2011
comment
Обновленный вопрос с ответами на комментарии.   -  person Dennis    schedule 08.09.2011
comment
Как насчет того, чтобы использовать для этого e-mule прямо из коробки?   -  person Daniel Mošmondor    schedule 09.09.2011


Ответы (4)


На вопрос, нужно ли вам создавать новый торрент, ответ: да.

Однако, в некоторой степени, в зависимости от структуры ваших данных, вы можете выполнить несколько простых полудельта-обновлений.

Если данные, которые вы распространяете, представляют собой большую коллекцию отдельных файлов, при каждой сборке некоторые файлы могут изменяться, вы можете просто создать новый файл .torrent и попросить всех клиентов загрузить его в то же место, что и старый (как вы предлагаете) . Клиенты сначала проверяли файлы, которые уже существовали на диске, обновляли те, которые были изменены, и загружали новые файлы. Главный недостаток заключается в том, что удаленные файлы фактически не удаляются на клиентах.

Если вы все равно пишете свой собственный клиент, удаление файлов в файловой системе, которых нет в .torrent-файле, является довольно простым шагом, который можно выполнить отдельно.

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

Я бы не рекомендовал использовать суперпосев. В зависимости от того, насколько строгой является реализация супер-посева, которую вы используете, это может фактически повредить скорости передачи. Имейте в виду, что цель суперсединга - минимизировать количество байтов, отправляемых из начального числа, а не максимизировать скорость передачи. Если все ваши клиенты ведут себя должным образом (т. Е. Сначала используют самые редкие), раздача штук в любом случае не должна быть проблемой.

Кроме того, для создания торрента и хеш-проверки торрента объемом 50 ГиБ, который создает большую нагрузку на диск, вы можете протестировать используемую для этого реализацию BitTorrent, чтобы убедиться, что она достаточно производительна. При 50 ГиБ разница между разными реализациями может быть значительной.

person Arvid    schedule 09.09.2011

Просто хотел добавить несколько предложений, не связанных с BitTorrent, для вашего прочтения:

  • Если разница между ночными сборками незначительна, вы можете использовать rsync, чтобы уменьшить свою сеть трафик и уменьшить время, необходимое для копирования сборки. В предыдущей компании мы использовали rsync для отправки сборок нашему издателю, так как мы обнаружили, что наши образы дисков не сильно меняли от сборки к сборке.

  • Вы не думали о том, чтобы просто сгруппировать операции копирования, чтобы клиенты не замедляли передачу друг для друга? Мы использовали простой скрипт Python для внутренних целей, когда выполняем этапные ветки: скрипт засыпает до случайного времени в указанном диапазоне, просыпается, загружает и проверяет необходимые репозитории и запускает сборку. Пользователь запускает сценарий, когда уходит с работы на день, а когда они возвращаются, у них есть свежая копия всего, готовая к работе.

person Blair Holloway    schedule 09.09.2011

Вы можете использовать синхронизацию BitTorrent, которая каким-то образом является альтернативой dropbox, но без сервера в облаке . Он позволяет синхронизировать любое количество папок и файлов любого размера. с несколькими людьми, и он использует те же алгоритмы из протокола Bit Torrent. Вы можете создать папку только для чтения и поделиться ключом с другими. Этот метод избавляет от необходимости создавать новый торрент-файл для каждой сборки.

person JuanMa Cuevas    schedule 07.05.2013
comment
Я только что прочитал о синхронизации на \. и о том, как за последние 6 месяцев было передано 1 ПБ данных. Однако мне не сразу пришло в голову, что я могу использовать для этой цели. Спасибо! - person Dennis; 07.05.2013

Просто чтобы добавить еще один вариант, рассмотрели ли вы БИТЫ? Сам не использовал, но, прочитав документацию, он поддерживает распределенный модель однорангового кэширования, которая звучит так, как будто она позволит достичь того, чего вы хотите.

Обратной стороной является то, что это фоновая служба, поэтому она откажется от пропускной способности сети в пользу активности, инициированной пользователем - это хорошо для ваших пользователей, но, возможно, не то, что вам нужно, если вам срочно нужны данные на машине.

Тем не менее, это другой вариант.

person MarcE    schedule 08.09.2011
comment
Спасибо за предложение. Мы рассмотрели BITS (Background Intelligent Transfer Service) и, возможно, воспользуемся этим в качестве краткосрочного решения. - person Dennis; 08.09.2011
comment
BITS отлично работает как фоновый загрузчик НО Согласно документации: BITS 3.0: Начиная с Windows 7, модель однорангового кэширования BITS 3.0 устарела. Если установлен BITS 4.0, модель однорангового кэширования BITS 3.0 недоступна. Для получения дополнительной информации см. Одноранговое кэширование. - person Ian Mercer; 09.09.2011
comment
@Hightechrider: Спасибо за дополнительную информацию о модели кэширования BITS. - person Dennis; 09.09.2011