当前位置: 首页 > 知识库问答 >
问题:

AWS S3-SlowDown:请降低您的请求率

杜元明
2023-03-14

类似的问题和答案已经足够多了。然而,很少有人提到前缀。首先,不再需要前缀随机化,请参见此处

此S3请求率性能提升消除了之前随机化对象前缀以实现更快性能的任何指导。这意味着您现在可以在S3对象命名中使用逻辑或顺序命名模式,而不会对性能产生任何影响。

现在回到我的问题上来。我仍然感到“减速”,我不明白为什么
我的所有对象分布如下:

/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

每个节点都有自己的前缀,然后是“文件夹”名称,然后是“文件”名称。每个“文件夹”中大约有40个“文件”。假设我有大约20个节点,每个节点下大约有200个“文件夹”,每个文件夹下大约有40个“文件”。在这种情况下,前缀由公共部分“/foo/bar/baz”、节点和文件夹组成,所以即使我并行上传所有40个文件,单个前缀的压力也是40,对吗?即使我从所有节点向每个“文件夹”上传40个文件,每个前缀的压力仍然是40。对吗?如果是,我怎么会得到“SlowDown”?如果没有,我应该如何处理它?自定义RetryStrategy?为什么使用指数回退的DefaultRetryStrategy不能解决这个问题?

EDIT001:这里解释一下前缀的含义

共有1个答案

鲜于德泽
2023-03-14

好的,在与AWS支持团队合作一个月后,在S3工程团队的协助下,简短的回答是,“随机化”是旧方式的前缀。长话短说,正如原始问题中的链接所述,它们确实提高了S3的性能,然而,您总是可以让S3屈服。关键是,它们在内部对bucket中排序的所有对象进行分区,分区作用于bucket前缀,并按照前缀的字典顺序对其进行组织,因此,不管怎样,当你把很多文件放在不同的“文件夹”中时,它仍然会对prefix的外部施加压力,然后它会尝试对外部进行分区,这时你会遇到“减速”。好吧,你可以通过重试来成倍地后退,但在我的情况下,5分钟的后退并没有奏效,那么最后的办法是在前缀前面加上一些随机标记,最好是均匀分布的。就是这样。在攻击性较小的情况下,S3工程团队可以检查您的使用情况并手动划分存储桶(在存储桶级别完成)。在我们的情况下不起作用。

不,没有钱可以购买每个前缀的更多请求,因为,我想没有实体可以支付亚马逊重写S3后端。

2020年更新:好吧,在对S3前缀实施随机化之后,我只能说一件事,如果你努力尝试,随机化不会有帮助。我们仍在放缓,但不像以前那样频繁。除了重新安排失败的操作以便以后执行之外,没有其他方法可以解决此问题。

还有一个2020年的更新:呵呵,你对你的bucket所做的列表请求的数量阻止了我们对bucket进行正确的分区。英雄联盟

 类似资料:
  • 我正在从事一个项目,其中读/写请求的数量随着数据大小的增加而增加。但在测试50GB数据时,我们对s3发出了非常高的读/写请求,s3抛出了“请降低您的请求率”错误。我们无法选择减少请求的选项,所以是否有任何可能的方法可以更灵活地使用s3来避免此问题。任何帮助都将不胜感激。

  • 我有一个具有OAuth2授权的Spring Cloud应用程序: 我添加了这个安全配置: github:https://github.com/rcbandit111/OAuth2/blob/master/src/main/java/org/engine/security/WebSecurityConfig.java 打开Angular应用程序时,出现访问错误: 您知道我需要应用什么配置才能在没有强

  • 一个应用的请求是用 yii\web\Request 对象来表示的,该对象提供了诸如 请求参数(译者注:通常是GET参数或者POST参数)、HTTP头、cookies等信息。 默认情况下,对于一个给定的请求,你可以通过 request application component 应用组件(yii\web\Request 类的实例) 获得访问相应的请求对象。在本章节,我们将介绍怎样在你的应用中使用这个

  • Wiki ▸ [[API--中文手册]] ▸ [[核心函数]] ▸ 请求 如果你不访问数据那么你就不能可视化它。幸运的是有很多的方法可以把数据放到浏览器中。对于小数据集,你可以硬编码到你的脚本里,或者使用数据属性嵌入到DOM中。对于大数据集,你可以引用外部脚本并定义你的数据为一个全局变量。(JSONP就是一个常见的例子)。最通用的方式是使用XMLHttpRequest, 或说XHR加载数据到浏览器

  • 请求对象(Request) 是完全基于 PSR-7 标准实现的,由 hyperf/http-message 组件提供实现支持。 注意 PSR-7 标准为 请求(Request) 进行了 immutable 机制 的设计,所有以 with 开头的方法的返回值都是一个新对象,不会修改原对象的值 安装 该组件完全独立,适用于任何一个框架项目。 composer require hyperf/http-m

  • 请求对象封装了客户端请求的所有信息。在 HTTP 协议中,这些信息是从客户端发送到服务器请求的 HTTP 头部和消息体。