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