Эти вопросы являются продолжением того, что я узнал вчера из моего вопроса под названием с использованием git распространять ночные сборки.
В ответах на вышеупомянутые вопросы было ясно, что git не подойдет моим потребностям, и было рекомендовано пересмотреть его с помощью BitTorrent.
Краткая версия
Необходимо распространять ночные сборки среди более чем 70 человек каждое утро, хотелось бы использовать git BitTorrent для балансировки нагрузки при передаче.
Полная версия
NB. Вы можете пропустить следующий абзац, если прочитали мой предыдущий вопрос.
Каждое утро нам нужно распространять нашу ночную сборку в студии, состоящей из более чем 70 человек (художников, тестировщиков, программистов, продюсеров и т. Д.). До сих пор мы копировали сборку на сервер и написали программу синхронизации, которая ее загружает (используя Robocopy ниже); даже с настройкой зеркал скорость передачи неприемлемо низка, так как для синхронизации в часы пик требуется до часа или дольше (время непиковой нагрузки составляет примерно 15 минут), что указывает на узкое место аппаратного ввода-вывода и, возможно, пропускную способность сети.
Что я знаю на данный момент
Что я нашел на данный момент:
Я нашел отличную запись в Википедии о протоколе BitTorrent, который был интересным прочтите (раньше я знал только основы работы торрентов). Также нашел этот ответ StackOverflow на обмен BITFIELD, который происходит после рукопожатия клиент-сервер.
Я также нашел библиотеку MonoTorrent C # (GitHub Source), который я могу использовать для написания нашего собственного трекера и клиента. Мы не можем использовать готовые трекеры или клиенты (например, uTorrent).
Вопросы
В моем первоначальном дизайне наша система сборки создает файл .torrent и добавляет его в трекер. Я бы супер-посев торрент использовал наши существующие зеркала сборки.
При таком дизайне нужно ли мне создавать новый файл .torrent для каждой новой сборки? Другими словами, можно ли создать "скользящий" .torrent, где, если содержимое сборки изменилось только на 20%, это все, что нужно загрузить, чтобы получить последнюю < / em>?
... Фактически. При написании вышеуказанного вопроса я думаю, что мне нужно будет создать новый файл, однако я смогу загрузить в то же место на компьютере пользователя, и хэш будет автоматически определять то, что у меня уже есть. Это правильно?
В ответ на комментарии
Для полной синхронизации всей сборки (включая: игру, исходный код, локализованные данные и образы дисков для PS3 и X360) ~ 37 000 файлов и чуть размером менее 50 ГБ. Это будет увеличиваться по мере продолжения добычи. Эта синхронизация заняла 29 минут, в то время как было только 2 других синхронизации, что является низким пиком, если учесть, что в 9 утра у нас будет более 50 человек, желающих получить последнюю информацию.
Мы исследовали дисковый ввод-вывод и пропускную способность сети вместе с ИТ-отделом; был сделан вывод, что сетевое хранилище было переполнено. Мы также записываем статистику в базу данных синхронизации, эти записи показывают, что даже с небольшим количеством пользователей мы получаем неприемлемую скорость передачи.
Что касается отказа от использования стандартных клиентов, то наличие такого приложения, как uTorrent, установленного на пользовательских машинах, является юридической проблемой, поскольку другие элементы могут быть легко загружены с помощью этой программы. Мы также хотим иметь собственный рабочий процесс для определения того, какую сборку вы хотите получить (например, только PS3 или X360, в зависимости от того, какой DEVKIT у вас на столе), и иметь уведомления о доступных новых сборках и т. Д. Создание клиента с использованием MonoTorrent не является частью что меня беспокоит.