并发实例下载时S3下载速度太慢?

时间:2017-10-24 18:56:42

标签: amazon-web-services amazon-s3 amazon-ec2

我有一个处理大数据集并从S3存储桶下载数据的系统。

每个实例从S3上的对象(dir)内部下载多个对象。当实例数较少时,下载速度很好 4-8MiB/s。 但是当我使用类似100-300个实例时,下载速度会降低到80KiB/s

想知道背后的原因是什么,我可以用什么方法来解决它?

3 个答案:

答案 0 :(得分:6)

如果您的EC2实例位于私有子网中,那么您的NAT可能是一个限制因素。

尝试以下方法:

  • 将S3端点添加到您的VPC。当您的EC2实例与S3通信时,这会绕过您的NAT。
  • 如果您使用的是NAT实例,请尝试使用NAT网关。他们可以扩大/缩小带宽。
  • 如果您正在使用NAT实例,请尝试将NAT实例的实例类型增加到具有更多CPU和增强联网的实例类型。
  • 如果您使用的是单个NAT,请尝试使用多个NAT(每个子网一个)。这将在多个NAT之间传播带宽。
  • 如果一切都失败了,请尝试将您的EC2实例放入公共子网。

答案 1 :(得分:3)

S3存储桶中的对象如何命名?由于分区,对象的命名可能对桶的吞吐量产生惊人的大影响。在后台,S3根据对象的键对存储桶进行分区,但只有键的前3-4个字符才是真正重要的。另请注意,密钥是存储桶中的整个路径,但子路径对于分区并不重要。因此,如果您有一个名为mybucket的存储桶,并且您的内部对象有2017/july/22.log2017/july/23.log2017/june/1.log2017/oct/23.log,那么您就可以了按月分区并不重要,因为只使用整个键的前几个字符。

如果您的存储桶中的对象具有顺序命名结构,那么对于对象的许多并行请求,您可能会遇到性能不佳的问题。为了解决这个问题,您应该为存储桶中的每个对象分配3-4个字符的随机前缀。

有关详细信息,请参阅http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html

答案 2 :(得分:0)

您可能希望使用S3DistCP而不是手动管理并发和连接...