Dropboxが技術的にFTPよりはるかに高速である理由を知りたいのですが?どのような技術を使用していますか?
差分ファイルについてではなく、どちらの場合も新しいファイルを転送することについて話します。Dropboxははるかに高速です。
つまり、アップロードしたファイルのFTPよりもはるかに高速で、おそらく10倍高速です。後で、より大きなファイルについて再度実験します。
Dropboxが技術的にFTPよりはるかに高速である理由を知りたいのですが?どのような技術を使用していますか?
差分ファイルについてではなく、どちらの場合も新しいファイルを転送することについて話します。Dropboxははるかに高速です。
つまり、アップロードしたファイルのFTPよりもはるかに高速で、おそらく10倍高速です。後で、より大きなファイルについて再度実験します。
回答:
これにはいくつかの理由が考えられます。
FTPプロトコルですはるかに効率的に。
FTP転送には、DropBoxが単一のHTTP接続のみを使用している可能性のある、少なくとも2つの接続(制御用とデータ用)が必要です。また、サーバーからクライアントへのFTPセッションのデータ接続が開かれる可能性があります。NATを使用すると、これが失敗する可能性があるため、FTPクライアントはその方法で接続しようとして失敗し、その後逆方向に試行されます。
FTP接続には、多くの行き来があります。ファイルを送信するには、クライアントは最低2つのコマンド(データ接続を開くコマンドと送信を開始するコマンド)を送信する必要があり、サーバーが応答するまで待機する必要があるたびに、余分な待ち時間が追加されます。ファイルごとのこれらの2つのラウンドトリップと同様に、最初の接続には複数のコマンド応答ラウンドトリップがあります。1つはユーザー名を送信し、もう1つはパスワードに送信し、もう1つは転送パラメーターを設定しますASCIIではなくバイナリデータが必要です)。クライアントは、サーバーに関する情報を取得するために、いくつかの追加コマンドを発行することもできます。Dropboxは、たった1つのHTTPリクエスト、または最大2つ(認証用、データ送信用)を使用する可能性があります。
さらに、FTP転送に使用しているクライアントに応じて(質問を編集してその情報を含めることをお勧めします)、送信操作ごとに接続を切断し、次に再接続する場合があります時間。このクライアントがダウンロードする必要がある新しいデータが利用可能になるとすぐに反応するために、DropBoxがロングポーリングの目的でしばらく接続を開いたままにすることはありそうにないため、新しいクライアントを起動する必要があります再認証する必要のないファイルを送信するためのHTTP接続。
FTPクライアントが送信されない場所でDropBoxクライアントが送信する前にデータを圧縮している(速度を向上させ、帯域幅を節約する)可能性は低くありません。そのため、大きなファイル(事前に圧縮または暗号化されていない限り)でも、DropBoxとそのようなユーティリティは、基本的なFTP転送よりも多少余裕があります。
大きなファイルの場合、上記の最初の3つのポイントは、実際にデータを転送するのにかかる時間と比較して重要ではありませんが、ポイント4は依然として非常に重要です。小さなファイルの場合、FTPプロトコルによって追加されるすべての追加セットアップ時間は、実際にデータを送信するのにかかる時間よりも数倍長くなる可能性があります。
他の人が述べたように、Dropboxは変更されていないファイルの一部をスキップできます。ただし、サーバー側に既にコピーがある場合(自分または他の誰かが既にアップロードしているもの)、Dropboxはファイルのアップロードをスキップします。
そのため、Dropboxが既に持っているファイルと同一のファイルをアップロードしようとすると、アップロードはスキップされます(他のリンクされたマシンはDropboxサーバーからのダウンロードを開始できます)。既にアップロードされている別のファイルとほぼ同じファイルをアップロードする場合(既にアップロードされたファイルが「自分のもの」であるか、他のユーザーからのものであるかは明確ではありません)、既にアップロードされたファイルと組み合わせた場合、サーバー上で再作成するファイル。
FTPはこれらのいずれも実行できません(リモートエンドで利用可能な他のデータを参照せずにデータのストリームを送受信するための単純なプロトコルです)。rsyncやUnisonなどのツールは、「相手側が既に持っているチャンクをスキップする」ことができますが、通常は、同期された階層の同一パスにあるファイル内のチャンクを比較することに制限されます。Dropboxは、この考え方をファイルのコレクションに拡張しているようです(したがって、2つのほぼ同一のファイルを「アップロード」すると、1つと十分な「diff」だけを送信して他のファイルを再作成することができます)。
私はあなたがファイルを転送するという点でより速く意味することを前提としています。Dropboxフォルダーにファイルを保存すると、Dropbox はデータのデルタ(または差分)のみをリモートストレージサーバーに送信します。FTPは(ほとんどの場合)ファイルを1バイトずつ(変更を送信するのではなく)送信します。これは、ネットワークを介した転送にはるかに長い時間がかかる可能性があります。同様に、リモートサーバーから同期する場合、ローカルクライアントは変更のみをダウンロードします。
LAN同期機能は、潜在的に同期を高速化し、必要なネットワークトラフィックを削減することもできます。
md5 / shaに似た単純なハッシュ手法を使用していると思います
ローカルの「dropbox」内にファイルをドロップするたびに、dropbox-clientはそのファイルのハッシュを計算し、filesize、filenameなどの追加データをdropbox-serverに送信する必要があります。
dropbox-serverが同様のファイルを見つけた場合(サーバー上でハッシュとファイルデータのインデックスを維持する必要があります)、ファイルが正常に「アップロード」されたことをクライアントに通知します。;-)
この方法では、ファイルを論理的にのみ「アップロード」することになります。実際のファイルコンテンツの転送はないため、これは他の何よりも高速でなければなりません。
どのハッシュアルゴリズムドロップボックスを使用するかはわかりませんが、その動作原理は上記で説明したものとほぼ同じであると100%確信しています。
Dropboxは他のサービスを使用していますが、これまではAmazon AWS(Amazon Web Services)を使用してきました。転送元から転送先への転送には非常に大きな転送パイプがあるようです。私の経験では、Dropboxは大量のデータを一度に受け入れることができる宛先を使用しています。また、Dropboxはアップロードを異なるIPアドレスに配布します。FTPを送信するサイトには、転送パイプがはるかに小さく、アップロードを効率的に配信する機能がありません。
リソースモニター(resmon)を実行し、[ネットワーク]タブに移動すると、ネットワーク帯域幅を使用するさまざまなプロセスに気付くでしょう。
Total (B/sec)
Total (B/sec)
私にとって、Dropboxにファイルをアップロードするとき、4つの異なるIPアドレスを送信するために4つの接続を使用しています。