大型数据集转移策略

更新时间:2017 年 10 月 11 日

本文简要介绍了如何将数据转移到 Cloud Storage 以及如何选择最适合您的方法,同时还提供了使用 gsutil 工具进行数字网络转移的最佳做法。

将现有业务操作迁移到 Google Cloud Platform (GCP) 时,通常需要将大量数据传输到 Cloud Storage。Cloud Storage 是一项具有高可用性的持久对象存储服务,对存储在存储分区中的文件数量没有限制,但每个文件的大小不得超过 5 TB。Cloud Storage 经过优化,可与 BigQueryCloud Dataflow 等其他 GCP 服务搭配使用,让您能够轻松使用更宽泛的 GCP 架构执行基于云的数据工程和分析。

要充分挖掘本文的价值,您应该能够粗略回答以下问题:

  • 您需要传输多少数据?
  • 您的数据位于何处?例如,它是存储在数据中心,还是由其他云提供商保管?
  • 此数据位置可以提供多少网络带宽?
  • 您需要一次性传输所有数据,还是定期传输数据?

估算费用

目前,当您将数据移动到 Cloud Storage 时,入站流量不收取费用。gsutil 工具和 Storage Transfer Service 均可免费使用。如需获取最新的价格信息,请参阅 GCP 网络价格页面

转移数据后,您需要根据存储空间网络操作支付 Cloud Storage 使用费。您还应该考虑不同存储类别的费用影响,并为您的使用场景选择合适的存储类别。Cloud Storage API 接口与类别无关,允许对所有存储类别进行同样的 API 访问。如需了解详情,请参阅 Cloud Storage 价格

Transfer Appliance 的价格包括使用费、传输费和可能的延迟费。从设备提取到 Cloud Storage 是免费提供的。使用 Transfer Appliance 传输数据后,您需要为正常的 Cloud Storage 使用量付费。如需了解详情,请参阅 Transfer Appliance 的价格政策

您的数据传输解决方案也可能会产生 Google 以外的费用。此类费用包括但不限于:

  • 来源提供方的出站和操作费用。
  • 在线或离线传输的第三方服务费用。
  • 第三方网络费用。

选择合适的数据传输方法

下图展示了将数据传输到 Cloud Storage 的各种方法。

将数据导入 Cloud Storage

  • X 轴表示数据源对 GCP 的可访问性或“远近程度”。在这种情况下,具有出色互联网连接的源距离较近,而没有互联网连接的源距离较远。
  • Y 轴表示要传输的数据量。

下图可帮助您浏览本文的其余部分并为您的工具选择过程提供指导。

选择您的工具

定义“远近程度”

您的数据与 GCP 的“远近程度”没有具体的定义。这最终取决于数据大小、网络带宽和使用场景的性质。

给定数据大小和网络带宽后,下图可帮助您估算数据传输时间。请始终在特定使用场景的上下文中分析传输时间。因为在一个工作流中花费三个小时传输 1 TB 的数据也许不可接受,但在另一个工作流中,花费 30 个小时传输相同的数据量也许又可以接受。

估算传输时间

让您的数据尽量靠近 GCP

本部分介绍在两个主要方面(即数据大小和网络带宽)改善“远近程度”的方法。

减少数据大小

您可以通过重复数据删除以及对数据源进行压缩来减少数据大小。压缩和重复数据删除可以最大限度地减少通过网络传输的数据量,从而减少传输所需的时间和存储费用。如果您的数据包含许多小文件,则使用 tar -cvzf 等工具对其进行压缩和分组可以在使用 gsutil 或 Storage Transfer Service 时显著加快传输速度。

压缩数据也有缺点,因为它属于 CPU 和时间密集型操作。如果要存储文件以用于归档,请考虑在将文件传输到 Cloud Storage 之前压缩文件。如果您计划在应用中使用传输的文件,则可以解压缩 Cloud Storage 中的数据。在这种情况下,您应传输未压缩的文件。

一般来说,压缩文本数据会产生 4:1 的压缩比。二进制文件和多媒体数据(如 JPEG 或 MP3)的有损压缩算法通常是减少其大小的最佳选择。

请尽可能使用紧凑的文件格式,例如,Avro 文件本质上非常紧凑。

增加网络带宽

增加网络带宽的方法取决于您选择连接到 GCP 的方式。您可以通过三种主要方式连接到 GCP:

  • 公共互联网连接
  • 直接对等互连
  • Cloud Interconnect

使用公共互联网进行连接

当您使用公共互联网连接时,网络吞吐量不可预测,因为您受到互联网服务提供商 (ISP) 容量和路由的限制。ISP 可能会提供受限的服务等级协议 (SLA),或者根本不提供服务等级协议。但另一方面,这种连接的费用相对较低。

