私は、S3 に大きな (各 ~ 15 mb) ファイルのグループをアップロードする .net アプリのアップロード パフォーマンスの改善に取り組んでいます。
マルチパート オプション (スレッド、チャンク サイズなど) を調整し、可能な限り改善したと思いますが、ネットワークの使用状況を注意深く観察していると、予期しないことに気付きました。
ディレクトリ内の多数のファイルを繰り返し処理し、次のように S3 転送ユーティリティのインスタンスを使用して、アップロードのためにそれぞれを送信します。
// prepare the upload
this._transferUtility.S3Client.PutBucket(new PutBucketRequest().WithBucketName(streamingBucket));
request = new TransferUtilityUploadRequest()
.WithBucketName(streamingBucket)
.WithFilePath(streamFile)
.WithKey(targetFile)
.WithTimeout(uploadTimeout)
.WithSubscriber(this.uploadFileProgressCallback);
// start the upload
this._transferUtility.Upload(request);
次に、上で指定した uploadFileProgressCallback でこれらが完了するのを監視します。
しかし、ネットワーク インターフェイスを見ると、S3 にアップロードしているファイルの数と正確に一致するアウトバウンド トラフィック グラフに多数の明確な「こぶ」が見られます。
これは非同期呼び出しであるため、各転送がすぐに開始され、送信データが段階的に増加し、アップロードが完了するたびに段階的に減少するという印象を受けました。私が今見ているものに基づいて、これらのリクエストは、呼び出し元のコードとは非同期であるが、どこかにキューに入れられてから順番に実行されているのだろうか?
もしそうなら、それを変更して、すべてのリクエストが(ほぼ)同時にアップロードを開始するようにして、利用可能なアップロード帯域幅を最大化し、全体の実行時間を短縮できるようにします。
S3 .net SDK のドキュメントを調べてみましたが、このキューイング メカニズムやプロパティなどに関する言及は見つかりませんでした。これらの呼び出しの同時実行性を高める方法を提供するように見えました。
任意のポインタをいただければ幸いです!