如何提高 Amazon S3 同步命令的传输性能?

1 分钟阅读
0

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

解决方法

sync 命令会比较源和目标桶,从而确定哪些源文件并未储存在目标桶中。sync 命令还会与目标桶中的文件进行比较,以确定已修改了哪些源文件。然后,将新的或更新的源文件复制到目标桶。

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

删除标记也会影响列表性能,因此最佳实践是尽量减少删除标记的数量。由于同步命令在后端运行列表的 API 调用,因此删除标记也会影响同步命令的性能。

若要缩短运行 sync 命令时的传输时间,请实施以下做法。

运行多个 AWS CLI 实例

如需复制大量数据,您可以运行多个 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

**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

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

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

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*"

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

修改 max_concurrent_requests 的 AWS CLI 配置值

为了能提高性能,修改 max_concurrent_requests 的值。此值用以设置您一次可发送到 Amazon S3 的请求数量。默认值为 10,您可以将其增加到更高值。但是,请注意以下限制:

  • 运行更多线程会消耗计算机上的更多资源。您必须确保自己的计算机有足够的资源来支持您想要并发的最大请求数。
  • 并发请求过多可能会使系统不堪重负。这可能会导致连接超时或降低系统的响应速度。为了避免 AWS CLI 出现超时问题,将--cli-read-timeout 值或 --cli-connect-timeout 值设置为 0。

(可选)检查实例配置

如果您使用 Amazon Elastic Compute Cloud(Amazon EC2)实例来运行同步操作,请使用以下最佳实践:

  • 查看您的实例类型。较大的实例类型可以实现更好的结果,因为它们的带宽高,并且 Amazon Elastic Block Store(Amazon EBS)对其网络进行了优化。
  • 如果实例与桶位于不同的 AWS 区域,请使用同一区域中的实例。如需缩短延迟,请缩短实例与 Amazon S3 桶之间的地理距离。
  • 如果实例与源桶位于同一区域,请设置适用于 S3 的 Amazon Virtual Private Cloud(Amazon VPC)端点。VPC 端点可以帮助提高整体性能。

相关信息

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

将大量数据从一个 Amazon S3 桶传输到另一个桶的最佳方法是什么?

AWS 官方
AWS 官方已更新 8 个月前