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

时间:2016-12-12 17:47:12

标签: azure imageresizer azure-app-service-plans imageresizer-diskcache

我们基本上使用存储在Azure Blob存储中的源图像的recommended cloud architecture,imageresizer在Azure App Service上运行,Azure CDN是CDN层。

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

我们在Azure App Service上使用临时插槽来防止中断。我们还使用DiskCache插件。没有任何配置,imagecache将写入D:\ home \ site \ wwwroot \ imagecache \,这是特定于插槽的。

这会产生两个问题:

  1. 当我们交换插槽时,使用的图像缓存是陈旧的,很多图像都会丢失。
  2. 我们的App Service Plan上总是有一个陈旧的图像缓存占用磁盘空间,我们的顾问建议使用Blob Storage而不是DiskCache的虚拟本地文件系统。
  3. 我注意到没有BlobCachePlugin或S3CachePlugin,我想知道是否有充分的理由。

    我的问题是:

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

2 个答案:

答案 0 :(得分:2)

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

冷缓存问题的解决方案:

  1. 通过复制对它的实际请求来预热暂存插槽(理想情况,因为它也会预热非IR缓存)。
  2. 如果无法做到这一点,那么您可能会考虑在每台服务器上的imagecache个文件夹之间进行某种计划复制,而这些文件夹只会添加'文件。不要尝试修改或删除主动服务的文件或目录。
  3. 使用低延迟分布式文件系统或低延迟共享网络驱动器。但是,请测量延迟,因为除非您在服务器之间建立了非常好的网络连接,否则它会成为一个问题。有一些blob存储可以足够快地用于缓存,但通常只有当你自己管理它们以确保低延迟时。
  4. 这意味着您无法启用autoClean来自动清除缓存条目;设置磁盘使用情况监控。

答案 1 :(得分:0)

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

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