Mar*_*tra 5 azure azure-storage-blobs
我正在尝试将数千个小Blob写入Azure存储时找出性能最佳的方法.应用场景如下:
请注意,对于许多我没有列出的简短约束,目前无法修改主服务以直接创建Blob而不是临时文件系统上的文件.......而且从我目前看到的情况来看,这意味着创作速度较慢,而且根据原始要求是不可接受的.
这个复制操作,我正在测试10,000个文件的紧密循环,似乎限制在每秒200 blob创建.在调整了这里找到的名为"Windows Azure ImportExportBlob"的示例代码之后,我已经能够达到这个结果:http://code.msdn.microsoft.com/windowsazure/Windows-Azure-ImportExportB-9d30ddd5, 其中包含异步建议这个答案:在一个小的azure实例中使用Parallel.Foreach
我在具有8个内核的超大型VM上获得了每秒200个blob创建的最大值,并相应地设置了"maxConcurrentThingsToProcess"信号量.测试期间的网络利用率是任务管理器中显示的可用10Gb的最大1%.这意味着该VM大小应该可用的800 Mb大约100 Mb.
我看到在经过的时间内复制的总大小给了我大约10 MB /秒.
您可以生成的Azure存储流量是否有一些限制,或者在编写这么多小文件时我应该使用不同的方法吗?
@breischl 感谢您提出的可扩展性目标。读完那篇文章后,我开始寻找更多可能由微软准备的目标数据,发现了 4 个帖子(太多了,我的“声誉”无法在这里发布,其他 3 个是同系列的第 2、3 和 4 部分):
http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/04/windows-azure-benchmarks-part-1-blobs-read-throughput.aspx
第一篇文章包含一个重要提示:“您可能必须增加ServicePointManager.DefaultConnectionLimit才能与存储建立 2 个以上的并发连接。”
我已将其设置为 300 ,重新运行测试,发现 MB/s 显着增加。正如我之前所写,当“太多”线程写入 blob 时,我认为底层 blob 服务会达到限制。这也证实了我的担忧。因此,我删除了为使用信号量而对代码所做的所有更改,并再次用parallel.for 替换它,以启动尽可能多的 blob 上传操作。结果非常棒:写入 blob 的速度为 61 MB/s,读取速度为 65 MB/s。
可扩展性目标是 60 MB/s,我最终对结果感到满意。
再次感谢大家的回答。
| 归档时间: |
|
| 查看次数: |
2175 次 |
| 最近记录: |