【问题标题】:Super slow performance between Umbraco and AWS S3 bucket for images and cached images (ImageProcessor)图像和缓存图像 (ImageProcessor) 的 Umbraco 和 AWS S3 存储桶之间的性能超慢
【发布时间】:2017-05-23 00:27:32
【问题描述】:

因此,当涉及到图像加载、调整大小以及使用 Umbraco 中的 ImageProcessor 进行大量操作时,我的网站性能一直很慢。

目前使用:

  • Umbraco 7.4.3
  • AWSSDK.Core 3.3.11
  • AWSSDK.S3 3.3.5.11
  • 图像处理器 2.5.3
  • ImageProcessor.Web 4.8.3
  • Umbraco.Storage.S3 1.0.23(不再维护?)

CloudFront 也不缓存图像(自定义来源没有根据我的理解缓存?),因此为了避免站点崩溃,我在 CloudFront 和 Umbraco 服务器之间有一个 NGINX 服务器(位于标准 AWS 负载均衡器)。

很难想象 2 x c4.xlarge 实例无法立即处理图像。

我注意到有时会发生的一件事是: Log snippet

我只是放了一对新的 AWS 访问密钥,看看它是否会有所作为,但遗憾的是,仍然很慢。即使是后台也需要很长时间才能在内容选项卡和媒体选项卡中加载图像的预览。

配置方面,我已经根据我在互联网上找到的内容(针对 FileSystemProviders 和 ImageProcessor 配置)进行了三次检查。

图像处理器缓存配置:

    <?xml version="1.0" encoding="utf-8" ?>
<!-- For more information on using transformations 
     see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
<caching xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" currentCache="AmazonS3Cache" xdt:Transform="Replace">
  <caches>
    <cache name="AmazonS3Cache" type="formula_e.web.cms.Core.ImageProcessor.AmazonS3Cache, formula-e.web.cms" maxDays="365" xdt:Locator="Match(name)" xdt:Transform="Replace">
      <settings>
        <setting key="AwsAccessKey" value="XXXXXXX" />
        <setting key="AwsSecretKey" value="XXXXXXX" />
        <setting key="AwsBucketName" value="XXXXXXX" />
        <setting key="AwsEndpoint" value="http://XXXXXXX.s3.amazonaws.com/" />
        <setting key="AwsBucketFolder" value="cache-live" />
        <setting key="CachedCDNRoot" value="http://XXXXXXX.cloudfront.net" />
        <setting key="StreamCachedImage" value="true" />
      </settings>
    </cache>
  </caches>
</caching>

图像处理器安全配置:

    <?xml version="1.0" encoding="utf-8" ?>
<!-- For more information on using transformations 
     see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
<security xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <services xdt:Transform="Replace">
    <service prefix="media/" name="CloudImageService" type="ImageProcessor.Web.Services.CloudImageService, ImageProcessor.Web">
      <settings>
        <setting key="MaxBytes" value="41943040"/>
        <setting key="Timeout" value="30000"/>
        <setting key="Host" value="http://XXXXXXX.s3.amazonaws.com/media/"/>
      </settings>
    </service>
  </services>
</security>

Filesytempproviders 配置:

    <?xml version="1.0" encoding="utf-8" ?>
<!-- For more information on using transformations 
     see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
<FileSystemProviders xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <Provider alias="media" type="Umbraco.Storage.S3.BucketFileSystem, Umbraco.Storage.S3" xdt:Locator="Match(alias)" xdt:Transform="Replace">
    <Parameters>
      <!-- S3 Bucket Name -->
      <add key="bucketName" value="XXXXXXX" />
      <!-- S3 Bucket Hostname - Used for storage in umbraco's database (Should be blank when using Virtual File Provider) -->
      <add key="bucketHostName" value="" />
      <!-- S3 Object Key Prefix - What should we prefix keys with? -->
      <add key="bucketKeyPrefix" value="media" />
      <!-- AWS Region Endpoint (us-east-1/us-west-1/ap-southeast-2) Important to get right otherwise all API requests will return a 30x response -->
      <add key="region" value="eu-west-1" />
    </Parameters>
  </Provider>
</FileSystemProviders>

我该如何找出问题所在?

【问题讨论】:

  • 您是否查看了有关如何将 umbraco 发布到 CDN 的文档?
  • @mootmoot 介意分享链接吗?我继承了这个项目,所以我一直在尽可能地弄清楚大部分设置。谢谢
  • 请谷歌umbraco cache AWS CDN。 CDN 缓存设置并不那么简单。
  • 如果您使用 DiskCache 并将 VirtualCachePath 设置在 Web 根目录之外,它应该是好的。您不希望运行大量 FileSystemWatcher。 imageprocessor.org/imageprocessor-web/configuration/…
  • @JamesSouth 现在很完美。单个图像加载的平均时间从平均 20 秒下降到平均 100 毫秒(如果您要求不同的大小)。感谢您确认这是问题所在!

标签: amazon-web-services amazon-s3 umbraco aws-sdk imageprocessor


【解决方案1】:

对于任何有类似问题的人,整个问题都在缓存配置文件中,当同时请求多个图像时,整个系统的执行速度非常慢,因为图像的缓存在 S3 中而不是比本地的。

缓存设置为 currentCache="AmazonS3Cache" 这甚至不是官方的(由 JamesSouth 确认)。

一旦我将 currentCache="DiskCache" 放在生产机器上,一切都正常运行。

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 2018-07-13
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多