微软Azure Blob存储上传性能

4
我正在运行一个Azure Web角色,将非常小的Blob存储到Azure存储中(上传Blob是从服务器而不是浏览器完成的)。我已经在Stack Overflow和互联网上搜索了优化Blob存储性能的技巧,并且我相信我已经检查并实现了所有通常的方法:异步上传,允许无限制的出站Web连接(这现在似乎是Web角色的默认设置,不再需要在web.config或代码中显式设置)。
调整允许的并发上传数量确实有所改善,但无论我尝试什么,我似乎最多只能每秒上传约1,000个Blob。这是在Azure Web角色中运行时,在与存储帐户(East US)位于同一区域的情况下。当我在家中通过良好的Internet连接运行它时,速率并没有少,大约为每秒700个Blob,这似乎告诉我限制速率的不是网络延迟,而是存储服务的实际处理时间。
对于这种服务,我通常不会认为这些速率很糟糕,但我读到Microsoft声称每秒可以处理约20,000个存储事务,因此我对这些结果有些失望。
我想听听那些真正尝试推动Blob存储极限的人的反馈。每秒大约1000个小上传是否正确?还是可能有其他我应该做的事情来改善这一点?如果需要,我会发布代码,但我宁愿不接受猜测性的答案,我想听听开发人员的意见,他们可以确认我的结果是否合理,或者他们已经看到了更高的吞吐量。
我应该补充说明,我目前正在运行一个小型Web角色。我也尝试在中型Web角色中运行它,但没有看到任何显着的差异。
编辑:经过几天的开发和测试,我的上传速率似乎突然增加了。虽然不多,但可能又快了约200个每秒。在查找互联网时,我注意到Azure文档中的一条评论:“存储帐户会随着使用量的增加而自动扩展。”因此,我想知道它是否真的能够处理更高的速率,但在持续高流量期间之前不会自动扩展。对此的任何确认也将不胜感激。

单独使用异步可能无法实现最大吞吐量。您还可能需要多线程(可能需要使用线程池和适当的并发集合类型来提供线程)。 - techsaint
@techsaint - 异步任务调度应根据需要使用线程池,因此我认为这不是问题。另外,正如我所提到的,所有迹象表明限制似乎不在于我能够快速发送或接收网络请求的速度,而是在另一端花费的时间。 - reads0520
1个回答

1
根据请求的大小,问题可能是由 Nagle算法对小请求不友好引起的 - 虽然通常我看到这种情况发生在队列/表操作中。尝试禁用Nagle,让我知道是否有任何不同。顺便说一下,您必须在建立连接之前禁用它,否则更改将不会生效。
杰森

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接