1

私は、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 のドキュメントを調べてみましたが、このキューイング メカニズムやプロパティなどに関する言及は見つかりませんでした。これらの呼び出しの同時実行性を高める方法を提供するように見えました。

任意のポインタをいただければ幸いです!

4

2 に答える 2

2

これは、おそらく単純さの要件のために、SDK によって本質的にサポートされていないものですか? この記事に基づいて、独自の同時パーツ アップロードを実装しました。 http://aws.typepad.com/aws/2010/11/amazon-s3-multipart-upload.html

いくつかの観察:

  1. このアプローチは、完全なコンテンツがメモリにある場合にのみ適しています。これは、コンテンツをチャンクに分割し、部分的なアップロードでラップする必要があるためです。多くの場合、同時アップロードを実行できるようにするためだけに、メモリ内のデータを GB 単位で並べても意味がありません。そこでトレードオフを評価する必要があるかもしれません。

  2. SDK には、singlePut アップロードに対して最大 16MB の制限があり、この値を超えるファイル サイズは、パーツ アップロード用に 5MB のチャンクに分割されます。残念ながら、これらの値は構成できません。そのため、独自のマルチパート アップロード ロジックをほとんど作成する必要がありました。上記の値は Java SDK の値であり、C# の値でも同じであると予想されます。

  3. すべての操作は非ブロッキングであり、これは優れています。

于 2012-07-10T07:57:09.553 に答える
0

C#では、partsizeを手動で設定してみることができます。

TransferUtilityUploadRequest request =
            new TransferUtilityUploadRequest()
                .WithPartSize(??).

または

TransferUtilityConfig utilityConfig = new TransferUtilityConfig();
       utilityConfig.MinSizeBeforePartUpload = ??;

しかし、私はデフォルトを知りません

于 2012-12-10T14:10:04.627 に答える