【问题标题】:Can we use Azure Blob Storage for the ImageCache of ImageResizer我们可以为 ImageResizer 的 ImageCache 使用 Azure Blob 存储吗
【发布时间】:2017-01-11 03:58:50
【问题描述】:

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

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

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

这会产生两个问题:

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

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

我的问题是:

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

【问题讨论】:

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


    【解决方案1】:

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

    冷缓存问题的解决方案:

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

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

    【讨论】:

    • 根据azurespeed.com 的说法,BlobStorage 的延迟实际上并没有那么糟糕(大约 40 毫秒,有时峰值为 400 毫秒)。特别是因为我们的应用服务与 BlobStorage 位于同一数据中心/区域。您是否有与此相反的实践经验?
    • 我从来没有见过 40 毫秒的延迟,在美好的一天可能是 100 毫秒。如果您有良好的延迟,您可以为此查看第三方 nuget 包。但是,对于缓存命中,甚至 40 毫秒额外还可以吗?
    • 我不确定它是否真的是 Azure 应用服务中相关的解决方案托管应用程序(正是作者所关心的问题)。在 Azure 应用服务的“磁盘”上拥有千兆字节的缓存图像——这确实不是 Azure 团队所推荐的。 Azure webapps 未针对存储进行优化。建议将所有静态内容存储在 Azure 存储中。延迟不应该像提到的那么高(如果你的应用程序当然也在 Azure 中),而且稍后静态内容应该缓存在客户端。
    • @LilithRiver 您能否详细说明您关于不启用 autoClean 的评论?如果启用此功能会产生什么负面影响?
    【解决方案2】:

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

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

    【讨论】:

    • 好吧,我们拥有来自世界各地的用户,并结合了超过 300.000 张不同尺寸的可能图像。我们的 CDN 缓存命中率还不够高,无法单独依赖。此外,调整图像大小非常慢(以秒为单位),因此我们宁愿将调整大小的版本也存储在本地缓存中。 p.s.我不知道您是否知道,但如果某些边缘服务器的缓存中存在某些内容,它仍然是从任何其他边缘服务器的源加载的。
    • 我们也尝试了 CDN 解决方案。不幸的是,CDN 的问题在于授权存在很大的额外挑战(如果您的图像仅限于授权用户)。似乎可以在 CDN 上配置一些授权,但只能在高级层上,它依赖于不平凡的解决方案。如果 ImageResizer 可以直接在 Blob 存储中缓存图像 - 所有授权都可以在后端完成。 IE。 Blob 存储不是公共的,只能通过带有密钥/秘密/等的连接字符串访问。基本上与 ImageResizer 访问“源”图像的方式相同。
    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2021-07-14
    • 1970-01-01
    • 2013-01-05
    • 2018-08-23
    相关资源
    最近更新 更多