Я хотел бы знать, почему технически Dropbox намного быстрее, чем FTP? Какую технологию он использует?
Я не говорю о файлах diff, я говорю о передаче новых файлов в обоих случаях, Dropbox намного быстрее.
Я имею в виду, намного быстрее, может быть, в 10 раз быстрее, чем FTP для файлов, которые я загрузил. Я буду экспериментировать снова для больших файлов позже.
Ответы:
Для этого может быть несколько причин.
Протокол FTP далеко не эффективен.
Для передачи по FTP необходимо как минимум два соединения (одно для контроля и одно для данных), где DropBox может использовать только одно HTTP-соединение. Кроме того, соединение для передачи данных для сеанса FTP может быть открыто с сервера вашему клиенту, и, если вы находитесь в NAT, это может привести к сбою, так что ваш FTP-клиент может попытаться подключиться таким образом, но затем попытается выполнить другое.
На FTP-соединении происходит много операций. Чтобы отправить файл, клиент должен отправить как минимум две команды (одну, чтобы открыть соединение для передачи данных, и одну, чтобы начать отправку), и каждый раз он должен ждать ответа сервера, добавляя дополнительную задержку. Помимо этих двух циклов в каждом файле, существует несколько циклов команд-ответов для начального соединения: один для отправки имени пользователя, один для пароля и, по крайней мере, один для установки параметров передачи (чтобы убедиться, что сервер ожидая двоичные, а не ASCII, данные). Клиент может также выполнить несколько дополнительных команд, чтобы получить информацию о себе от сервера. Вероятно, Dropbox будет использовать только один HTTP-запрос или не более двух (один для аутентификации, другой для отправки данных).
Кроме того, в зависимости от того, какой клиент вы используете для передачи по FTP (который вы не указываете, было бы неплохо отредактировать ваш вопрос, чтобы включить эту информацию), он может прервать соединение после каждой операции отправки и повторно подключиться затем время. Весьма вероятно, что DropBox какое-то время поддерживает соединение открытым в целях длительного опроса, чтобы как можно быстрее реагировать на новые данные, которые должен загрузить этот клиент, поэтому ему нужно будет вызвать новое HTTP-соединение для отправки файла не нужно повторно проходить проверку подлинности.
Весьма вероятно, что клиент DropBox сжимает данные перед отправкой (для повышения скорости и экономии пропускной способности) там, где не будет ваш FTP-клиент. Таким образом, даже для больших файлов (если они не были предварительно сжаты или зашифрованы) DropBox и подобные ему утилиты могут быть быстрее, чем обычная передача по FTP, с некоторым запасом.
Для больших файлов первые три пункта выше станут незначительными по сравнению со временем, затраченным на фактическую передачу данных, но пункт 4 все еще может быть весьма важным. Для небольших файлов все дополнительное время настройки, добавляемое протоколом FTP, может в несколько раз превышать время, необходимое для фактической отправки данных.
источник
Как уже упоминалось, Dropbox может пропускать части файлов, которые не изменились . Кроме того, Dropbox будет пропускать загрузку файлов, если у него уже есть копия на стороне сервера (та, которую вы или кто-либо еще уже загрузили).
Таким образом, если вы пытаетесь загрузить файл, идентичный файлу, который уже есть в Dropbox, загрузка пропускается (и другие связанные машины могут начать скачивать его с серверов Dropbox). Если вы загружаете файл, который почти идентичен другому, уже загруженному файлу (неясно, должен ли уже загруженный файл быть «вашим» или мог быть получен от какого-либо пользователя), он просто отправит достаточно частей файл, чтобы воссоздать его на сервере в сочетании с файлом, который уже был загружен.
FTP не может делать ничего из этого (это простой протокол для отправки и получения потоков данных без ссылки на любые другие данные, доступные на удаленном конце). Такие инструменты, как rsync и Unison, могут «пропускать чанки, которые есть у другой стороны», но обычно ограничиваются сравнением чанков внутри файлов по одинаковому пути в синхронизированной иерархии. Похоже, что Dropbox распространяет эту идею на коллекции файлов (поэтому, если вы «загрузите» два почти идентичных файла, возможно, он сможет отправить только один плюс достаточный «diff» для повторного создания другого).
источник
Я предполагаю, что вы имеете в виду быстрее с точки зрения передачи файлов. Когда вы сохраняете файл в папке Dropbox, Dropbox отправляет только дельту (или разность) данных на удаленный сервер хранения. FTP (скорее всего) отправляет файл побайтово (а не просто отправляет изменения), что может занять гораздо больше времени для передачи по сети. Аналогично, при синхронизации с удаленного сервера локальные клиенты будут загружать только изменения.
Функция синхронизации по локальной сети также может ускорить синхронизацию и снизить необходимый сетевой трафик.
источник
Dropbox может быть быстрее, когда вы отправляете большее количество файлов. FTP работает настолько быстро, насколько это возможно, когда мы говорим со скоростью, но он требует слишком много «разговоров» между сервером и клиентским компьютером для каждого файла, поэтому FTP кажется медленнее. Если вы загружаете какое-то приложение с открытым исходным кодом с тысячами файлов, удобнее сжимать все файлы, загружать их по FTP и распаковывать на сервере.
источник
Я думаю, что они используют простые методы хеширования, похожие на MD5 / Sha
Всякий раз, когда вы помещаете файл в локальный «dropbox», dropbox-клиент вычисляет хэш этого файла и должен отправлять некоторые дополнительные данные, такие как размер файла, имя файла, на dropbox-сервер.
Если dropbox-сервер найдет похожие файлы (они должны поддерживать индекс хэшей и файловые данные на своем сервере), он просто сообщит клиенту, что файл успешно «загружен». ;-)
Таким образом, вы в конечном итоге «загружаете» файл только логически. Поскольку нет реальной передачи содержимого файла, это должно быть быстрее, чем что-либо еще.
Я не уверен, какой алгоритм хэширования использует dropbox, но я на 100% уверен, что их принцип работы аналогичен тому, который я описал выше.
источник
Хотя Dropbox использует другие сервисы, они исторически использовали Amazon AWS (Amazon Web Services). Похоже, что ваш трансфер из источника в пункт назначения имеет очень большой канал передачи. По моему опыту, Dropbox использует пункт назначения, который может принимать большие объемы данных одновременно. Dropbox также распределяет загрузку на разные IP-адреса. Сайт, на который вы пересылаете FTP, скорее всего, имеет гораздо меньший канал передачи и не имеет возможности распределять загрузки так эффективно.
Если вы запустите Resource Monitor (resmon) и перейдете на вкладку Network, вы заметите различные процессы, использующие пропускную способность сети.
Total (B/sec)
Total (B/sec)
Для меня, когда я загружаю файл в Dropbox, он использует 4 соединения для отправки 4 разных IP-адресов.
источник