0

只是想知道是否有推荐的策略将不同类型的资产/文件存储在单独的 S3 存储桶中,或者只是将它们全部放在一个存储桶中?我拥有的不同类型的资产包括:静态站点图像、用户的个人资料图像、用户生成的内容(如文档、文件和视频)。

4

1 回答 1

0

至于如何将文件分组到存储桶中。除非您希望针对内容的不同类型使用不同的域名或 CNAME,否则这实际上并不是那么关键,在这种情况下,您需要为每个要使用的域名使用单独的存储桶。

我倾向于按功能对它们进行分组。您可以完全控制您的应用程序中使用的静态文件可能会部署到与用户生成的内容不同的存储桶中。或者您可能希望将视频放在与图像不同的存储桶中,等等。

添加到我之前关于 S3 元数据的评论。这将成为优化从 S3/Cloudfront 提供内容的方式的关键部分。

基本上,S3 元数据由键值对组成。因此,如果文件是 .jpg,您可以将其Content-Type作为键值,image/jpeg例如。对于直接向 S3 URL 或通过 Cloudfront 发出的请求,这将自动发送与您的值相对应的适当 Content-Type 标头。Cache-Control 元标记也是如此。您还可以使用自己的自定义元标记。例如,我使用一个名为的自定义元标记x-amz-meta-md5来存储文件的 md5 哈希。它用于与存储在修订控制系统中的内容进行简单的桶比较,因此我们不必即时对桶中的每个文件进行校验和。我们使用它来将差异内容更新推送到存储桶(即仅推送已更改的内容)。

至于修订控制如何进行。我强烈建议使用版本化文件名。换句话说,假设您有 bigimage.jpg 并且想要进行更新,请将其命名为 bigimage1.jpg 并更改您的代码以反映这一点。为什么?因为最佳情况下,您希望在 Cache-Control 标头中设置较长的到期时间框架。不幸的是,如果您随后想要部署同名文件并且您正在使用 Cloudfront,则使边缘缓存位置无效会成为问题。而如果您有一个新文件名,Cloudfront 将开始填充边缘节点,您根本不必担心缓存无效。

类似地,对于用户制作的内容,您可能希望包含 md5 或其他一些(主要是)唯一标识符方案,以便每个视频/图像可以有自己唯一的文件名并在缓存中放置。

此处是关于在 Cloudfront 中设置流式传输的 AWs 文档的链接供您参考

http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/CreatingStreamingDistributions.html

于 2012-09-06T19:14:15.307 回答