跳至内容

使用适用于 Amazon S3 的 AWS CLI sync 命令时如何提高数据传输性能?

2 分钟阅读
0

我使用 AWS 命令行界面(AWS CLI)同步命令在 Amazon Simple Storage Service(Amazon S3)上传输数据。但是,传输需要很长时间才能完成。

简短描述

源和目标存储桶中的对象数量可能会影响 sync 命令完成该过程所花费的时间。传输大小会影响同步持续时间和向 Amazon S3 发出的请求费用。

解决方法

**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

移除过期的删除标记

由于 sync 命令在后端运行列表 API 调用,因此删除标记会影响 sync 命令的性能。最佳做法是最大限度地减少删除标记的数量。您可以使用 S3 生命周期配置规则自动在启用了版本控制的存储桶中移除到期对象删除标记

运行多个 AWS CLI 操作

要复制大量数据,请并行运行单独的同步操作。以下示例命令为不同的前缀运行并行同步操作:

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder1 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder1  aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder2 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder2

或者,为单独的排除和包含筛选器运行并行同步操作。以下示例操作通过以数字 0 - 4 以及数字 5 - 9 开头的键名来分隔要同步的文件:

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"  aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"

注意:即使您使用排除包含筛选器,sync 命令仍会审查源存储桶中的所有文件。审查可确定要复制到目标存储桶的源文件。如果您有多个针对不同键名前缀的同步操作,则每个同步操作都会审查所有源文件。但是,由于采用了排除包含筛选器,Amazon S3 只会将筛选器中包含的文件复制到目标存储桶。

有关如果优化工作负载性能的详细信息,请参阅最佳实践设计模式:优化 Amazon S3 性能

激活 S3 Transfer Acceleration

使用 S3 Transfer Acceleration 提高您的传输速度。

要查看 S3 Transfer Acceleration 的定价,请选择 Amazon S3 定价页面上的数据传输选项卡。要确定 S3 Transfer Acceleration 是否能够提高您的传输速度,请使用 Amazon S3 Transfer Acceleration Speed Comparison 工具。

**注意:**借助 S3 Transfer Acceleration,您无法在 AWS 区域中使用 CopyObject 操作。

修改 AWS CLI 配置值

max_concurrent_requests

当您使用 max_concurrent_requests 时,同时可以发送到 Amazon S3 的默认请求数为 10。要提高性能,请增加该值。

重要事项:

  • 当运行更多线程时,您会在计算机上使用更多的资源。确保计算机有足够的资源来支持最大并发请求数。
  • 并发请求过多可能会导致连接超时或降低系统的响应速度。为了避免 AWS CLI 出现超时问题,请将 --cli-read-timeout 选项或 --cli-connect-timeout 选项设置为 0

multipart_threshold

当文件达到大小阈值时,Amazon S3 使用分段上传而不是单一操作。multipart_threshold 的默认值为 8 MB。要增加默认值,请运行以下命令:

aws configure set default.s3.multipart_threshold 16MB

**注意:**将 16MB 替换为您的分段阈值大小。

multipart_chunksize

multipart_chunksize 的默认值为 8 MB,最小值为 5 MB。要增加块大小,请运行以下命令:

aws configure set default.s3.multipart_chunksize 16MB

**注意:**将 16MB 替换为新的块大小。

对于大型对象,最佳做法是将 multipart_threshold 设置为 100 MB,以便只有大文件才使用分段上传。将 multipart_chunksize 设置为 25 MB 也是一种最佳做法,以便在高效上传和可管理的分段大小之间取得平衡。

(可选)检查您的 Amazon EC2 实例配置

如果您通过 Amazon Elastic Compute Cloud (Amazon EC2) 实例运行同步,请运行以下最佳实践来提升性能:

  • 使用具有更高网络吞吐量和更好 CPU 资源的更大 EC2 实例类型来加快数据传输速率。
  • 将实例置于与您的存储桶相同的区域以减少网络延迟。
  • 使用 Amazon Virtual Private Cloud (Amazon VPC) 网关端点在 AWS 网络内路由流量,以提高性能和安全性。
    **注意:**只有当您的实例与您的存储桶位于同一区域时,您才能使用此配置。
  • 使用 Amazon Elastic Block Store (Amazon EBS) 优化实例并选择可提供高 IOPS 和吞吐量的 EBS 卷类型,例如 gp3 或 io2 卷。当您在将本地数据传输到 Amazon S3 之前处理本地数据时,这有助于减少 I/O 争用和延迟。
  • 选择支持增强联网的实例,以获得更高的每秒数据包数 (PPS) 性能和更低的延迟。
  • 如果您的工作负载受益于更大的 TCP 数据包,请激活巨型帧 (MTU 9001)

相关信息

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

如何将大量数据从一个 Amazon S3 存储桶传输到另一个存储桶?

当我将数据从本地客户端下载或上传到 Amazon S3 时,如何解决速度缓慢或不一致的问题?

AWS 官方已更新 7 个月前