用于图像和缓存图像的Umbraco和AWS S3存储桶之间的超级性能(ImageProcessor)

时间:2017-04-18 09:51:33

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

因此,在使用Umbraco中的ImageProcessor进行图像加载,调整大小和批量时,我的性能网站速度非常慢。

目前正在使用:

  • Umbraco 7.4.3
  • AWSSDK.Core 3.3.11
  • AWSSDK.S3 3.3.5.11
  • ImageProcessor 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配置)。

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>

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. -->
<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>

Filesytemproviders config:

    <?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>

如何找出问题所在?

1 个答案:

答案 0 :(得分:2)

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

缓存设置为currentCache =&#34; AmazonS3Cache&#34;这甚至不是官方的(由JamesSouth证实)。

一旦我把currentCache =&#34; DiskCache&#34;在生产机器上,一切都按预期工作。