我的 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 毫秒的延迟。)