本页面介绍文件系统转移的最佳做法。
性能最佳做法
以下是确保良好转移性能的最佳做法:
通过转移大型资料库(通常至少为 100 GB)来对性能进行基准测试。
Storage Transfer Service 是一项大规模的吞吐量优化服务,因此在非常小的测试数据集中的性能无法反映生产环境中大型数据集的性能。
限制单个源文件夹的文件数量上限(100 万个)。包含数百万个文件的目录可能会减慢整个转移过程。
在单独的虚拟机 (VM) 中运行代理,以便您可以对资源用量进行更有效地扩缩。
验证代理机器上的网络接口容量是否适合您所需的读/写带宽。
例如,如果您打算充分利用 20 Gbps 广域网 (WAN),则代理机器的网络接口必须支持 20 Gbps 才能从联网的文件系统中读取数据,而另外 20 Gbps 则用来将数据转移到 Cloud Storage,也就是说总带宽 40 Gbps。
监控代理机器上的 CPU、内存和网络,以确保这些机器不会因其他工作负载而不堪重负,因为这会对性能产生负面影响。如需了解建议的内存和 CPU 数量,请参阅代理硬件要求。
分段上传
如果您的传输是从 POSIX 文件系统到 Cloud Storage,或是在 POSIX 文件系统之间传输 POSIX 文件系统,请考虑启用 多部分上传。 分段上传可将包含大型文件的传输速度加快高达 300% 通过将大型文件 (>1 GiB) 拆分为多个较小的部分并上传 并行执行。
HDFS 和与 S3 兼容的文件系统不支持多部分上传。
启用分段上传
如需启用分段上传,请执行以下操作:
您必须为负责向转移代理授权的账号(用户账号或服务账号)授予所需的权限。
目标存储桶或中间存储桶不得设置保留政策及对象保全。
启用分段上传后,Storage Transfer Service 会在能够加快转移过程的情况下自动采用分段上传。
配置多部分对象生命周期规则
您可以使用 Cloud Storage 对象生命周期管理来取消未完成的 多部分上传并删除相关部分。请参阅 中止未完成的多部分上传 Cloud Storage 文档。
我们建议将 age
值设置为 7 天。
停用分段上传
如需停用分段上传,请使用 docker run
重新安装转移代理并传递 --enable-multipart=false
:
sudo docker run --ulimit memlock=64000000 -d --rm \ -v /usr/local/research:/usr/local/research \ gcr.io/cloud-ingest/tsop-agent:latest \ --project-id=PROJECT_ID \ --agent-pool=AGENT_POOL \ --creds-file=CREDENTIAL_FILE \ --hostname=$(hostname) \ --enable-multipart=false
请替换以下内容:
PROJECT_ID
指定托管转移作业的项目的 ID。CREDENTIAL_FILE
:如果转移代理使用服务账号进行身份验证,请指定 JSON 格式的服务账号凭据文件的路径。
或者,从向转移代理授权的账号(用户账号或服务账号)撤消所需的权限。
最大限度地提高转移代理性能
转移性能受以下变数影响:
文件系统功能。
底层硬件限制。
硬盘介质类型、输入/输出总线和局域网 (LAN) 连接都会影响性能。
WAN 吞吐量和利用率。
WAN 利用率过低或过高都会导致性能下降。
文件特征。
例如,由于网络开销,许多大文件较之许多小文件具有更高的网络吞吐量。
由于这些变数,我们无法预测实际性能,也无法提供最佳数量的代理供使用。
如果可能,我们建议您至少在不同的机器上使用三个代理,以便您的转移作业具备容错能力。您可以在转移作业运行时添加转移代理,因为性能会动态提高。
如需观察添加代理的影响,并选择最适合您的环境的代理数量,请执行以下操作:
开始执行至少需要 1 个小时才能完成运行的大型转移。例如,开始转移至少 10 万个文件,总大小至少为 100 GB。
等待吞吐量稳定下来,然后确定您是否受到 WAN 容量或带宽上限的限制。
如果您尚未用尽 WAN 容量,且尚未达到所需的转移限制,请添加其他代理。附加代理会自动增加转移吞吐量。等待大约 3 分钟以使 Cloud Monitoring 中的吞吐量稳定。
重复步骤 3 和 4,一次添加一个代理,直至达到所需的限制。只要有计算、文件系统和网络资源可用,每个代理池便最多可同时运行 100 个代理。
如果在达到所需限制之前用尽出站带宽,则可以执行以下任一操作:
如果您已添加代理,但吞吐量未增加且 WAN 容量未用尽,请调查文件系统吞吐量。在极少数情况下,文件系统吞吐量会达到饱和,从而降低您提高转移性能的能力。
为代理命名
在为代理命名时,我们建议您执行以下操作:
始终在代理中包含主机名。这可以帮助您找到代理运行所在的机器。我们建议您将
--hostname=$(hostname)
传递给 Dockerrun
命令。选择代理前缀方案,以帮助您在监控和基础架构组织的上下文中识别代理。例如:
如果您有三个单独的转移项目,则可能需要在您的代理中包含小组名称。例如
logistics
。如果为两个不同的数据中心运行两个不同的转移项目,则可能需要在代理前缀中包含数据中心名称。例如
omaha
。