14

我正在使用 AWS 运行一些数据处理。我在 EC2 中有 400 个 Spot 实例,每个实例有 4 个进程,所有这些实例都写入 S3 中的单个存储桶。我已经开始收到一个(显然不常见的)错误说:

503:减速

有谁知道 S3 存储桶的实际请求限制是多少?我找不到任何关于它的 AWS 文档。

谢谢!

4

3 回答 3

11

由于临时错误,AWS 记录了 503。它不反映具体限制。

根据关于处理错误的“使用 Amazon S3 的最佳实践”部分 ( http://aws.amazon.com/articles/1904/ ):

500 系列错误表示请求未成功,但可能会重试。虽然不常见,但这些错误是与服务正常交互的一部分,应该使用指数退避算法(理想情况下利用抖动的算法)明确处理。一种这样的算法可以在http://en.wikipedia.org/wiki/Truncated_binary_exponential_backoff找到。

特别是如果您突然开始每秒执行数百个 PUT 到单个存储桶中,您可能会发现某些请求在服务重新分配负载时返回 503“Slow Down”错误。与所有 500 系列错误一样,应该使用指数退避来处理这些错误。

虽然不太详细,但 S3 错误响应文档确实包括 503 Slow Down ( http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html )。

于 2013-06-26T02:36:57.417 回答
10

根据我的阅读,减速是一个非常罕见的错误。但是,在发布此问题后,我收到了来自 AWS 的一封电子邮件,其中说我的 LIST 请求限制为每秒 10 个请求,因为我有太多的请求进入特定的存储桶。

我一直在为我正在处理的项目使用自定义排队脚本,该脚本依靠 LIST 请求来确定下一个要处理的项目。遇到这个问题后,我切换到 AWS SQS,它的实现比我想象的要简单得多。不再有自定义队列,不再有大量的 LIST 请求。

感谢您的回答!

于 2013-06-29T00:21:28.963 回答
5

补充一下 James 所说的,有一些关于 S3 分区的内部机制已经被讨论过,并且可以用于在未来缓解这种情况,因为需要指数退避。

见这里:http ://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-hiring-event.html

简而言之,不要以相同的前缀存储所有内容,否则出现这些错误的可能性更高。找到一些方法使前缀中的第一个字符尽可能随机,以避免 S3 内部分区中的热点。

于 2013-06-26T04:13:33.293 回答