36

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

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

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

6 ответов6

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, может в несколько раз превышать время, необходимое для фактической отправки данных.

15

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

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

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

11

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

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

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-адресов.

0

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

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

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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .