【问题标题】:Why is downloading from Azure blobs taking so long?为什么从 Azure Blob 下载需要这么长时间?
【发布时间】:2011-11-12 20:34:13
【问题描述】:

在我的 Azure Web 角色 OnStart() 中,我需要部署一个该角色所依赖的大型非托管程序。该程序之前被压缩成一个 400 兆字节的 .zip 存档,拆分为每个 20 兆字节的文件并上传到一个 blob 存储容器。该程序不会改变 - 一旦上传,它可以保持这种状态很长时间。

我的代码执行以下操作:

CloudBlobContainer container = ... ;
String localPath = ...;
using( FileStream writeStream = new FileStream(
             localPath, FileMode.OpenOrCreate, FileAccess.Write ) )
{
     for( int i = 0; i < blobNames.Size(); i++ ) {
         String blobName = blobNames[i];
         container.GetBlobReference( blobName ).DownloadToStream( writeStream );
     }
     writeStream.Close();
}

它只是打开一个文件,然后将部分写入其中。效果很好,除了从单核(超小)实例运行时大约需要 4 分钟。这意味着平均下载速度约为每秒 1.7 兆字节。

这让我很担心——它似乎太慢了。应该这么慢吗?我究竟做错了什么?我可以做些什么来解决我的部署问题?

【问题讨论】:

  • 一个显而易见的检查:确保您的 Web 角色和您的存储在同一个关联组中。否则,您可能会发现(例如)都柏林的网络角色正试图从(例如)新加坡获取数据。

标签: performance azure cloud azure-storage azure-blob-storage


【解决方案1】:

补充 Richard Astbury 所说的:一个 Extra Small 实例的带宽只有 Small 的一小部分。你会看到大约。 5Mbps 超小号,大约。 Small 100Mbps(对于 Small 到 Extra Large,每个内核将获得大约 100Mbps)。

【讨论】:

  • 这比你说的还要好。小型有 100Mbps 的保证带宽。根据您的相邻虚拟机正在做什么,您可以轻松获得 250Mbps+。您保留的核心越多,它就越好。 :)
【解决方案2】:

超小实例的 IO 性能有限。您是否尝试过使用中型实例进行比较?

【讨论】:

    【解决方案3】:

    在我过去做过的一些临时测试中,我发现下载 1 个大文件和尝试并行下载 N 个小文件之间没有明显的区别。事实证明,无论如何,NIC 上的带宽通常是限制因素,大文件与许多小文件一样容易饱和。反过来是不正确的,顺便说一句。并行上传而不是一次上传,确实会让您受益。

    我提到这一点的原因是,您似乎应该在这里使用 1 个大 zip 文件以及类似 Bootstrapper 的东西。这将是 1 行代码供您下载、解压缩并可能运行。更好的是,它不会在重新启动时多次执行此操作,除非您强制执行。

    正如其他人已经恰当地提到的那样,XS 实例上的 NIC 带宽甚至比 S 实例要小得多。通过稍微增加 VM 大小,您会看到下载速度更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 2019-11-13
      • 2012-08-31
      • 1970-01-01
      相关资源
      最近更新 更多