当 Amazon Simple Storage Service (Amazon S3) 工作负载非常高(超过请求速率和性能指南中所述的请求速率)时,Amazon S3 性能不会随着工作负载而提高。发生这种情况时,我偶尔会收到 HTTP 500 或 503 错误。如何优化 Amazon S3 存储桶的性能以处理大量请求?

重要提示:此信息仅适用于超过请求速率和性能指南中所述的请求速率的工作负载。较小工作负载无需以下解决方案。​

Amazon S3 在每个 AWS 区域维护对象键名称的索引。对象键以 UTF-8 二进制顺序保存在索引的多个分区中。键名称确定用于存储键的分区。使用连续前缀(如时间戳或字母序列)可增大 Amazon S3 以存储大量键的特定分区为目标的可能性,从而有可能耗尽该分区的 I/O 容量。

如果您的工作负载是请求类型的组合,请通过添加哈希字符串作为键名称的前缀,为键名称引入一些随机性。通过向您的键名称引入随机性,I/O 负载将分布在多个索引分区中。例如,您可以计算计划分配为键的字符序列的 MD5 哈希,并将哈希中的 3 或 4 个字符添加为键名称的前缀。以下示例显示添加了 4 个字符的十六进制哈希作为前缀的键名称:

exampleawsbucket/232a-2019-14-03-15-00-00/cust1234234/photo1.jpg
exampleawsbucket/7b54-2019-14-03-15-00-00/cust3857422/photo2.jpg
exampleawsbucket/921c-2019-14-03-15-00-00/cust1248473/photo2.jpg
exampleawsbucket/ba65-2019-14-03-15-00-00/cust8474937/photo2.jpg
exampleawsbucket/8761-2019-14-03-15-00-00/cust1248473/photo3.jpg
exampleawsbucket/2e4f-2019-14-03-15-00-01/cust1248473/photo4.jpg
exampleawsbucket/9810-2019-14-03-15-00-01/cust1248473/photo5.jpg
exampleawsbucket/7e34-2019-14-03-15-00-01/cust1248473/photo6.jpg
exampleawsbucket/c34a-2019-14-03-15-00-01/cust1248473/photo7.jpg
...

如果没有 4 个字符的哈希前缀,Amazon S3 可能将所有这些负载分配到 1 或 2 个索引分区,因为每个对象的名称都以 exampleawsbucket/2019-14-03-15-00-0 开头,并且索引中的所有对象都以字母数字顺序存储。4 字符哈希前缀可确保负载分布在多个索引分区上。

如果您的工作负载主要发送 GET 请求,您可以为键名称添加随机性。您还可以将 Amazon CloudFront 与 Amazon S3 集成,以便以低延迟和高数据传输速率向用户分发内容。


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助?访问 AWS 支持中心

发布时间:2017 年 9 月 25 日

更新时间:2018 年 7 月 19 日