2014-02-17 60 views
3

我正在运行Azure Web角色,它将非常小的Blob存储到Azure存储中。 (Blob上传是从服务器完成的,而不是从浏览器完成)。我已经搜索了堆栈溢出和互联网的其他部分,以获得优化blob存储性能的提示,我相信我已经检查并实现了所有常见的嫌疑犯:上传异步,允许无限的传出网络连接(现在似乎是Web角色的默认设置,不再需要在web.config或代码中明确设置)。Microsoft Azure Blob存储上传性能

调整我允许的并发上传次数会有所作为,但无论我尝试过什么,我似乎都会在以上,每秒大约有1000次blob上传。这是在Azure Web角色中运行时,位于与存储帐户(美国东部)相同的区域中。从家里通过良好的互联网连接运行时,我的速度并不低,〜700 blob/sec,这似乎告诉我,网络延迟不是限制速度,而是存储服务的实际处理时间。

我通常不会考虑这些服务的速度可怕,但我读过微软拥有每秒约20,000个存储交易的速度,所以我对这些有点失望结果。

我想得到一些真正尝试推动blob存储极限的反馈。每秒约有1000次小小的上传是否正确?或者还有什么我应该做的改进呢?如果需要,我会发布代码,但我宁愿不会收到猜测的答案,我希望听到开发人员能够证实我的结果是合理的,或者他们已经看到更高的吞吐量。

我应该补充说我目前正在一个小的web角色中运行这个。我也尝试了它在中等网络角色,并没有看到任何重大差异。

编辑: 经过几天的开发和测试,我的上传速度似乎突然增加。不是很多,但可能是每秒另一个〜200。在环顾网络时,我注意到了Azure文档中的一条评论,其中声明“随着使用量的增加,存储帐户会自动扩展。”所以我想知道它是否真的有更高的利率能力,但不会自动扩大规模,直到它看到持续的高成交量。对此的一些确认也将不胜感激。

+0

异步本身可能不允许最大吞吐量。您可能还需要多线程(可能需要使用线程池和适当的并发集合类型来提供线程)。 – techsaint

+0

@techsaint - 异步任务调度应根据需要使用线程池,所以我不认为这是一个问题。另外,正如我所提到的,所有迹象都表明,这种限制似乎并不在于我能够多快地获得发送或接收的网络请求,而是它发生在另一端的时间。 – reads0520

回答

1

取决于您的请求有多小,问题可能是由Nagle’s Algorithm is Not Friendly towards Small Requests引起的 - 尽管通常我会看到使用队列/表操作的情况。尝试禁用Nagle,让我知道这是否有任何区别。作为一个fyi,你必须在建立连接之前禁用它,否则这些更改不会生效。

Jason