并行化Cosmos DB Table请求时出现停滞问题求助
并行调用Azure Cosmos DB Table API时的请求停滞与超时问题
当我并行发起大量操作时,这些操作经常会超时或者失败。我当前用的技术栈是这些:
- Azure Cosmos DB Table API
- .NET Core 2.0 控制台应用
- WindowsAzure.Storage(9.2.0)NuGet包
- 采用标准配置:
CloudStorageAccount.Parse(...).CreateCloudTableClient().GetTableReference("...")
这段代码会触发8999个任务,每个任务都是指定了PartitionKey和RowKey的TableOperation.Retrieve操作。我特意加了代码来跟踪任务完成状态以及IRetryPolicy的触发情况,全程没有出现429错误。
下面是最近一次运行的输出:
await Task.WhenAll(stuff.Select(x => table.ExecuteAsync(opGetter.Get(x)))); 0:01 - 12 done 0:02 - 228 done 0:03 - 313 done 0:04 - 435 done 0:05 - 1010 done 0:06 - 1883 done 0:07 - 2833 done 0:08 - 3014 done 0:09 - 3878 done 0:10 - 5447 done 0:11 - 5569 done 0:12 - 6492 done 0:13 - 6527 done 0:14 - 6532 done 0:15 - 6541 done 0:16 - 6543 done 0:17 - 6547 done 0:18 - 6552 done 0:19 - 6554 done 0:20 - 6951 done 0:21 - 8105 done 0:22 - 8128 done 0:23 - 8591 done 0:24 - 8907 done 0:25 - 8908 done 0:29 - 8994 done 0:32 - 8996 done 1:14 - 8997 done 2:26 - 8998 done 5:02 - StatusCode: 0 "An error occurred while sending the request." 5:05 - All 8999 Done
(有时候还会出现客户端超时错误,甚至多个错误)
理想状态下,这8999次检索操作应该只需要几秒就能完成。到底该怎么解决这种停滞问题?
补充几个关键情况:
- 我没有修改过max connections这类ServicePoint设置
- 因为没有支持.NET Core或Standard的Cosmos DB Table API SDK,没法用“Direct Mode”或“TCP”模式,只能用Gateway/Https
- 我怀疑问题出在客户端这边
- 程序运行在本地服务器,不是Azure环境
- 这不是偶然现象,只要发起大批次请求,几乎每次都会出现这种情况
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

