2017-02-27 7 views
0

CloudBlockBlobの多くは、要求ごとにCloudBlobClient(常に同じブロブ)を使用して更新しています。Azure:最大アップロードスループットのためにBlobEndpointとCloudBlobClientを設定する

blobEndpoint.UseNagleAlgorithm<-false 
blobEndpoint.ConnectionLimit<-1000 
//blobEndpoint.MaxIdleTime<-Timeout.Infinite 

私が気づいてることは、しばらくして、毎秒更新の数が非常に低いレートに低下していることであり、私はそれが原因だとし、次のようにBlobEndpointため

パラメータが設定されています使用可能な接続の数に制限します。

特定のレベルの並列性を持つ複数のリクエストに対して同じblobクライアントを使用することをお勧めしますか?エンドポイント・パラメータの構成が異なるかもしれませんか?

おかげ

EDIT 1: 私はすべてのスレッド間で単一のクライアントを使用してみましたが、動作はまったく同じです。最初は非常に高いスループット。その後、接続数は大幅に減少し、非常に低いレベルに安定します。アクティブな接続はリサイクルされず、BLOBクライアントによって失われてしまいます。

答えて

0

安定した高い処理を達成するには、ある程度の並列性が必要です。 Azure Storage Data Movement libraryを活用できるかどうかを確認してください。

// Use the interfaces from the new Azure Storage Data Movement Library to upload the blob 
// Setup the number of the concurrent operations 
TransferManager.Configurations.ParallelOperations = 64; 

// Setup the transfer context and track the upoload progress 
TransferContext context = new TransferContext(); 
context.ProgressHandler = new Progress<TransferProgress>((progress) => 
{ 
    Console.WriteLine("Bytes uploaded: {0}", progress.BytesTransferred); 
}); 

// Upload a local blob 
var task = TransferManager.UploadAsync(
    sourcePath, destBlob, null, context, CancellationToken.None); 
task.Wait(); 

AzCopyは、それが重大なビジネスであることを知っています。

+0

かなりたくさんのスレッドでリクエストごとに異なるCloudBlobClientを使用しています。あなたは単一のクライアントを使用することを提案していますか? –

0

私が見つけた解決策は、system.netでmaxconnectionを1000に設定することでした。

ブロブエンドポイントのConnectionLimitよりもはるかに優れています。

関連する問題