Способы синхронизации многих (небольших) файлов через сетевое соединение с высокой задержкой - PullRequest
2 голосов
/ 18 января 2010

Мы обычно разворачиваем наши программные приложения для наших клиентов, используя Subversion (svn update на клиентах; однонаправленный).В настоящее время у нас возникают проблемы с одним из наших клиентов из-за высокой задержки (большие скорости загрузки файлов хороши), поскольку они находятся в Китае, а наш сервер - в Канаде.Subversion просто истекает с ошибкой после очень длительного периода времени.

Наше приложение имеет множество небольших файлов (.aspx, .config и т. Д.) И несколько файлов большего размера (.dll, .jpg) на общую сумму около 100–200 МБ.

В настоящее время я рассматриваю возможность сделать следующее:

  1. Выполнить локальную проверку svn на сервере
  2. Zip результат
  3. FTP или rsyncбольшой zip-файл на стороннем компьютере
  4. Распаковка файла во временную папку.
  5. Выполнение локальной rsync из этой временной папки в нашу обычную папку установки.

Есть ли лучшие решения?

  • Настройка зеркала Subversion ближе к месту назначения?(Мне понадобится всего несколько часов в месяц, но может быть трудно найти)
  • Использование другой системы контроля версий?(Git лучше для соединений с высокой задержкой)?
  • Существуют ли способы упаковки патчей Subversion (включая двоичные файлы) для повторного применения в месте назначения вместо отправки всех данных?
  • Будет ли лучше использовать DropBox (который использует Amazon S3) для передачи файлов во временную папку?

Ответы [ 3 ]

4 голосов
/ 18 января 2010

Не стучите по rsync для всего дерева маленьких файлов, пока не сделаете снимок. Он не выполняет круговую обработку для каждого отдельного файла, он конвейеризуется, поэтому он должен быть таким же быстрым, как и все остальное во всем наборе данных. (Как только TCP сможет собирать кадры в упорядоченные пакеты на вашем канале с высокой задержкой.)

Проверьте , как работает rsync , чтобы узнать, как избежать обходов.

2 голосов
/ 18 января 2010

Вы можете создать патч в стиле Unix для всех изменений во всех файлах. И просто перенесите это в zip-файл.

0 голосов
/ 18 января 2010

Вы можете использовать git (возможно, с git-svn) для обработки передачи.Это удивительно эффективно для устранения различий в версиях файлов.

В противном случае вы можете использовать двоичный инструмент сравнения xdiff.

...