【发布时间】:2019-07-05 05:46:07
【问题描述】:
我正在尝试将一个大文件 (~1.75GB) 从 S3 移动到同一区域的 EC2 实例。
通过 AWS 命令行,我可以在大约 13 秒内完成。
aws s3 cp s3://mybucket/myfile.txt ~
wget 来自同一个 EC2 实例(如果我公开文件)在 34 秒内完成。
wget https://mybucket.s3.amazonaws.com/myfile.txt
我的应用程序通过 REST API 可以以与wget 相同的速度下载它。
实例是 m5a.2xlarge,它应该具有“高达 10 Gbps”的网络。如果我的数学是正确的,10Gbps 应该是每秒 1 GB 左右,所以不到 2 秒就可以获取文件?
UPD: speedtest-cli 显示 850Mbit/s。
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by BroadAspect (Ashburn, VA) [0.98 km]: 1.387 ms
Testing download speed................................................................................
Download: 850.94 Mbit/s
Testing upload speed......................................................................................................
Upload: 929.41 Mbit/s
UPD2: Enhanced Networking 已启用
[ec2-user@ip-172-30-0-196 ~]$ ethtool -i eth0
driver: ena
version: 2.0.2g
UPD3:尝试了更多实例类型。最小/最便宜的 ARM a1.medium 和 i3en.6xlarge(I/O 优化,“保证”25Gbps)
将 1.75GB 文件从 S3 复制到同一区域的 EC2 实例的时间:
|instance type|Network Gbps|aws s3 cp|wget|
|-------------|------------|---------|----|
|m5a.2xlarge | Up to 10 | 13 | 34 |
|a1.medium | Up to 10 | 26 | 34 |
|i3en.6xlarge | 25 | 7.5 | 18 |
有趣的是 - 切换到 IO - 优化实例提高了传输速度,但它仍然没有接近 [文件大小]/[实例 Gbps]。
UPD4:AWS S3 配置
AWS S3 CLI 工具很少提供configurations options,例如:
aws configure set default.s3.max_concurrent_requests 10
aws configure set default.s3.multipart_chunksize 8MB
以上数字为默认值。在玩了一会儿之后,我发现m5a.2xlarge 的最佳组合是 3 个并发请求,180MB 块大小。这将下载时间缩短至 9 秒或 ~204MiB/秒。更好,但距离(理论上?)最大值还很远。
【问题讨论】:
-
"Up to 10 Gbps"是一个值范围,包括(但不限于)0 Gbps。他们不保证一致 10 Gbps。 -
我看到的速度非常一致,并且低于 10Gbps。喜欢 10 倍以下?
-
10Gbps是一个限制。这就像您的路由器限制10Gbps,但由于您的互联网提供商,吞吐量仅为1 Gbps。 -
如果 aws-cli 始终比 wget 快,这表明 aws-cli 正在使用字节范围请求在多个并行流中下载文件。您不会用单个 TCP 流使实例的连接饱和。 docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html
-
aws 没有提到任何关于吞吐量限制的内容,看起来我错了(糟糕的文档阅读抱歉)但是,它不能保证您将获得什么吞吐量,因此每个 GET 请求都有一个限制,具体取决于在网络条件下(这是尽力而为)。 AWS 声称单个实例可以达到 100 GB/s。也许这就是答案? medium.com/@venks.sa/…
标签: amazon-web-services amazon-s3 amazon-ec2