2017-02-27 195 views
0

我正在更新大量CloudBlockBlob,每个请求使用CloudBlobClient(它总是相同的blob)。Azure:配置BlobEndpoint和CloudBlobClient以获得最大上传吞吐量

为的BlobEndpoint的参数设置如下:

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

什么我注意到的是,过了一段时间,每秒更新的数量减少到非常低的速度,我想这是因为到可用连接的数量。

你是否推荐使用相同的blob客户端来处理具有一定级别并行性的多个请求?也许是不同的端点参数配置?

感谢

编辑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。

在blob端点上工作得比ConnectionLimit好很多。