有足够的类似的问题和答案。然而,关于前缀的讨论却很少。首先,不再需要前缀的随机化,请参阅这里。
此S3请求速率性能提高删除了以前对对象前缀进行随机化以获得更快性能的任何指导。这意味着您现在可以在S3对象命名中使用逻辑或顺序命名模式,而无需任何性能影响。
现在回到我的问题上。我仍然理解"SlowDown“,但我不明白为什么。
我的所有对象分布如下:
/foo/bar/baz/node_1/folder1 1/file1.bin /foo/bar/baz/node_1/folder1 1/file2.bin /foo/bar/baz/node_1/folder2 2/file1.bin /foo/bar/baz/node_2/folder1 1/file1.bin /foo/bar/baz/node_2/folder1 1/file2.bin
每个节点都有自己的前缀,然后是“文件夹”名称,然后是“文件”名称。在每个“文件夹”中大约有40个“文件”。假设我有20个节点,每个节点下大约有200个“文件夹”,每个文件夹下有40个“文件”。在这种情况下,前缀由公共部分"/foo/bar/baz“、节点和文件夹组成,所以即使我并行上传所有40个文件,对单个前缀的压力也是40,对吗?即使我上传了40个文件到每个“文件夹”从所有的节点,压力仍然40每个前缀。对吗?如果是,我怎么会得到"SlowDown"?如果没有,我该怎么处理呢?定制RetryStrategy?为什么采用指数退避的DefaultRetryStrategy不能解决这个问题?
EDIT001:这里解释前缀是什么意思
发布于 2019-12-25 14:16:34
好的,在S3工程团队的帮助下,在AWS支持团队工作了一个月后,简单的回答是,随机化是旧时尚方式的前缀。长话短说,它们确实提高了S3的性能,正如原始问题中的链接所指出的那样,但是,您总是可以让S3屈服。关键是,在内部,他们将所有在桶中被审查的对象进行分区,分区工作在桶前缀上,它按照前缀的字典顺序组织它,因此,不管如何,当您将大量文件放在不同的“文件夹”中时,它仍然会对前缀的外部部分施加压力,然后尝试对外部部分进行分区,这就是您获得"SlowDown“的时刻。嗯,你可以通过重试成倍地后退,但在我的例子中,5分钟的退避并没有成功,那么最后的办法是在前缀前面加上一些随机标记,这是理想的均匀分布。就是这样。在不太激进的情况下,S3工程团队可以检查您的使用情况,并手动划分桶(在桶级完成)。在我们的案子里不起作用。
不,没有钱可以为每个前缀购买更多的请求,因为我想没有实体可以支付亚马逊重写S3后端的费用。
2020年更新:在实现了S3前缀的随机化之后,我只想说一件事,如果你努力的话,没有随机化会有帮助。我们仍然得到SlowDown,但没有以前那么频繁。除了重新安排失败的操作以供以后执行外,没有其他解决此问题的方法。
还有一个2020年的更新:呵呵,您正在对存储桶执行的列表请求数量妨碍了我们正确地划分存储桶。LOL
https://stackoverflow.com/questions/58433594
复制相似问题