我的Azure云服务使用.Net存储库(1.7)读取和写入blob。 blob与服务位于同一数据中心。在我的第一个容器中,操作很快(10ms的顺序)。在我的第二个容器中,它们非常慢(通常大约2s或14s,介于两者之间)。两者都使用CloudBlob.DownloadToStream()将数据传输到MemoryStream中。文件大小通常小于100kB。
现在我承认我没有设置适当的测试来展示上述所有内容 - 我只是按照我的日志文件,因此我访问blob的方式可能会有一些细微差别。如果情况确实如此,请道歉。
无论如何,这两个容器之间唯一的相关区别似乎是:
问题:哪些因素会影响不经常访问的blob的blob性能?我该怎么做才能让它更快?
(我不知道如何实现Azure blob存储,但基于上面我猜测数据会被保存到存储阵列中并通过动态扩展的VM集合进行访问,每个VM都实现内存缓存blob。因此,当Azure发现它需要启动虚拟机时会出现~14s延迟。当虚拟机可用时会发生~2s延迟,但它需要搜索物理磁盘上的数据(似乎是当项目存储在内存缓存中或类似的东西时,会发生10ms延迟。)
答案 0 :(得分:6)
Windows Azure存储的架构不是您所描述的(具有不断增加的缓存VM数量),因此不会影响某些缓存的数据以及其他数据未在Azure存储服务器端缓存。有关详细信息,请参阅Windows Azure Storage Architecture Overview;有关详细信息,请参阅SOSP Paper - Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency。
要确定blob请求速度较慢的原因,首先要确定缓慢的性能是服务器端还是客户端。幸运的是,Azure Storage通过Storage Analytics(Windows Azure Storage Logging: Using Logs to Track Storage Requests)简化了这一过程 - 只需比较端到端延迟和服务器延迟。我怀疑你会看到两件事之一: