AWS S3 - SlowDown:请降低您的请求率
AWS S3 - SlowDown: Please reduce your request rate
SO上类似的问答已经够多了。但是很少提到前缀。
首先,不再需要前缀随机化,参见 here
This S3 request rate performance increase removes any previous
guidance to randomize object prefixes to achieve faster performance.
That means you can now use logical or sequential naming patterns in S3
object naming without any performance implications.
现在回到我的问题。我仍然得到 "SlowDown" 但我不明白为什么。
我所有的对象分布如下:
/foo/bar/baz/node_1/folder1/file1.bin
/foo/bar/baz/node_1/folder1/file2.bin
/foo/bar/baz/node_1/folder2/file1.bin
/foo/bar/baz/node_2/folder1/file1.bin
/foo/bar/baz/node_2/folder1/file2.bin
每个节点都有自己的前缀,然后是 "folder" 名称,然后是 "file" 名称。每个"folder"中大约有40个"files"。假设我有 ~20 个节点,每个节点下大约有 200 "folders",每个文件夹下有 40 "files"。在这种情况下,前缀由公共部分“/foo/bar/baz”、节点和文件夹组成,所以即使我并行上传所有 40 个文件,单个前缀的压力也是 40,对吗?即使我从所有节点向每个 "folder" 上传 40 个文件,每个前缀的压力仍然是 40 个。那是对的吗?如果是,我怎么得到"SlowDown"?如果没有我应该怎么照顾它?自定义 RetryStrategy
?为什么DefaultRetryStrategy
采用指数退避算法不能解决这个问题?
编辑001:
前缀的含义解释
好的,在 S3 工程团队的协助下与 AWS 支持团队一起工作了一个月后,简短的回答是,以旧方式随机化前缀。
长答案,他们确实提高了 S3 的性能,如原始问题中 link 所述,但是,您总是可以让 S3 屈服。关键是它们在内部对存储在桶中的所有对象进行分区,分区对桶前缀进行工作,并按照前缀的字典顺序组织它,所以,无论如何,当你把很多文件放在不同的“文件夹”中时,它仍然对 prefix 的外部施加压力,然后它尝试对外部进行分区,这就是您将获得“SlowDown”的时刻。好吧,您可以通过重试以指数方式回退,但在我的情况下,5 分钟的回退并没有成功,最后的办法是在前缀前添加一些随机令牌,理想情况下均匀分布。而已。
在不太激进的情况下,S3 工程团队可以检查您的使用情况并手动对您的存储桶进行分区(在存储桶级别完成)。在我们的案例中没有用。
不,没有钱可以为每个前缀购买更多请求,因为,我想没有实体可以支付亚马逊重写 S3 后端。
2020 年更新:好吧,在对 S3 前缀实施随机化之后,我只能说一件事,如果你努力尝试,没有随机化会有所帮助。我们仍然收到 SlowDown
,但不像以前那么频繁了。除了重新安排失败的操作以便稍后执行之外,没有其他方法可以解决此问题。
2020 年的另一项更新:呵呵,您对存储桶执行的 LIST 请求数量阻止我们正确地对存储桶进行分区。哈哈
SO上类似的问答已经够多了。但是很少提到前缀。 首先,不再需要前缀随机化,参见 here
This S3 request rate performance increase removes any previous guidance to randomize object prefixes to achieve faster performance. That means you can now use logical or sequential naming patterns in S3 object naming without any performance implications.
现在回到我的问题。我仍然得到 "SlowDown" 但我不明白为什么。
我所有的对象分布如下:
/foo/bar/baz/node_1/folder1/file1.bin
/foo/bar/baz/node_1/folder1/file2.bin
/foo/bar/baz/node_1/folder2/file1.bin
/foo/bar/baz/node_2/folder1/file1.bin
/foo/bar/baz/node_2/folder1/file2.bin
每个节点都有自己的前缀,然后是 "folder" 名称,然后是 "file" 名称。每个"folder"中大约有40个"files"。假设我有 ~20 个节点,每个节点下大约有 200 "folders",每个文件夹下有 40 "files"。在这种情况下,前缀由公共部分“/foo/bar/baz”、节点和文件夹组成,所以即使我并行上传所有 40 个文件,单个前缀的压力也是 40,对吗?即使我从所有节点向每个 "folder" 上传 40 个文件,每个前缀的压力仍然是 40 个。那是对的吗?如果是,我怎么得到"SlowDown"?如果没有我应该怎么照顾它?自定义 RetryStrategy
?为什么DefaultRetryStrategy
采用指数退避算法不能解决这个问题?
编辑001:
好的,在 S3 工程团队的协助下与 AWS 支持团队一起工作了一个月后,简短的回答是,以旧方式随机化前缀。 长答案,他们确实提高了 S3 的性能,如原始问题中 link 所述,但是,您总是可以让 S3 屈服。关键是它们在内部对存储在桶中的所有对象进行分区,分区对桶前缀进行工作,并按照前缀的字典顺序组织它,所以,无论如何,当你把很多文件放在不同的“文件夹”中时,它仍然对 prefix 的外部施加压力,然后它尝试对外部进行分区,这就是您将获得“SlowDown”的时刻。好吧,您可以通过重试以指数方式回退,但在我的情况下,5 分钟的回退并没有成功,最后的办法是在前缀前添加一些随机令牌,理想情况下均匀分布。而已。 在不太激进的情况下,S3 工程团队可以检查您的使用情况并手动对您的存储桶进行分区(在存储桶级别完成)。在我们的案例中没有用。
不,没有钱可以为每个前缀购买更多请求,因为,我想没有实体可以支付亚马逊重写 S3 后端。
2020 年更新:好吧,在对 S3 前缀实施随机化之后,我只能说一件事,如果你努力尝试,没有随机化会有所帮助。我们仍然收到 SlowDown
,但不像以前那么频繁了。除了重新安排失败的操作以便稍后执行之外,没有其他方法可以解决此问题。
2020 年的另一项更新:呵呵,您对存储桶执行的 LIST 请求数量阻止我们正确地对存储桶进行分区。哈哈