gpt4 book ai didi

azure - 将许多小文件从 Azure VM 临时磁盘复制到 Azure Blob 时的性能

转载 作者:行者123 更新时间:2023-12-04 21:46:50 28 4
gpt4 key购买 nike

我正在尝试找出将数千个小 Blob 写入 Azure 存储时性能最佳的方法。应用场景如下:

  • 不断地创建或覆盖数千个文件运行安装在 Windows Azure VM 上的 Windows 服务
  • 写入虚拟机可用的临时存储,服务可以达到更多每秒创建超过 9,000 个文件
  • 文件大小范围在 1 KB 到 60 KB 之间
  • 在运行相同软件的其他虚拟机上,正在以相同的速率和条件创建其他文件
  • 考虑到需要构建并保持更新中央存储库,每个虚拟机上运行的另一个服务会将新创建的文件从临时存储复制到 Azure Blob
  • 其他服务器应该读取最新版本的 Azure Blob

请注意,由于我为简短起见而未列出的许多限制,目前无法修改主服务以直接创建 Blob 而不是临时文件系统上的文件。 ...从我目前的情况来看,这意味着创建速度较慢,根据原始要求是 Not Acceptable 。

我在 10,000 个文件的紧密循环中测试的此复制操作似乎限制为每秒 200 个 blob 创建。在调整此处找到的名为“Windows Azure ImportExportBlob”的示例代码后,我已经能够达到此结果:http://code.msdn.microsoft.com/windowsazure/Windows-Azure-ImportExportB-9d30ddd5与此答案中找到的异步建议:Using Parallel.Foreach in a small azure instance

我在具有 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,我终于对结果感到满意。
再次感谢大家的回答。

关于azure - 将许多小文件从 Azure VM 临时磁盘复制到 Azure Blob 时的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13158893/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com