我们可以使用 Azure Blob Storage 作为 ImageResizer 的 ImageCache

Can we use Azure Blob Storage for the ImageCache of ImageResizer

我们基本上使用 recommended cloud architecture,其中源图像存储在 Azure Blob 存储中,imageresizer 在 Azure 应用服务上运行,Azure CDN 是 CDN 层。

尽管如此,我们 运行 遇到了 ImageResizer v3、Azure App Service deployment slots 和 DiskCache 的问题。

我们在 Azure 应用服务上使用暂存槽来防止中断。我们还使用 DiskCache 插件。在没有任何配置的情况下,图像缓存被写入 D:\home\site\wwwroot\imagecache\ 这是特定于插槽的。

这会产生两个问题:

  1. 当我们交换插槽时,使用的图像缓存已经过时,很多图像将会丢失。
  2. 在我们的应用程序服务计划中,我们总是有一个陈旧的图像缓存占用磁盘空间,我们在 Microsoft 的顾问建议使用 Blob 存储而不是 DiskCache 的虚拟本地文件系统。

我注意到没有 BlobCachePlugin 或 S3CachePlugin,我想知道是否有充分的理由。

我的问题是:

  1. 是否有理由不使用实现 ICache 接口的自定义 BlobStorageCachePlugin 将图像缓存存储在 Azure Blob 存储中?
  2. 如果有充分的理由,您建议使用哪种替代架构来避免部署槽的问题?

缓存需要低延迟。将缓存放在 Blob 存储上会使缓存命中执行得非常糟糕,每个请求可能会增加 800-1800 毫秒。如果有可用的 Redis 服务器,有一些方法可以使它更好地工作,但它的性能仍然不如使用低延迟存储。

冷缓存问题的解决方案:

  1. 通过复制真实世界的请求来预热暂存槽(理想情况,因为它也会预热非 IR 缓存)。
  2. 如果那不可能,那么您可以考虑在每台服务器上 'only adds' 文件的 imagecache 文件夹之间进行某种预定的复制。不要尝试修改或删除主动提供的文件或目录。
  3. 使用低延迟分布式文件系统或低延迟共享网络驱动器。但是,请测量延迟,因为除非服务器之间的网络连接非常好,否则这将是一个问题。有些 blob 存储速度足够快,可以用于缓存,但通常只有在您自己管理它们以确保低延迟时才会使用。

这意味着您将无法启用自动清除来自动清除缓存条目;设置磁盘使用监控。

如果您的 Web 应用程序前面有一个 CDN,那么您是否需要 DiskCache 插件(或请求的 Blob 存储缓存)?

一旦 Web 应用程序处理了图像,它就会被其中一个 CDN 边缘服务器缓存,那么将它缓存在 Web App/Blob 存储服务中的目的是什么?