使用GCE和gsutil加速S3到GCS传输

时间:2013-06-07 23:54:12

标签: amazon-s3 google-cloud-storage google-compute-engine

我计划使用GCE集群和gsutil将~50Tb的数据从Amazon S3传输到GCS。到目前为止,我有一个很好的方法来分配负载,但是我将不得不使用多个实例,但与我使用本地集群实现的相比,我的传输速率相当慢。以下是我正在做的事情的详细信息

实例类型: n1-highcpu-8-d

图片: debian-6-squeeze

工作期间的典型负载平均值: 26.43,23.15,21.15

70gb测试的平均传输速度(单个实例): ~21mbps

平均文件大小: ~300mb

.boto流程计数: 8

.boto线程数: 10

我一次在大约400个s3文件上调用gsutil:

gsutil -m cp -InL manifest.txt gs://my_bucket 

我需要一些关于如何在每个实例上更快地进行传输的建议。我也不是100%关于n1-highcpu-8-d实例是否是最佳选择。我想可能使用python自己并行化工作,但我认为调整gsutil设置可以产生良好的结果。非常感谢任何建议

2 个答案:

答案 0 :(得分:2)

如果您看到每个对象21Mbps并且一次运行大约20个对象,那么您从一台计算机获得的吞吐量大约为420Mbps。另一方面,如果你总共看到21Mbps,这表明你可能会在路径的某个地方受到严重限制。

我建议您可能希望使用多个较小的实例来跨多个IP地址传播请求;例如,使用4个n1-standard-2实例可以产生比一个n1-standard-8更好的总吞吐量。为了做到这一点,您需要拆分要在机器之间传输的文件。

我也想知道,根据你的评论,你一次保持开放的流数量。在我看过的大多数测试中,当你达到8-16个流时,你会从额外的线程/流中获得收益递减,并且通常单个流的速度至少比具有分块的多个流的60-80%快

您可能想要调查的另一件事是您所看到的下载/上传速度;将数据复制到本地磁盘,然后重新上传它将让您获得下载和上传速度的单独测量,并且如果gsutil因等待写入而阻止从一个管道读取,则使用本地磁盘作为缓冲区可能会加快整个过程到另一个。

你没有提到的另一件事是你正在运行的区域。我假设你在美国某个地区而不是欧盟地区运营,并从亚马逊的美国东部S3地区下载。

答案 1 :(得分:0)

在boto配置(通常是〜/ .boto)文件中使用parallel_thread_count和parallel_process_count值。

您可以输入以下命令获取有关-m选项的更多信息:

gsutil帮助选项