2

我们基本上使用推荐的云架构,其中源图像存储在 Azure Blob Storage 中,imageresizer 在 Azure App Service 上运行,Azure CDN 是 CDN 层。

尽管如此,我们还是遇到了 ImageResizer v3、Azure App Service 部署槽和 DiskCache 的问题。

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

这会产生两个问题:

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

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

我的问题是:

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

2 回答 2

1

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

冷缓存问题的解决方案:

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

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

于 2016-12-12T21:32:25.657 回答
0

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

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

于 2017-01-10T19:58:50.217 回答