我正在根据请求使用CloudBlockBlob
更新大量的CloudBlobClient
(它总是相同的blob)。
BlobEndpoint
的参数设置如下:
blobEndpoint.UseNagleAlgorithm<-false
blobEndpoint.ConnectionLimit<-1000
//blobEndpoint.MaxIdleTime<-Timeout.Infinite
我注意到的是,经过一段时间后,每秒的更新次数降低到非常低的速率,我想这是由于可用连接的数量。
您是否建议对具有一定并行度的多个请求使用相同的blob客户端?也许端点参数的配置不同?
谢谢
编辑1:我尝试在所有线程中使用单个客户端,但行为完全相同。一开始吞吐量非常高,然后连接数量大幅下降并稳定在非常低的水平。这就像活动连接不被回收,它们被blob客户端丢失。
需要一定程度的并行性才能实现稳定的高吞吐量。看看你是否可以利用qazxsw poi。
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();
所依据的东西,所以你知道这是一项严肃的事业。
我找到的解决方案是在system.net中将AzCopy设置为1000。
在blob端点上工作得比maxconnection
好得多。
根据ConnectionLimit
你应该配置https://github.com/Azure/azure-storage-net-data-movement/blob/master/README.md设置。
该文章建议将其设置为您的处理器数量8次,如下所示:
ServicePointManager.DefaultConnectionLimit
ServicePointManager.DefaultConnectionLimit = Environment.ProcessorCount * 8;
类使用内部CloudBlobClient
,它使用此设置。