DropboxがFTPと比較して非常に高速なのはなぜですか?


36

Dropboxが技術的にFTPよりはるかに高速である理由を知りたいのですが?どのような技術を使用していますか?

差分ファイルについてではなく、どちらの場合も新しいファイルを転送することについて話します。Dropboxははるかに高速です。

つまり、アップロードしたファイルのFTPよりもはるかに高速で、おそらく10倍高速です。後で、より大きなファイルについて再度実験します。


2
アップロードしたファイルのサイズ、種類、および数。それぞれがアップロードするのにどれくらい時間がかかりましたか?FTP経由でどこにファイルをアップロードしましたか?Dropboxは魔法ではありません。最も簡単な説明は、アップロードしたFTPサーバーの帯域幅がAmazonよりもはるかに少ないということです。
user23307

2
既に持っている場合、再アップロードされません; p
ジャーニーマンオタク

4
「新しいファイル」と言いますが、これらのファイルが新鮮でランダムなデータでない限り、ブロックレベルの同期(rsyncや他のツールのような)の利点を目にするでしょう。
クリスジョンセン

1
これはホスティング比較の方が多く、Dropboxよりも高速なFTPサーバーを知っています。また、Filezillaとの複数の接続を使用しているため、この回答に記載されているステートメントは成り立ちません。
タマラWijsman

Dropboxは重複排除を使用して一般的なファイルのストレージスペースを節約するため、既にファイルがある場合はアップロードする必要はありません。
パラドロイド

回答:


31

これにはいくつかの理由が考えられます。
FTPプロトコルですはるかに効率的に。

  1. FTP転送には、DropBoxが単一のHTTP接続のみを使用している可能性のある、少なくとも2つの接続(制御用とデータ用)が必要です。また、サーバーからクライアントへのFTPセッションのデータ接続が開かれる可能性があります。NATを使用すると、これが失敗する可能性があるため、FTPクライアントはその方​​法で接続しようとして失敗し、その後逆方向に試行されます。

  2. FTP接続には、多くの行き来があります。ファイルを送信するには、クライアントは最低2つのコマンド(データ接続を開くコマンドと送信を開始するコマンド)を送信する必要があり、サーバーが応答するまで待機する必要があるたびに、余分な待ち時間が追加されます。ファイルごとのこれらの2つのラウンドトリップと同様に、最初の接続には複数のコマンド応答ラウンドトリップがあります。1つはユーザー名を送信し、もう1つはパスワードに送信し、もう1つは転送パラメーターを設定しますASCIIではなくバイナリデータが必要です)。クライアントは、サーバーに関する情報を取得するために、いくつかの追加コマンドを発行することもできます。Dropboxは、たった1つのHTTPリクエスト、または最大2つ(認証用、データ送信用)を使用する可能性があります。

  3. さらに、FTP転送に使用しているクライアントに応じて(質問を編集してその情報を含めることをお勧めします)、送信操作ごとに接続を切断し、次に再接続する場合があります時間。このクライアントがダウンロードする必要がある新しいデータが利用可能になるとすぐに反応するために、DropBoxがロングポーリングの目的でしばらく接続を開いたままにすることはありそうにないため、新しいクライアントを起動する必要があります再認証する必要のないファイルを送信するためのHTTP接続。

  4. FTPクライアントが送信されない場所でDropBoxクライアントが送信する前にデータを圧縮している(速度を向上させ、帯域幅を節約する)可能性は低くありません。そのため、大きなファイル(事前に圧縮または暗号化されていない限り)でも、DropBoxとそのようなユーティリティは、基本的なFTP転送よりも多少余裕があります。

大きなファイルの場合、上記の最初の3つのポイントは、実際にデータを転送するのにかかる時間と比較して重要ではありませんが、ポイント4は依然として非常に重要です。小さなファイルの場合、FTPプロトコルによって追加されるすべての追加セットアップ時間は、実際にデータを送信するのにかかる時間よりも数倍長くなる可能性があります。


詳細な回答については+1。私もDropboxがこんなに速いのかと思っていました。
グラントペイリン

1
Dropboxのデータは転送前に暗号化されていることをどこかで読んだので、(少なくとも少し)圧縮されていることは理にかなっています。
ディーンラザー

暗号化されたファイルは圧縮可能であるべきではありません
-Martin Beckett

@mgb:ファイル圧縮技術では、暗号化されたデータに十分な冗長性が見当たらないため、最初にファイルを送信しても圧縮の助けにはなりません。ただし、Dropboxに既にファイルがあり、それを更新したばかりの場合(およびキーはまだ同じである場合)、リモートコピーを更新するためにファイル全体を転送する必要はないでしょう。データを圧縮することはできませんが、データを最新の状態に保つために送信する必要のある量はまだ減らすことができます(小さな更新が見られる大きなファイルの場合はかなり)。
デビッドスピレット

