7

我的 Azure 云服务使用 .Net 存储库 (1.7) 读取和写入 blob。这些 blob 与服务位于同一数据中心。在我的第一个容器中,操作很快(大约 10 毫秒)。在我的第二个容器中,它们非常慢(通常大约 2 秒或 14 秒,介于两者之间的时间不多)。两者都使用 CloudBlob.DownloadToStream() 将数据传输到 MemoryStream 中。文件大小通常小于 100kB。

现在我承认我还没有设置一个适当的测试来证明以上所有内容 - 我只是通过我的日志文件,所以我访问 blob 的方式可能会有一些细微的差异。如果事实证明是这样,我们深表歉意。

无论如何,这两个容器之间唯一相关的区别似乎是:

  • 快速容器被频繁访问(每天数万个请求),而慢速容器很少被访问(可能每天 200 个请求)。
  • 快速容器通常存储之后很快获取的项目。缓慢的容器通常会加载几天前可能已经存储的东西。

问题:哪些因素会影响不经常访问的 Blob 的 Blob 性能?我该怎么做才能让它更快?

(我不知道 Azure blob 存储是如何实现的,但基于以上我猜测数据被保存到存储阵列中并通过动态扩展的 VM 集合访问,每个 VM 都在内存中实现缓存 blob。因此,当 Azure 发现它需要启动 VM 时,会发生约 14 秒的延迟。当 VM 可用时会发生约 2 秒的延迟,但它需要在物理磁盘上查找数据(似乎相当慢),当项目存储在内存缓存或类似的东西时,会发生 10 毫秒的延迟。)

4

1 回答 1

8

Windows Azure 存储未按照您描述的方式构建(缓存 VM 数量不断增加),因此在 Azure 存储服务器端缓存某些数据和未缓存其他数据不会产生影响。请参阅Windows Azure 存储体系结构概述以获得良好的概述,或SOSP 论文 - Windows Azure 存储:具有强一致性的高可用性云存储服务以获得更深入的了解。

要确定为什么您的 blob 请求较慢,首先要做的是确定性能缓慢是服务器端还是客户端。幸运的是,Azure 存储通过存储分析(Windows Azure 存储日志记录:使用日志跟踪存储请求)使这变得简单——只需比较端到端延迟和服务器延迟。我怀疑您会看到以下两种情况之一:

  1. 低端到端和低服务器。这将表明请求从客户端发送延迟(即没有足够的工作线程),或者您的日志记录提供的数据不正确。
  2. 高端到端和低服务器。这表明客户端在处理请求时出现问题(没有足够的工作线程来处理响应,内存流处理速度慢等)。
于 2013-09-03T16:13:21.290 回答