Почему Dropbox может быть супер быстрым по сравнению с FTP?


36

Я хотел бы знать, почему технически Dropbox намного быстрее, чем FTP? Какую технологию он использует?

Я не говорю о файлах diff, я говорю о передаче новых файлов в обоих случаях, Dropbox намного быстрее.

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


2
Какой размер, тип и количество файлов вы загрузили? Сколько времени понадобилось каждому из них, чтобы загрузить? Где вы загружали файлы через FTP? Dropbox не волшебство, самое простое объяснение в том, что FTP-сервер, который вы загружали, тоже имеет гораздо меньшую пропускную способность, чем Amazon.
user23307

2
если они уже есть, его не нужно перезагружать; p
Мастер-подмастерье

4
Вы говорите «новые файлы», но если эти файлы не являются свежими, случайными данными, вы, вероятно, видите преимущество синхронизации на уровне блоков (как в rsync и других инструментах).
Крис Джонсен

1
Это скорее сравнение хостинга, я знаю, что FTP-серверы работают быстрее, чем Dropbox, и я также использую несколько соединений с Filezilla, поэтому утверждения, перечисленные в этих ответах, не выполняются.
Тамара Вийсман

Dropbox использует дедупликацию, чтобы сэкономить место на общих файлах, поэтому нет необходимости загружать их, если они уже есть.
paradroid

Ответы:


31

Для этого может быть несколько причин.
Протокол FTP далеко не эффективен.

  1. Для передачи по FTP необходимо как минимум два соединения (одно для контроля и одно для данных), где DropBox может использовать только одно HTTP-соединение. Кроме того, соединение для передачи данных для сеанса FTP может быть открыто с сервера вашему клиенту, и, если вы находитесь в NAT, это может привести к сбою, так что ваш FTP-клиент может попытаться подключиться таким образом, но затем попытается выполнить другое.

  2. На FTP-соединении происходит много операций. Чтобы отправить файл, клиент должен отправить как минимум две команды (одну, чтобы открыть соединение для передачи данных, и одну, чтобы начать отправку), и каждый раз он должен ждать ответа сервера, добавляя дополнительную задержку. Помимо этих двух циклов в каждом файле, существует несколько циклов команд-ответов для начального соединения: один для отправки имени пользователя, один для пароля и, по крайней мере, один для установки параметров передачи (чтобы убедиться, что сервер ожидая двоичные, а не ASCII, данные). Клиент может также выполнить несколько дополнительных команд, чтобы получить информацию о себе от сервера. Вероятно, Dropbox будет использовать только один HTTP-запрос или не более двух (один для аутентификации, другой для отправки данных).

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

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

Для больших файлов первые три пункта выше станут незначительными по сравнению со временем, затраченным на фактическую передачу данных, но пункт 4 все еще может быть весьма важным. Для небольших файлов все дополнительное время настройки, добавляемое протоколом FTP, может в несколько раз превышать время, необходимое для фактической отправки данных.


+1 за подробный ответ. Мне тоже было интересно, как Dropbox был таким быстрым.
Грант Пэйлин

1
Я где-то читал, что данные Dropbox зашифровываются перед передачей - поэтому имеет смысл, что они также (хотя бы немного) сжаты.
Дин Скорее

Зашифрованный файл не должен сжиматься - в любом случае я не сбрасываю окно, шифрующее файлы во время передачи
Мартин Беккет

@mgb: вы правы в том, что методы сжатия файлов не должны находить достаточной избыточности в зашифрованных данных, чтобы быть полезными, поэтому первоначальная отправка файла не поможет при сжатии. Но если в dropbox уже есть файл, и вы только что обновили его (а ключ остается прежним), скорее всего, ему не потребуется передавать весь файл для обновления удаленной копии. Несмотря на то, что данные не могут быть сжаты, объем, который необходимо отправить для обновления, все еще можно уменьшить (значительно для больших файлов, которые видят небольшие обновления).
Дэвид Спиллетт