1
データをプレーンな形式で送信するのではなく、転送(HTTP over SSL)にHTTPSを使用していると確信しています。実際のストレージにどのような暗号化が使用されているのかわかりませんが、データが機密性がある場合は、関連するキーのコピーのみを所有するように、あなたの側で暗号化する必要があります。
デビッドスピレット

15

他の人が述べたように、Dropboxは変更されていないファイルの一部をスキップできます。ただし、サーバー側に既にコピーがある場合(自分または他の誰かが既にアップロードしているもの)、Dropboxはファイルのアップロードをスキップします

そのため、Dropboxが既に持っているファイルと同一のファイルをアップロードしようとすると、アップロードはスキップされます(他のリンクされたマシンはDropboxサーバーからのダウンロードを開始できます)。既にアップロードされている別のファイルとほぼ同じファイルをアップロードする場合(既にアップロードされたファイルが「自分のもの」であるか、他のユーザーからのものであるかは明確ではありません)、既にアップロードされたファイルと組み合わせた場合、サーバー上で再作成するファイル。

FTPはこれらのいずれも実行できません(リモートエンドで利用可能な他のデータを参照せずにデータのストリームを送受信するための単純なプロトコルです)。rsyncUnisonなどのツールは、「相手側が既に持っているチャンクをスキップする」ことができますが、通常は、同期された階層の同一パスにあるファイル内のチャンクを比較することに制限されます。Dropboxは、この考え方をファイルのコレクションに拡張しているようです(したがって、2つのほぼ同一のファイルを「アップロード」すると、1つと十分な「diff」だけを送信して他のファイルを再作成することができます)。


11

私はあなたがファイルを転送するという点でより速く意味することを前提としています。Dropboxフォルダーにファイルを保存すると、Dropbox はデータのデルタ(または差分)のみをリモートストレージサーバーに送信します。FTPは(ほとんどの場合)ファイルを1バイトずつ(変更を送信するのではなく)送信します。これは、ネットワークを介した転送にはるかに長い時間がかかる可能性があります。同様に、リモートサーバーから同期する場合、ローカルクライアントは変更のみをダウンロードします。

LAN同期機能は、潜在的に同期を高速化し、必要なネットワークトラフィックを削減することもできます。


確かに、私は両方の場合の新しいファイルについて話している。

0

大量のファイルを送信すると、Dropboxが高速になる場合があります。FTPは、速度を話すときはできるだけ速くなりますが、ファイルごとにサーバーとクライアントコンピューター間で「トーク」がかかりすぎるため、ftpは遅いようです。数千のファイルがあるオープンソースアプリケーションをアップロードする場合、すべてのファイルを圧縮し、FTP経由でアップロードし、サーバーで解凍する方が便利です。


0

md5 / shaに似た単純なハッシュ手法を使用していると思います

ローカルの「dropbox」内にファイルをドロップするたびに、dropbox-clientはそのファイルのハッシュを計算し、filesize、filenameなどの追加データをdropbox-serverに送信する必要があります。

dropbox-serverが同様のファイルを見つけた場合サーバー上でハッシュとファイルデータのインデックスを維持する必要があります)、ファイルが正常に「アップロード」されたことをクライアントに通知します。;-)

この方法では、ファイルを論理的にのみ「アップロード」することになります。実際のファイルコンテンツの転送はないため、これは他の何よりも高速でなければなりません。

どのハッシュアルゴリズムドロップボックスを使用するかはわかりませんが、その動作原理は上記で説明したものとほぼ同じであると100%確信しています。


0

Dropboxは他のサービスを使用していますが、これまではAmazon AWS(Amazon Web Services)を使用してきました。転送元から転送先への転送には非常に大きな転送パイプがあるようです。私の経験では、Dropboxは大量のデータを一度に受け入れることができる宛先を使用しています。また、Dropboxはアップロードを異なるIPアドレスに配布します。FTPを送信するサイトには、転送パイプがはるかに小さく、アップロードを効率的に配信する機能がありません。

リソースモニター(resmon)を実行し、[ネットワーク]タブに移動すると、ネットワーク帯域幅を使用するさまざまなプロセスに気付くでしょう。

  • [ネットワークアクティビティのあるプロセス]で、次の列を選択します。 Total (B/sec)
  • [TCP接続]で、次の列を選択します。 Total (B/sec)

私にとって、Dropboxにファイルをアップロードするとき、4つの異なるIPアドレスを送信するために4つの接続を使用しています。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.