为什么不经常访问的Azure blob存储缓慢?

Oli*_*ock 6 performance azure azure-storage-blobs

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

现在我承认我没有设置一个适当的测试来展示上述所有内容 - 我只是通过我的日志文件,因此我访问blob的方式可能会有一些细微差别.如果情况确实如此,请道歉.

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

  • 经常访问快速容器(每天数万个请求),慢速容器很少(每天可能有200个请求).
  • 快速容器通常存储随后很快获取的项目.慢速容器通常会加载几天前可能存储的东西.

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

(我不知道如何实现Azure blob存储,但基于上面我猜测数据会被保存到存储阵列中并通过动态扩展的VM集合进行访问,每个VM都在内存中实现因此,当Azure发现需要启动虚拟机时,会出现~14s的延迟.当虚拟机可用时会发生~2s延迟,但它需要搜索物理磁盘上的数据(似乎相当慢),当项目存储在内存缓存中或类似的东西时,会发生10ms延迟.)

kwi*_*ill 8

Windows Azure存储的架构不是您所描述的(缓存虚拟机数量不断增加),因此缓存的某些数据和Azure存储服务器端未缓存的其他数据不会受到影响.有关概述,请参阅Windows Azure存储体系结构概述,或SOSP Paper - Windows Azure存储:具有强一致性的高可用性云存储服务,以获得更深入的外观.

要确定blob请求速度较慢的原因,首先要确定缓慢的性能是服务器端还是客户端.幸运的是,Azure Storage通过Storage Analytics(Windows Azure存储日志记录:使用日志跟踪存储请求)使这一过程变得简单- 只需比较端到端延迟和服务器延迟.我怀疑你会看到两件事之一:

  1. 低E2E和低服务器.这表示请求从客户端发送延迟(即没有足够的工作线程),或者您的日志记录提供的数据不正确.
  2. 高E2E和低服务器.这将指示客户端处理请求时的问题(没有足够的工作线程来处理响应,缓慢处理内存流等).

  • 如果存储分析显示E2E时间较短,但您的代码显示调用DownloadToStream的延迟,那么在尝试通过网络发送请求时,延迟必须在客户端.通常我会在流程中没有足够的工作线程时看到这一点.另一个常见原因是没有为ServicePointManager.DefaultConnectionLimit设置足够高的值.试试这个:1.将ServicePointManager.DefaultConnectionLimit设置为12或更高.2.将minworker线程设置为12或更高. (2认同)