1

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

У меня много наборов файлов (некоторые файлы маленькие, но некоторые большие, например, ~ 10-20 ГБ). У меня есть несколько серверов, каждый из которых может разместить один или несколько из этих наборов файлов. Конечно, один сервер может содержать 50% от общего числа наборов, а другие 50% могут содержать другое количество наборов.

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

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

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

Инструменты, которые я рассмотрел, следующие:

  • rsync - отлично подходит для синхронизации файлов малого и среднего размера, но не настолько идеален для синхронизации больших файлов, поскольку использует алгоритм, который считывает весь файл с обеих сторон, чтобы определить, следует ли скопировать файл или нет. Это нормально, когда файл должен быть скопирован в первый раз, или когда файл полностью изменен, но не так хорошо, когда, скажем, изменен только 1% файла размером 10 ГБ.
  • SVN - Это замечательно, когда дело доходит до поиска различий и передачи только тех дельт вокруг, но я не уверен, насколько это оптимально, когда речь идет об использовании диска (весь набор будет вдвое больше как на клиенте, так и на сервере, из-за чтобы один раз установить хранится в репозитории?).
  • Торрент - Это может быть осуществимо в распределении. Например, создайте торрент для каждого набора на сервере, начните заполнять его там, и клиенты, которые получают эти наборы, также продолжают заполнять другие клиенты, таким образом распределяя нагрузку по каждому компьютеру, на котором хранится копия набора. Тем не менее, я не уверен, сможет ли он каким-то образом распределять различия после изменения настроек на сервере ... Требуется ли создание нового торрента для каждого изменения? Кроме того, я не знаю, как торрент будет вести себя в локальной сети со скоростью (может ли он быть в состоянии передавать файлы между одним сервером и одним клиентом на максимальной скорости, ограниченной по сети, или он добавляет некоторые серьезные издержки протокола? Как насчет перегрузки сети?)
  • Индивидуальное решение. Ну, не так много здесь, чтобы добавить, но это, скорее всего, будет заново изобретать колесо, и что какое-то существующее решение, скорее всего, будет соответствовать моим потребностям, если бы я только знал об этом.

Итак, вопрос: какой метод распределения / синхронизации (утилиты, подход) лучше всего подходит для моей ситуации?

1 ответ1

1

Из перечисленных вами решений SVN выглядит наиболее перспективным. Вам нужно будет хранить как минимум 1 копию набора в хранилище, поэтому вы будете использовать до 2 раз больше пространства (или 3 раза, если у вас есть 2 рабочие копии).

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

Вы также можете заглянуть в MS Sync Framework, который используется SyncToy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .