如何提高在 S3 存储桶和 EC2 实例之间复制数据的速度?

上次更新时间:2019 年 12 月 17 日

我想将数据从我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例传输到我的 Amazon Simple Storage Service (Amazon S3) 存储桶。我要如何改善传输速度?

简短描述

将数据从 Amazon EC2 复制、移动或同步到 Amazon S3 的传输速度取决于几个因素。在 EC2 实例和 S3 存储桶之间复制、移动或同步数据时,以下方法是提高传输速度的最佳实践:

  • 使用 EC2 实例上的增强联网功能。
  • 使用并行工作负载进行数据传输。
  • 在 AWS 命令行界面 (AWS CLI) 上自定义上传配置。
  • 为 Amazon S3 使用 Amazon Virtual Private Cloud (Amazon VPC) 终端节点。
  • 在地理上相距遥远的 AWS 区域之间使用 S3 Transfer Acceleration。
  • 升级您的 EC2 实例类型。
  • 使用分块传输。

解决方法

使用 EC2 实例上的增强联网功能

增强联网可以加大带宽,提高每秒数据包数 (PPS) 性能,并降低实例间的延迟。您可以启用增强联网,无需任何额外费用。

如果您的 EC2 实例的 PPS 速率似乎已达到上限,则该实例可能已达到虚拟网络接口驱动程序的上限。如果发生这种情况,请考虑启用增强联网功能。

注意:请务必查看增强联网的实例要求

使用并行工作负载进行数据传输

为了尽可能改善传输所需的总时间,可考虑将传输拆分为多个彼此互斥的操作。例如,如果您在使用 AWS CLI,则可以同时运行 aws s3 cp(复制)、aws s3 mv(移动)或 aws s3 sync(同步)多个实例。

注意:作为最佳实践,请确保您使用的是 最新版本的 AWS CLI

在 AWS CLI 上自定义上传配置

您可以为 Amazon S3 自定义以下 AWS CLI 配置来加快数据传输:

  • multipart_chunksize:此值设置 AWS CLI 在单个文件的分段上传中上传的每个部分的大小。通过此设置,您可以将较大的文件(例如 300 MB)分解为较小的部分,以加快上传速度。
    注意:分段上传要求单个文件上传时所分的不同部分不超过 10000 个。您必须确保您所设置的区块大小平衡了各部分文件大小和部分数量。
  • max_concurrent_requests:默认情况下,AWS CLI 支持多线程。您可以更改 max_concurrent_requests 值以增加可以同时发送到 Amazon S3 的请求数。默认值为 10。增加此值后,您得到的响应可能会变得迟缓。但是,将较高的 max_concurrent_requests 值与并行工作负载结合使用时,总体上可以实现更好的传输速度。
    注意:运行的线程越多,消耗的计算机资源也越多。您必须确保您的计算机拥有足够的资源来支持您想要的最大并发请求数。

为 Amazon S3 使用一个 VPC 终端节点

如果您的 EC2 实例与 S3 存储桶位于同一区域,请考虑为 Amazon S3 使用 VPC 终端节点。VPC 终端节点可以帮助提高整体性能并减少网络地址转换 (NAT) 的负载。

使用 VPC 终端节点的另一个好处是,您可以在没有互联网网关、NAT 设备或 VPN 连接的情况下私下连接到 VPC。VPC 中的实例不需要公共 IP 地址即可与 Amazon S3 存储桶之类的资源进行通信。使用 VPC 终端节点时,VPC 和 Amazon S3 之间的数据流量会在 AWS 网络上路由。

在地理上相距遥远的 AWS 区域之间使用 S3 Transfer Acceleration

如果 EC2 实例和 S3 存储桶在地理位置上彼此靠近,则数据传输速度会更高。如果实例和存储桶位于地理位置相距遥远的 AWS 区域中,请考虑启用 Amazon S3 Transfer Acceleration。Transfer Acceleration 使用 Amazon CloudFront 的全球分布边缘站点提供了长距离的快速安全传输。

Transfer Acceleration 会产生额外费用,因此请务必查看定价。要确定 Transfer Acceleration 是否会提高您的用例的传输速度,请查看 Amazon S3 Transfer Acceleration 速度比较工具

升级您的 EC2 实例类型

如果您的 EC2 实例的 CPU 使用率很高,则可能成为总体传输速度的瓶颈。您可以将实例升级为另一种实例类型以提供更高的内存和网络性能。对于同一个实例类型,较大的实例大小通常能提供比较小的实例大小更高的网络性能。

注意:最佳做法是,选择一种具有至少 10 Gbps 网络连接的实例类型,以在 EC2 实例和 Amazon S3 之间保持持续且可靠的网络带宽。

使用分块传输

如果您正在传输大文件,分段上传和远程 GET 可以帮助提高整体传输性能。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?