新的“ S3提高请求率性能”声明意味着什么


12

2018年7月17日,AWS正式发布了一份声明,解释说不再需要将每个S3对象密钥的前几个字符随机化以实现最佳性能:https : //aws.amazon.com/about-aws/whats-new / 2018/07 / amazon-s3-announces-request-rate-performance- /

Amazon S3宣布提高请求率性能

发表于:七月17,2018

Amazon S3现在提供更高的性能,以支持每秒至少3500个添加数据的请求和每秒5500个检索数据的请求,这可以节省大量处理时间,而无需支付额外费用。每个S3前缀都可以支持这些请求速率,从而可以轻松轻松地显着提高性能。

今天在Amazon S3上运行的应用程序将享受此性能提升,而无需进行任何更改,并且在S3上构建新应用程序的客户无需进行任何应用程序自定义即可实现此性能。Amazon S3对并行请求的支持意味着您可以根据计算集群的规模来扩展S3性能,而无需对应用程序进行任何自定义。性能按前缀扩展,因此您可以并行使用任意数量的前缀以实现所需的吞吐量。前缀数量没有限制。

S3请求速率性能的提高消除了任何先前的指南,即可以随机化对象前缀以实现更快的性能。这意味着您现在可以在S3对象命名中使用逻辑或顺序命名模式,而不会影响性能。现在,所有AWS区域都可以使用此改进。有关更多信息,请访问Amazon S3开发人员指南。

很好,但也令人困惑。它说每个S3前缀都可以支持这些请求速率,从而可以轻松地显着提高性能

但是由于前缀和定界符只是GET Bucket (List Objects)列出存储桶内容时API的参数,因此谈论“每个前缀”的对象检索性能如何才有意义。每次调用都GET Bucket (List Objects)可以选择所需的任何前缀和分隔符,因此前缀不是预定义的实体。

例如,如果我的存储桶包含以下对象:

a1/b-2
a1/c-3

然后,每当我列出存储桶内容时,我都可以选择使用“ /”或“-”作为分隔符,因此我可能会认为前缀是

a1/ 

要么

a1/b-
a1/c-

但是,由于GET ObjectAPI使用整个密钥,因此对象检索不存在特定前缀或定界符的概念。因此,我可以期望5,500 req / sec开启a1/还是5,500 req / sec a1/b-和5500开启a1/c-

当有人建议“每个s3前缀”具有特定的性能水平(例如,每秒+5,500请求以检索数据)时,有人可以解释一下公告的含义吗?


我想对此有一个解释,但希望能找到一些确认。我怀疑它与索引分区拆分算法有关,索引分区拆分算法是自动的,并且基于流量负载...以及词法而不是基于哈希。
Michael-sqlbot

Answers:


9

实际上,这里所说的前缀似乎是过分简化,实际上是指存储分区索引的每个分区。索引是词法的,因此根据对象键中的前导字符进行拆分。因此,它称为prefix

S3自动且透明地管理索引分区,因此此处的“前缀”的精确定义实际上有点不精确:这是“ S3决定需要什么来支持存储桶的工作量”。S3会根据工作负载拆分索引分区,因此今天可能具有相同“前缀”的两个对象明天将具有不同的前缀,所有这些前缀都在后台完成。

现在,a1 / a -...和a1 / b -...和a1 / c -...可能都是单个前缀。但是将足够的流量浪费在存储桶上,S3可能会决定划分分区,以便明天a1 / a-和a1 / b-可以使用一个前缀,而a1 / c-可以使用其自己的前缀。(也就是说,键<a1 / c-位于一个分区中,而键> = a1 / c-现在位于另一个分区中)。

没有记录何时何地以及具体是什么阈值触发了拆分行为,但它似乎仅与请求数有关,与对象的数目或大小无关。以前,这些分区每个每秒只能有几百个请求,而且已经大大增加了。


1
非常有趣和可信。但是,由于前缀是基于负载而动态的,因此毫无疑问地“按前缀”分配任何特定的性能指标是没有意义的。如果存储桶的前缀动态更改,则没有可靠的性能衡量指标。或者,也许我可以推断出前缀理论上应该动态更改,直到每个S3对象期望达到5500 req / sec?
约翰·里斯

1
性能指标仍然有用,因为存储桶扩展仅倾向于一个方向-向上,而不是向下。当您意识到如果您为每个对象支付5k + req / s的费用,AWS会赚多少钱时,将每个分区扩展到单个对象的明显荒谬似乎就消失了。
Michael-sqlbot

1
是的,我对每个分区的单个对象有点腐。:-)但是,更严重的是,我想这意味着我可以期望,如果我的10000个对象存储桶中仅包含10个受欢迎的对象,那么希望S3最终能够重新分区,直到10个对象中的每个对象都能获得5k reqs / sec,而其他对象则很慢在几个大分区中。合理吗?
约翰·里斯

2
我完全有信心S3会适应工作量,是的。与以前一样,对于请求侧高流量的官方指南是将CloudFront与S3结合使用,因为CloudFront是分布式分布的,并且会将对象缓存在离请求它们的观众最近的边缘。这种定价方式使得将CloudFront添加到S3通常基本上不会影响总体成本(因为当请求从CloudFront到达以服务于高速缓存未命中时,S3不会为任何带宽付费)。
Michael-sqlbot

谢谢迈克尔。真的很好的仔细回答非常感谢。
约翰·里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.