使用直接对等互连进行连接

您可以使用直接对等互连访问 Google 网络,从而最大限度地减少网络跃点。通过此方法,您可以在您的网络和 Google 的边缘接入点 (PoP) 之间交换互联网流量。这样做可以减少您的网络和 Google 网络之间的跃点数。

使用 Cloud Interconnect 进行连接

Cloud Interconnect 通过其中一个 Cloud Interconnect 服务提供商提供直接 GCP 连接。此服务为大型数据传输提供更一致的吞吐量,通常包括网络可用性和性能的 SLA。 如需了解详情,请直接联系服务提供商

将数据传输到 GCP

您可能需要从其他云服务或本地数据中心转移数据,而您使用的转移方法取决于您的数据与 GCP 的远近程度。本部分介绍了以下方案:

  • 从云端转移:非常近
  • 从托管或本地存储空间传输:比较近
  • 远程传输

从云端传输

如果您的数据源是 Amazon S3 存储分区、HTTP/HTTPS 位置或 Cloud Storage 存储分区,则您可以使用 Storage Transfer Service 传输数据。

从托管或本地存储空间传输

如果您从主机托管服务提供商或与 GCP 距离相对“较近”的本地数据中心进行操作,请使用 gsutil 或第三方工具转移您的数据。

gsutil

gsutil 工具是一个可用于 Windows、Linux 和 Mac 的开源命令行实用程序。

  • 多线程/处理:在传输大量文件时很有用。
  • 并行复合上传:拆分大文件、并行传输区块,并在目的地进行组合。
  • 重试:适用于瞬态网络故障以及 HTTP/4295xx 错误代码。
  • 可恢复性:发生错误后继续传输。
限制

gsutil 工具没有内置对网络节流功能的支持。您必须将其与 Trickle 等工具搭配使用,以控制网络层的流量。如果您具有操作系统级层的权限并且有信心进行低级层微调,可以通过调整 TCP 参数和/或提高转移吞吐率来缩短转移时间。

gsutil 工具非常适合一次性传输或手动启动的传输。如果您需要建立持续的数据转移流水线,必须将 gsutil 作为 cron 作业运行,或使用其他工作流管理工具(如 Airflow)来编排工作。

加密数据

gsutil 工具使用传输层加密 (HTTPS) 来加密传输中的流量。Cloud Storage 以加密形式存储数据,并允许您使用自己的加密密钥。如需了解详细的安全建议,请参阅安全与隐私权注意事项

多线程传输

当您使用单线程 gsutil 进程通过网络传输多个文件时,可能无法用尽所有可用带宽。下图展示了四个文件的单线程传输,由于每个文件都必须等待前面的文件传输完成后才能操作,因此会浪费未使用的带宽。

单线程传输

您可以使用更多可用带宽,并通过并行复制文件来加速数据传输。下图展示了四个文件的多线程传输。

多线程传输

默认情况下,gsutil 工具使用单个线程传输多个文件。要启用多线程复制,请在执行 cp 命令时使用 -m 标志。

以下命令将源目录中的所有文件复制到 Cloud Storage 存储分区中。将 [SOURCE_DIRECTORY] 替换为您的目录,并将 [BUCKET_NAME] 替换为您的 Cloud Storage 存储分区的名称。

gsutil -m cp -r [SOURCE_DIRECTORY] gs://[BUCKET_NAME]
并行复合上传

如果您打算上传大文件,gsutil 提供了并行复合上传功能。此功能将每个文件拆分为几个较小的组成部分,然后并行上传这些组成部分。下图展示了上传一个大文件和使用并行复合方法上传同一文件之间的区别。

上传一个大文件

并行复合上传

如需了解使用并行复合上传的优势和权衡,请访问 cp 命令文档

调整 TCP 参数

您可以通过调整以下 TCP 参数来提高 TCP 传输性能。在更改这些设置之前,请阅读操作系统的文档并咨询专家。

  • TCP 窗口缩放 (RFC 1323)

    此设置允许使用调节因子调节 TCP 窗口大小,使其超过 16 位。此设置可允许数据传输使用更多可用带宽。发送者和接收者必须都支持 TCP 窗口扩缩才能正常转移数据。

  • TCP 时间戳 (RFC 1323)

    此设置可以精确测量往返时间,从而提升 TCP 性能的流畅度。

  • TCP 选择性确认 (RFC 2018)

    此设置表示发送者只能重新传输接收者丢失的数据。

  • 发送和接收缓冲区大小

    这些设置用于确定在向另一方发送确认之前您可以发送或接收的数据量。如果您觉得它们限制了带宽利用率,则可以尝试调高这些设置。

