如何解决来自 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 桶的请求数量很高。例如,您可以每秒为 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 支持每秒向单个前缀发送 3500 个 Put 请求的请求速率。在某些情况下,对同一个键的快速并发 Put 请求可能会导致 503 响应。在这种情况下,最佳做法是重试失败的请求。

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

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

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

将对象分配到多个前缀

请求速率按照 Amazon S3 桶中的每个前缀计算。要将您的桶设置为处理更高的总体请求速率,并避免 503 运行缓慢错误,请将对象分配到多个前缀。例如,如果您使用 Amazon S3 桶存储图像和视频,请将文件分配到两个前缀:

  • mybucket/images
  • mybucket/videos

如果前缀的请求速率逐渐增加,则 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 S3 故障排除

使用 Amazon CloudWatch 监控指标

AWS 官方
AWS 官方已更新 10 个月前