Umbraco 和 AWS S3 存储桶之间的图像和缓存图像 (ImageProcessor) 性能超慢
Super slow performance between Umbraco and AWS S3 bucket for images and cached images (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 服务器(它们是在标准 AWS 负载均衡器后面)。
很难想象 2 x c4.xlarge 个实例无法应对即时处理图像。
我注意到有时会发生的一件事如下:
Log snippet
我刚刚放置了一对新的 AWS 访问密钥,看看它是否会有所作为,但遗憾的是,速度仍然很慢。即使是后台也需要很长时间才能在内容选项卡和媒体选项卡中加载图像预览。
明智的配置,我已经根据我在 Internet 上找到的内容(对于 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>
文件系统提供者配置:
<?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>
我该如何找出问题所在?
对于遇到类似问题的任何人,整个问题都在缓存配置文件中,并且由于图像的缓存在S3 而不是本地。
缓存设置为 currentCache="AmazonS3Cache" 这甚至不是官方的(由 JamesSouth 确认)。
一旦我将 currentCache="DiskCache" 放在生产机器上,一切都正常工作。
因此,在使用 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 服务器(它们是在标准 AWS 负载均衡器后面)。
很难想象 2 x c4.xlarge 个实例无法应对即时处理图像。
我注意到有时会发生的一件事如下: Log snippet
我刚刚放置了一对新的 AWS 访问密钥,看看它是否会有所作为,但遗憾的是,速度仍然很慢。即使是后台也需要很长时间才能在内容选项卡和媒体选项卡中加载图像预览。
明智的配置,我已经根据我在 Internet 上找到的内容(对于 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>
文件系统提供者配置:
<?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>
我该如何找出问题所在?
对于遇到类似问题的任何人,整个问题都在缓存配置文件中,并且由于图像的缓存在S3 而不是本地。
缓存设置为 currentCache="AmazonS3Cache" 这甚至不是官方的(由 JamesSouth 确认)。
一旦我将 currentCache="DiskCache" 放在生产机器上,一切都正常工作。