我们可以将Azure Blob存储用于ImageResizer的ImageCache吗

我们可以将Azure Blob存储用于ImageResizer的ImageCache吗,azure,imageresizer,azure-app-service-plans,imageresizer-diskcache,Azure,Imageresizer,Azure App Service Plans,Imageresizer Diskcache,我们基本上使用的是,源图像存储在Azure Blob存储中,imageresizer运行在Azure应用程序服务上,Azure CDN是CDN层 然而,我们在ImageResizer v3和DiskCache方面遇到了一个问题 我们在Azure应用程序服务上使用暂存槽来防止中断。我们还使用DiskCache插件。在没有任何配置的情况下,imagecache会写入特定于插槽的D:\home\site\wwwroot\imagecache\中 这产生了两个问题: 当我们交换插槽时,使用的imagec

我们基本上使用的是,源图像存储在Azure Blob存储中,imageresizer运行在Azure应用程序服务上,Azure CDN是CDN层

然而,我们在ImageResizer v3和DiskCache方面遇到了一个问题

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

这产生了两个问题:

  • 当我们交换插槽时,使用的imagecache已过时,许多图像将丢失
  • 在我们的应用服务计划中,我们总是有一个陈旧的imagecache占用磁盘空间,我们的Microsoft顾问建议使用Blob存储,而不是虚拟本地文件系统进行DiskCache
  • 我注意到没有BlobCachePlugin或S3CachePlugin,我想知道这是否有一个很好的理由

    我的问题是:

  • 是否有理由不使用实现ICache接口的自定义BlobStorageCachePlugin将imagecache存储在Azure Blob存储中
  • 如果有充分的理由,您建议采用什么替代体系结构来避免部署插槽的问题

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

    冷缓存问题的解决方案:

  • 通过复制对暂存槽的实际请求来预热暂存槽(理想情况下,因为它也会预热非IR缓存)
  • <> LI>如果不可能,那么您可以考虑在“仅添加文件”的每个服务器上的<代码> IVICECACHE>代码>文件夹之间的某种类型的复制。不要试图修改或删除活动服务的文件或目录
  • 使用低延迟分布式文件系统或低延迟共享网络驱动器。不过,请测量延迟,因为除非服务器之间有很好的网络连接,否则这将是一个问题。有一些blob存储可以足够快地用于缓存,但通常只有在您自己管理它们以确保低延迟时才能使用

  • 这意味着您将无法启用自动清理来自动清除缓存项;设置对磁盘使用情况的监视。

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


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

    根据Blob存储的延迟,实际上没有那么糟糕(大约40毫秒,有时峰值为400毫秒)。特别是因为我们的应用程序服务与BlobStorage位于同一数据中心/区域。你有没有亲身体验过这一点?我从来没有见过40毫秒的延迟,在好的一天可能是100毫秒。如果您有良好的延迟,您可以查看第三方nuget包。不过,对于缓存命中,即使是40毫秒也可以吗?我不确定这是否真的是Azure应用程序服务中托管应用程序的相关解决方案(这正是问题作者所关心的)。Azure应用程序服务的“磁盘”上有千兆字节的缓存图像,这并不是Azure团队所推荐的。Azure Web应用程序未针对存储进行优化。建议将所有静态内容存储在Azure存储中。延迟不应该像前面提到的那样高(当然,如果你的应用程序也在Azure中),而且以后静态内容也应该缓存在客户端。@LilithRiver你能详细谈谈你关于不启用自动清理的评论吗?如果启用此功能,会产生什么负面影响?我们有来自世界各地的用户,他们拥有超过300000张不同大小的可能图像。我们的CDN缓存命中率不够高,无法单独依赖。此外,调整图像大小非常慢(在几秒钟内),因此我们更愿意将调整大小的版本存储在本地缓存中。p、 我不知道您是否知道,但如果某个边缘服务器的缓存中存在某些内容,它仍然是从任何其他边缘服务器的源位置加载的。我们也尝试了CDN解决方案。不幸的是,CDN的问题在于授权方面还有很大的额外挑战(如果您的图像仅限于授权用户)。似乎可以在CDN上配置一些授权,但只能在高级层上配置,这不是一个简单的解决方案。。如果ImageResizer可以直接将图像缓存在Blob存储中,那么所有授权都可以在后端完成。也就是说,Blob存储不是公共的,只能通过带有密钥/机密等的连接字符串进行访问。基本上与ImageResizer访问“源”图像的方式相同。