如何解决来自 Amazon S3 的 HTTP 500 或 503 错误?

2 分钟阅读
0

当我向 Amazon Simple Storage Service(Amazon S3)发出请求时,Amazon S3 会返回 5xx 状态错误。

简短描述

Amazon S3 返回一个 5xx 状态错误,类似于以下示例:

  • “AmazonS3Exception: 内部错误(服务: Amazon S3;状态代码: 500;错误代码: 500 内部错误;请求 ID: A4DBBEXAMPLE2C4D)”
  • “AmazonS3Exception: 运行缓慢(服务: Amazon S3;状态代码: 503;错误代码: 503 运行缓慢;请求 ID: A4DBBEXAMPLE2C4D)”

错误代码 500 内部错误表明 Amazon S3 当时无法处理请求。错误代码 503 运行缓慢通常表示对 S3 存储桶的请求数量很高。例如,可以每秒为每个分区的 Amazon S3 前缀发送 3,500 个 PUT/COPY/POST/DELETE 或 5,500 个 GET/HEAD 请求。但是,如果请求超过了可用于跨区域复制的带宽量,则 Amazon S3 可能会返回 503 运行缓慢响应。

要解决或避免 5xx 状态错误,请完成下面的任务:

  • 对于发出请求的应用程序,请使用重试机制。
  • 配置应用程序以逐渐提高请求速率。
  • 将对象分配给多个前缀。
  • 监控 5xx 错误响应的数量。

**注意:**创建前缀后,Amazon S3 不会自动为支持的请求速率分配额外资源。Amazon S3 会根据请求模式进行扩展。随着请求速率增加,Amazon S3 会针对新的请求速率动态优化。

解决方法

使用重试机制

由于 Amazon S3 的分布式特性,您可以重试返回 500 或 503 错误的请求。最佳做法是在向 Amazon S3 发出请求的应用程序中构建重试逻辑。

所有 AWS SDK 都有内置重试机制,其算法使用指数回退功能。此算法会在连续错误响应的两次重试之间实施越来越长的等待时间。许多指数回退算法使用抖动(随机延迟)来防止连续冲突。有关详细信息,请参阅重试行为

**注意:**Amazon S3 对于每个分区的 Amazon S3 前缀支持每秒高达 3500 个 Put 请求的请求速率。在某些情况下,对同一个键的快速并发 Put 请求可能会导致 503 响应。在这种情况下,最佳做法是重试失败的请求。

配置您的应用程序以逐渐提高请求速率

如果您以接近速率限制的高请求速率发出请求,则 Amazon S3 可能会返回 503“运行缓慢”错误。如果前缀中对象的请求速率突然增加,则您会收到 503“运行缓慢”错误。配置应用程序以保持请求速率,并使用指数回退实施重试。此配置使得 Amazon S3 有时间监控请求模式,并在后端横向缩减以应对请求速率。

将应用程序配置为从较低的请求速率(每秒事务数)开始,以避免 503“运行缓慢”错误。然后,成倍地增加应用程序的请求速率。Amazon S3 会自动扩展以处理更高请求速率。

将对象分配给多个前缀

请求速率适用于 Amazon S3 存储桶中的每个前缀。要将存储桶设置为处理更高的总体请求速率,并避免 503 Slow Down 错误,请将对象分配给多个前缀。例如,如果使用 Amazon S3 存储桶来存储图像和视频,请将文件分配到两个前缀:

  • mybucket/images
  • mybucket/videos

如果前缀的请求速率逐渐增加,则 Amazon S3 会纵向扩展以分别处理两个前缀的请求。Amazon S3 会纵向扩展来针对每个分区的 Amazon S3 前缀每秒处理 3,500 个 PUT/POST/DELETE 或 5,500 个 GET 请求。因此,存储桶处理的总体请求速率翻了一番。

监控 5xx 状态错误响应的数量

要监控收到的 5xx 状态错误响应的数量,请使用以下选项之一:

5xx 错误的其他原因

当使用加急恢复层检索存档对象时,您可能会收到类似于以下示例的错误:

  • “GlacierExpeditedRetrievalNotAvailable”
  • “Glacier 加急检索目前不可用,请稍后再试”

如果容量不足以处理加急请求,就会出现这些错误。在需求持续高涨的时期,Amazon S3 可能会拒绝加急检索请求并返回 503 错误。使用预置容量单元(PCU)确保加急检索的检索容量可按需提供。每个单元允许每 5 分钟执行至少三次加急检索。每个单元提供高达每秒 150 兆字节(MBps)的检索吞吐量。也可以使用“标准”或“批量”检索选项。

可以重试检索,尽管重试并不能保证成功。除非在极端需求的情况下,否则可以在没有预置容量的情况下进行加急检索。由于不断变化以及对非预置容量加急检索可用性的需求很高,AWS Support 无法提供有保障的 SLA。

如果继续收到大量 5xx 状态错误,请联系 AWS Support。对于以 5xx 状态错误代码失败的请求,包括多个 Amazon S3 请求 ID 对

相关信息

故障排除

使用 Amazon CloudWatch 监控指标

AWS 官方
AWS 官方已更新 1 年前