Как такие сервисы, как Dropbox, реализуют дельта-кодирование, если их файлы хранятся в облаке? - PullRequest
4 голосов
/ 28 мая 2011

Dropbox утверждает, что во время синхронизации только часть файлов, которые изменяются, передаются обратно на главный сервер, что, очевидно, является отличной функциональностью, но как они вносят изменения в файлы, хранящиеся в облаке Amazon S3?Например, предположим, что 30-страничный документ на рабочем столе пользователя содержит изменения только на странице 4. Теперь Dropbox синхронизирует блоки, представляющие изменения, и что происходит с бэкэндом, если файлы, которые они хранят, находятся в облаке?Означает ли это, что они должны загрузить 30-страничный документ, хранящийся в S3, на свой сервер, затем выполнить замену блоков, представляющих 4-ю страницу, и затем загрузить обратно в облако?Я сомневаюсь, что это будет так, потому что это будет несколько неэффективно.Другой вариант, о котором я мог бы подумать, заключается в том, что Amazon S3 обеспечивает обновление файла, хранящегося в облаке, на основе диапазонов байтов, поэтому, например, сделайте запрос PUT для файла X из байтов 100-200, который заменит все байты от 100 до 200со значением запроса PUT.Поэтому мне было любопытно, как компании, использующие другие облачные сервисы, такие как Amazon, реализуют этот тип синхронизации.

Спасибо

Ответы [ 2 ]

5 голосов
/ 28 мая 2011

Поскольку хранилища S3 и аналогичные хранилища не предоставляют возможностей файловой системы, все, что претендует на хранение файлов и каталогов, должно эмулировать файловую систему.И при этом файлы часто разделяются на страницы определенного размера, где каждая страница хранится в отдельном файле в хранилище.Таким образом, измененный блок требует загрузки только одной страницы (например), а не всего файла.Я должен отметить, что с файлами, такими как офисные документы, этот подход может быть ошибочным, если размер файла изменяется - например, если вы вставляете страницу в начале или удаляете страницу, то весь файл будет изменен, и потребуется полный файлбыть перезагружен.Мы не анализировали, как именно Dropbox выполняет свою работу, и я просто описал общий сценарий.Существуют также различные «алгоритмы исправлений», где исправление может быть создано локально (если Dropbox имеет более старую локальную копию в кэше), а затем применено к одному или нескольким блокам на сервере.

0 голосов
/ 27 марта 2015

Существует несколько инструментов синхронизации, которые передают дельты по проводам, например rsync, rdiff, rdiff-backup и т. Д. Для двунаправленной синхронизации с S3 существуют платные сервисы, такие как, например, s3rsync .Для чистой синхронизации на стороне клиента можно рассмотреть такие инструменты, как zsync (это то, что многие люди используют для развертывания обновлений приложений).

Альтернативным подходом может быть тар-болкаталог, сгенерируйте дельта-файл (используя rdiff или xdelta3) и загрузите дельта-файл, используя временную метку как часть ключа.Для синхронизации все, что вам нужно сделать, это выполнить следующие 2 проверки на стороне клиента:

  1. У вас есть все дельта-файлы из S3.Если не вытащить их и применить их для создания последнего состояния резервного копирования.
  2. Ваше последнее состояние резервного копирования соответствует вашему текущему каталогу.Если не сгенерировать новый дельта-файл и нажать S3.

Важным фактором здесь будет как минимум 100% дополнительное использование пространства на стороне клиента.Но этот подход поможет вам отменить изменения в случае необходимости.

...