1
Я почти уверен, что они используют HTTPS для передачи (HTTP через SSL), а не для отправки данных в простой форме. Я не знаю, какое (если есть) шифрование используется для фактического хранения, но если ваши данные чувствительны, вы все равно должны шифровать их на стороне, чтобы только у вас была копия соответствующих ключей.
Дэвид Спиллетт

15

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

Таким образом, если вы пытаетесь загрузить файл, идентичный файлу, который уже есть в Dropbox, загрузка пропускается (и другие связанные машины могут начать скачивать его с серверов Dropbox). Если вы загружаете файл, который почти идентичен другому, уже загруженному файлу (неясно, должен ли уже загруженный файл быть «вашим» или мог быть получен от какого-либо пользователя), он просто отправит достаточно частей файл, чтобы воссоздать его на сервере в сочетании с файлом, который уже был загружен.

FTP не может делать ничего из этого (это простой протокол для отправки и получения потоков данных без ссылки на любые другие данные, доступные на удаленном конце). Такие инструменты, как rsync и Unison, могут «пропускать чанки, которые есть у другой стороны», но обычно ограничиваются сравнением чанков внутри файлов по одинаковому пути в синхронизированной иерархии. Похоже, что Dropbox распространяет эту идею на коллекции файлов (поэтому, если вы «загрузите» два почти идентичных файла, возможно, он сможет отправить только один плюс достаточный «diff» для повторного создания другого).


11

Я предполагаю, что вы имеете в виду быстрее с точки зрения передачи файлов. Когда вы сохраняете файл в папке Dropbox, Dropbox отправляет только дельту (или разность) данных на удаленный сервер хранения. FTP (скорее всего) отправляет файл побайтово (а не просто отправляет изменения), что может занять гораздо больше времени для передачи по сети. Аналогично, при синхронизации с удаленного сервера локальные клиенты будут загружать только изменения.

Функция синхронизации по локальной сети также может ускорить синхронизацию и снизить необходимый сетевой трафик.


На самом деле я говорю о новых файлах для обоих случаев.

0

Dropbox может быть быстрее, когда вы отправляете большее количество файлов. FTP работает настолько быстро, насколько это возможно, когда мы говорим со скоростью, но он требует слишком много «разговоров» между сервером и клиентским компьютером для каждого файла, поэтому FTP кажется медленнее. Если вы загружаете какое-то приложение с открытым исходным кодом с тысячами файлов, удобнее сжимать все файлы, загружать их по FTP и распаковывать на сервере.


0

Я думаю, что они используют простые методы хеширования, похожие на MD5 / Sha

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

Если dropbox-сервер найдет похожие файлы (они должны поддерживать индекс хэшей и файловые данные на своем сервере), он просто сообщит клиенту, что файл успешно «загружен». ;-)

Таким образом, вы в конечном итоге «загружаете» файл только логически. Поскольку нет реальной передачи содержимого файла, это должно быть быстрее, чем что-либо еще.

Я не уверен, какой алгоритм хэширования использует dropbox, но я на 100% уверен, что их принцип работы аналогичен тому, который я описал выше.


0

Хотя Dropbox использует другие сервисы, они исторически использовали Amazon AWS (Amazon Web Services). Похоже, что ваш трансфер из источника в пункт назначения имеет очень большой канал передачи. По моему опыту, Dropbox использует пункт назначения, который может принимать большие объемы данных одновременно. Dropbox также распределяет загрузку на разные IP-адреса. Сайт, на который вы пересылаете FTP, скорее всего, имеет гораздо меньший канал передачи и не имеет возможности распределять загрузки так эффективно.

Если вы запустите Resource Monitor (resmon) и перейдете на вкладку Network, вы заметите различные процессы, использующие пропускную способность сети.

  • В разделе Процессы с сетевой активностью выберите столбец для Total (B/sec)
  • Под TCP-соединениями выберите столбец для Total (B/sec)

Для меня, когда я загружаю файл в Dropbox, он использует 4 соединения для отправки 4 разных IP-адресов.

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.