0

サーバーに 8 GB のファイルがあり、http マルチレンジ リクエストを使用してこのファイルから 1.5 GB をダウンロードしたいと考えています。カールを使用しています。

500MB の大きな範囲を含む最初のリクエストを除いて、すべてのリクエストはファイル上で均一に分散されます (合計 161 のリクエストがあります)。

大きな範囲のこの最初のリクエストのダウンロード時間は約 40 秒、合計時間は約 560 秒であることがわかりました。つまり、500MB を 40 秒間ダウンロードし、1GB を 520 秒間ダウンロードします。したがって、均一に分散されたリクエストの速度が 6 倍になります。また、この均一に分散されたリクエストが実行されると、ダウンロード率が 6 ~ 8 倍に低下することにも気付きました。

なぜこれが起こるのか分かりません。各リクエストの範囲はオフセットの増加によってソートされるため、なぜこのような速度低下が発生するのかわかりません。何がこのような混乱を引き起こすのか説明していただけますか? さらに、そのような一連のリクエストのパフォーマンスを向上させるにはどうすればよいですか?

必要に応じて、一連のリクエストとタイミングを提供できます。

4

1 に答える 1

1

あなたは私たちに取り組むべきことをあまり与えていませんが、次の点を確認/検討することをお勧めします:

  • 実際に複数の範囲で単一のリクエストを実行していますか、またはそれぞれが別々の範囲で複数のリクエストを実行していますか?

  • サーバー(およびスクリプトの場合はスクリプト)が実際にバイト範囲リクエストをサポートしていると確信していますか?

  • 静的ファイルからダウンロードしていますか、それともサーバーによって動的に生成されたものですか? 後者の場合、各リクエストは、関心のある部分だけを送信する前に、サーバーがおそらく完全なファイルを再生成する必要があることを意味すると考えてください。

  • いずれにせよ、実際のダウンロードの前に、各リクエスト (TCP 接続、必要に応じて SSL/TLS ハンドシェイク、HTTP リクエスト) を確立するのに少し時間がかかります。これは、個別の curl 呼び出しを使用する場合、またはキープアライブが無効になっている場合に特に当てはまります。

複数の範囲リクエストの理由は何ですか? ファイル全体をダウンロードするだけでなく、クライアント側で後処理を行う方が速い/簡単ではないでしょうか?

于 2015-12-29T15:03:08.393 に答える