提高传输吞吐率

通过增加有效网络带宽,您可以提高数据传输吞吐率。您可通过运行以下 gsutil 性能诊断工具命令来测试网络延时情况。将 [BUCKET_NAME] 替换为您的 Cloud Storage 存储分区的名称。

gsutil perfdiag gs://[BUCKET_NAME]

您可以使用 gsutil 来实验操作系统进程、线程等的不同组合。使用 gsutil 工具,您可以更好地了解网络的最佳配置选项,并确定应传输许多小文件还是几个大文件。

您可以使用以下选项来帮助定义网络吞吐量。

  • -c 选项设置进程数。
  • -k 选项设置每个进程的线程数。
  • -n 选项设置对象的数量。
  • -s 选项设置每个对象的大小。
  • -t wthru_file 选项从本地磁盘读取文件以评估本地磁盘的读取性能。

例如,以下命令使用 2 个进程和 10 个线程上传 100 个文件,每个文件 10 MB。该命令包括用于多线程的 -m 选项和用于并行复合上传的 -p 选项。将 [BUCKET_NAME] 替换为您的 Cloud Storage 存储分区的名称。

gsutil perfdiag -c 2 -p both -t wthru_file -s 10M -n 100 -k 10 gs://[BUCKET_NAME]

以下结果展示了示例诊断输出,包括以 Mbit/s 为单位的写入吞吐量值。

------------------------------------------------------------------------------
                        Write Throughput With File I/O
------------------------------------------------------------------------------
Copied 100 10 MiB file(s) for a total transfer size of 1000 MiB.
Write throughput: 135.15 Mbit/s.
Parallelism strategy: both

要检查您的网络与 Google 网络之间的跃点数,可以使用 traceroute 命令行工具并设置自治系统 (AS) 编号标志组。以下命令适用于 Linux 环境:

traceroute -a test.storage-upload.googleapis.com

查找大多数 Google 服务(包括 GCP)的 AS 编号 AS15169。以下示例输出表明进入 Google 网络需要 6 个跃点。

traceroute to storage.l.googleusercontent.com (74.125.68.128), 64 hops max, 52 byte packets
     1  [AS0] XXXX.XXXXX.XXX (192.168.2.1)  1.374 ms  1.094 ms  0.982 ms
     2  [AS0] XXXX.XXXXX.XXX (192.168.1.1)  1.582 ms  1.932 ms  1.858 ms
       ...
     6  [AS15169] 108.XXX.XXX.XXX (108.XXX.XXX.XXX)  17.281 ms
       ...

如需查看性能诊断工具选项的完整列表,请参阅 gsutil 工具文档

第三方工具

gsutil 工具适用于许多工作流。但是,对于高级网络级层优化或持续数据传输工作流,您可能希望使用更高级的工具。如需了解更多高级工具,请访问 Google 合作伙伴

以下链接按字母顺序突出显示了部分选项:

  • Aspera On Demand for Google 基于 Aspera 的专利协议,适用于大规模工作流。它可按需以订阅许可模式提供。

  • Bitspeed 提供更优的文件传输协议,适用于传输大文件或大量文件。这些解决方案可用作物理和虚拟设备,您可以将其插入现有网络和文件系统。

  • TervelaCloud FastPath 可用于构建进出 GCP 的托管数据流。如需了解详情,请参阅使用 Cloud FastPath 创建数据流

  • Komprise 可用于分析本地存储空间中的数据,以识别冷数据并将其移动至 Cloud Storage。如需了解详情,请参阅使用 Komprise 将冷数据存档到 Cloud Storage

  • Signiant 提供 Media Shuttle 作为软件即服务器 (SaaS) 解决方案,可以从任意位置转移任何文件或将其转移到任何位置。Signiant 还提供 Flight 作为基于高度优化协议的自动扩缩实用程序,并提供 Manager+Agents 作为自动化工具,用于跨地理位置分散的地点进行大规模转移。

远程传输数据

当您的数据不被视为距离 GCP “较近”时,离线数据传输是最好的选择。通过离线传输,您可以将数据加载到物理存储媒介上,并将其发送到与 GCP 具有良好网络连接的提取点,然后从那里进行上传。

Transfer Appliance 以及许多第三方服务提供商都提供了各种转移方案,您可以根据自己的要求进行审核并从中进行选择。选择标准主要有两个。

  • 传输的大小。
  • 数据的动态性。

Transfer Appliance 适用于大型数据传输。但是,如果您有大量动态数据,Zadara Storage 可能是更好的选择。

如需获取选择最佳方案的帮助,请与您的 Google 代表联系。

后续步骤