Какой лучший способ синхронизировать большие объемы данных по всему миру?

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

Большой процент (30%) данных - это дублированные пакеты (возможно, упакованные JDK), поэтому решение должно включать способ поднять тот факт, что на локальной машине есть такие вещи, захватить их вместо загрузки с другого сайта.

Контроль версий - это не проблема, это не кодовая база.

Мне просто интересно, есть ли там какие-либо решения (желательно с открытым исходным кодом), которые приближаются к такому веществу?

My baby script с помощью rsync больше не режет горчицу, я бы хотел сделать более сложную интеллектуальную синхронизацию.

Спасибо

Изменить: это должно быть основано на UNIX:)

Ответ 1

Вы пробовали Unison?

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

Ответ 2

Звучит как работа для BitTorrent.

Для каждого нового файла на каждом сайте создайте файл семпла bittorrent и поместите его в централизованный доступный в Интернете каталог.

Каждый сайт затем загружает (через bittorrent) все файлы. Это приведет к совместному использованию полосы частот и автоматическому повторному использованию локальной копии.

Фактический рецепт будет зависеть от ваших потребностей. Например, вы можете создать одно семя bittorrent для каждого файла на каждом хосте и установить время модификации семенного файла таким же, как время модификации самого файла. Поскольку вы будете делать это ежедневно (ежечасно?), Лучше использовать что-то вроде "make" для (повторного) создания файлов семян только для новых или обновленных файлов.

Затем вы копируете все файлы семян со всех хостов в централизованное местоположение ( "tracker dir" ) с опцией "переписывать только если новый". Это дает вам набор семян торрента для всех новейших копий всех файлов.

Затем каждый хост загружает все файлы семян (опять же, с "перезаписывать, если новая настройка" ) и запускает загрузку bittorrent на всех из них. Это загрузит/перезагрузит все новые/обновленные файлы.

Ринс и повторяй, ежедневно.

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

Ответ 3

Как насчет чего-то вроде Red Hat Глобальная файловая система, так что вся структура разбивается на каждый сайт на несколько устройств, а чем все это реплицируется в каждом месте?

Или, возможно, коммерческая сетевая система хранения, такая как LeftHand Networks (отказ от ответственности - я понятия не имею о стоимости и не использовал их).

Ответ 4

У вас есть много вариантов:

  • Вы можете попробовать настроить реплицированную БД для хранения данных.
  • Используйте комбинацию rsync или lftp и настраиваемых скриптов, но это вам не подходит.
  • Используйте git репозитории с максимальными сжатиями и синхронизацией между ними с помощью некоторых скриптов
  • Поскольку объем данных достаточно велик и, вероятно, важен, выполните либо некоторые индивидуальные разработки при найме специалиста;)

Ответ 5

Посмотрите на супер гибкие... это довольно круто, не использовали его в крупномасштабной среде, но в системе 3 node он работал отлично.

Ответ 6

Звучит как работа для Foldershare

Ответ 7

Вы пробовали патч detect-renamed для rsync (http://samba.anu.edu.au/ftp/rsync/dev/patches/detect-renamed.diff)? Я сам не пробовал, но задаюсь вопросом, обнаружит ли он не только переименованные, но и дублированные файлы. Если он не обнаружит дублированные файлы, то, я думаю, можно было бы изменить патч, чтобы сделать это.