当企业准备把数TB、数百TB甚至PB级文件从本地数据中心、NAS、其他云平台迁移到Google Cloud时,真正困难的通常不是“如何把文件复制过去”,而是如何安排迁移顺序、网络带宽、权限、校验、失败重试以及最终切换。Google Cloud提供的Storage Transfer Service正是为这类大规模数据移动设计的服务,可以在Amazon S3、Microsoft Azure Blob Storage、Google Cloud Storage以及本地文件系统等不同存储环境之间进行数据传输。Google官方特别将它定位为适合大规模数据移动的服务,并建议在超过1 TiB的数据迁移场景中考虑使用它。
一、首先要判断数据到底从哪里迁移
迁移方案的第一步不是创建Transfer Job,而是确定数据源的类型。不同数据源使用Storage Transfer Service的方式并不完全相同。
如果数据已经位于Amazon S3或者Microsoft Azure Blob Storage,Storage Transfer Service通常可以采用无代理方式直接将数据迁移到Google Cloud Storage。AWS S3和Azure Blob到Cloud Storage的传输不需要在本地部署Transfer Agent,Google的服务负责执行传输任务。
如果数据位于企业自己的NAS、NFS、POSIX文件系统或者其他本地文件系统,则情况不同。此时需要在能够访问源文件系统的机器上部署Storage Transfer Service Agent,并通过Agent Pool组织这些代理。Agent实际上承担了访问本地文件系统以及参与数据传输的工作,因此Agent所在服务器的CPU、内存、网络接口、磁盘读取能力以及到Google Cloud的网络质量都会影响整体迁移效率。
如果企业使用的是并非Amazon官方提供、但兼容S3 API的对象存储,例如某些本地对象存储平台,那么也属于S3-compatible storage。这类迁移同样需要使用Transfer Agent和Agent Pool,与Amazon S3的官方无代理迁移方式不能混为一谈。
二、迁移之前最应该计算的是时间和网络容量
大量文件迁移首先是一个带宽问题。假设需要迁移100TB数据,不能只看“互联网是1Gbps还是10Gbps”,还要考虑实际可用吞吐量、网络利用率、源端磁盘读取速度、文件数量、对象大小以及迁移期间其他业务占用的带宽。
理论上,1Gbps网络的最大传输能力约为125MB/s,但实际有效吞吐量通常低于理论值。如果源端是大量几KB、几十KB的小文件,即使网络带宽很高,也可能受到文件枚举、元数据操作、存储系统IOPS以及连接处理能力的影响。因此,100TB的大文件和100TB的数亿个小文件,迁移难度完全不同。
对于本地文件系统,Storage Transfer Service允许通过Agent Pool控制可使用的网络带宽。Google官方说明,带宽限制是在Agent Pool层面设置,并由该Pool中的Agent共享,可以用来避免迁移任务把企业生产网络完全占满。
因此,大规模迁移不应该简单地追求“速度越快越好”。如果企业白天还有ERP、数据库、视频会议、备份等业务,可能需要把迁移带宽限制在某个水平,并在夜间提高带宽。真正合理的目标是让迁移任务在不影响生产业务的情况下持续运行。
三、什么时候需要专线和Google网络连接
很多企业看到PB级迁移以后,会立即想到Dedicated Interconnect或者Partner Interconnect,但专线并不是所有迁移都必须使用。
如果企业本身拥有良好的互联网出口,而且迁移任务可以在较长时间内完成,直接使用互联网可能已经足够。反过来,如果企业需要在较短窗口内搬迁大量数据,或者生产网络与迁移流量必须严格隔离,那么就应该认真评估Google Cloud Interconnect、Peering以及其他网络方案。
Google官方针对Agent驱动的传输提供了多种增加网络带宽的方式,包括与Google进行Peering、使用Dedicated Interconnect或Partner Interconnect,以及向ISP购买更高带宽。
如果数据来自AWS S3,还需要进一步考虑AWS侧的出站费用和网络路径。Storage Transfer Service目前提供多种S3到Cloud Storage的传输路径,包括默认的无代理方式、通过CloudFront、Google管理的私有网络、客户管理的私有网络以及Agent驱动的方式。不同方案的成本、网络控制能力和部署复杂度并不相同。
因此,专线应该根据数据规模、迁移窗口、网络成本和业务影响进行计算,而不是作为所有项目的默认要求。
四、大量文件不要一次性全部迁移
对于几十TB、几百TB甚至PB级数据,比较稳妥的方式通常是分阶段迁移。第一阶段可以选择一小部分具有代表性的数据进行验证,重点观察文件大小分布、权限、目录结构、网络吞吐量、错误率以及目标端的数据表现。
验证成功以后,再按照业务系统、部门、目录、时间范围或者数据冷热程度进行分批迁移。这样做的价值不仅是控制网络压力,更重要的是能够降低故障影响范围。如果某一批数据出现权限、路径或者文件格式问题,不需要重新处理整个数据集。
Storage Transfer Service本身支持创建Transfer Job,并可以按照一次性任务或者计划任务运行。对于需要持续同步的场景,还可以根据数据源和业务要求设计周期性或者事件驱动的传输方式。
如果企业正在进行数据中心迁移,则可以把第一次大规模复制理解为“基础数据同步”,随后持续迁移新增和变化的数据。最终切换前,再进行一次增量同步,使目标端尽可能接近源端的最终状态。这样比停机以后才开始复制全部数据更加现实。
五、文件数量有时候比数据容量更重要
很多迁移计划只统计“我们有500TB数据”,却没有统计文件数量。如果500TB由几万个大型视频文件组成,迁移方式和500TB由数亿个小型文件组成,完全不能相提并论。
大量小文件会增加目录扫描、元数据处理以及对象创建等操作的成本。迁移计划因此应该同时记录总容量、文件数量、平均文件大小、最大文件大小以及不同目录的数据增长速度。
Storage Transfer Service对于文件系统迁移也存在规模限制。Google目前的文档说明,单个Transfer Job的文件数量需要低于10亿,Agent Pool最多可包含100个Agent。
这意味着PB级迁移并不只是把“PB”这个数字放进配置文件,而是需要认真分析数据结构。如果一个文件系统中存在大量极小文件,应该在迁移之前考虑是否有必要重新整理目录结构、清理无效文件,或者把部分历史数据转换成更适合对象存储的数据组织方式。
六、数据一致性不能只靠文件数量检查
迁移完成以后,不能仅仅比较源端和目标端“文件数量一样”,就宣布迁移成功。至少应该确认对象数量、总容量、文件路径以及必要的校验信息。
对于关键业务数据,应根据业务要求设计完整性验证。例如抽样比较文件大小和校验值,对关键目录进行完整扫描,并检查迁移任务中的失败文件和重试记录。
同时还要明确一个概念:DLP不是专门用于证明文件迁移完整性的工具。Google Cloud的Data Loss Prevention主要用于发现和处理敏感数据,例如个人信息等,而不是作为Storage Transfer Service的通用文件完整性校验工具。数据完整性应该主要依靠迁移任务状态、对象元数据、校验机制以及业务侧验证来完成。
对于金融、医疗等敏感业务,DLP可以作为迁移后的数据治理和敏感信息发现工具,但不能把它等同于迁移完整性检查。
七、成本不能只看Google Cloud Storage价格
大规模迁移的成本至少应该从几个方面计算。首先是目标端Cloud Storage的存储费用,其次是Storage Transfer Service本身可能产生的费用,再加上源云厂商的网络出口费用、Cloud Storage操作费用,以及专线或网络设备等相关成本。
Storage Transfer Service的收费方式取决于具体迁移模式。Google目前的价格说明显示,Agentless transfers本身不收Storage Transfer Service服务费,而文件系统的Agent-based transfers目前按成功传输的数据量收费;从外部云迁移时,还可能产生源云厂商的出站流量费用以及目标端Cloud Storage操作费用。具体费用必须根据数据源、迁移路径和所在区域计算,不能简单概括成统一的“按数据量收费”。
例如从AWS S3迁移到Google Cloud时,默认无代理方式可能产生AWS出站费用;Google管理的私有网络则采用另一种收费结构。Google官方也明确说明,某些路径可以通过不同的网络方式降低或改变AWS侧的出站成本。
因此,在正式迁移之前,最好先用实际数据做小规模测试,把网络流量、Storage Transfer Service费用、源端请求费用和目标端操作费用全部记录下来,再推算整个项目的预算。
八、迁移监控应该关注失败对象而不是只看速度
迁移开始以后,不能只盯着“MB/s”。真正需要关注的是任务状态、已经传输的数据量、对象数量、失败数量、重试情况以及任务是否持续产生错误。
Storage Transfer Service可以配合Cloud Logging、Cloud Monitoring使用,对于部分传输还可以配置Pub/Sub通知,从而把任务状态纳入企业现有监控系统。
如果发现吞吐量突然下降,也不要立即认为Google Cloud出现故障。原因可能来自源端NAS磁盘、文件系统元数据处理、网络出口、Agent服务器、TCP连接、目标端操作限制或者大量小文件本身。专业排查应该分别观察源端存储IO、Agent服务器资源、网络吞吐以及迁移任务错误信息。
对于Agent-based迁移,还可以动态增加Agent来提高并行处理能力。Google官方说明,迁移过程中可以增加Agent以提高性能。
但增加Agent也不是越多越好。如果网络出口只有1Gbps,而增加几十个Agent只是让它们共同争抢同一条网络线路,最终速度并不会因为Agent数量增加而成比例提升。
九、目标端存储类别不要在迁移第一天就全部定死
Google Cloud Storage提供Standard、Nearline、Coldline和Archive等不同存储类别。迁移之前应该根据数据访问模式制定策略,而不是简单地认为“日志就是Nearline,视频就是Archive”。
视频素材如果仍然需要频繁编辑,放入Archive并不合适;日志如果需要经常进行安全分析,也不能只根据“日志”这个名称就直接放到低频存储类别。真正应该考虑的是访问频率、访问模式、保留时间、读取需求以及相关费用。
更合理的做法是先把数据按照实际使用情况分类,再利用Cloud Storage的生命周期管理策略,让对象在满足条件以后自动转换到更合适的存储类别。迁移本身与后续生命周期管理应该被视为两个阶段,而不是把所有历史数据在迁移时一次性做出永久决定。
十、正式切换前必须设计回退方案
如果这次迁移只是建立云端备份,源端可以继续作为生产数据,那么迁移完成以后并不意味着必须立即删除源数据。应该根据企业的保留政策,在确认目标端数据完整、应用能够正常读取以后,再决定什么时候释放原有存储空间。
如果迁移本身是数据中心退出项目,那么更应该设置明确的验证窗口。应用切换以后,需要检查用户访问、文件权限、路径映射、应用程序读写、备份任务和监控系统是否正常。只有经过验证以后,才应该考虑关闭旧存储。
Cloud Storage的对象版本控制也有自己的使用场景,但不能简单理解为“迁移失败以后可以依靠版本控制把整个迁移项目回滚”。版本控制主要解决对象版本保留问题,并不是完整的数据中心回滚机制。真正的回退方案仍然应该建立在源数据保留、应用切换策略和业务验证基础上。
对于大规模文件迁移来说,Storage Transfer Service真正的价值在于把原本需要大量自定义脚本、人工重试和手工核对的文件复制工作,变成可以管理、监控和重复执行的迁移任务。它并不会自动解决所有问题,网络带宽、源端存储性能、文件数量、权限、安全策略以及成本仍然需要由企业自己规划。
如果数据来自AWS S3或Azure Blob,首先应该评估无代理迁移;如果来自本地NAS或POSIX文件系统,则需要部署Agent和Agent Pool;如果数据规模巨大,则应该先进行小规模验证,再分批迁移,并根据实际吞吐量决定是否增加Agent、提高网络带宽或使用Interconnect等网络方案。对于真正的PB级项目,最可靠的做法不是追求某一个固定的“每秒多少MB”,而是建立从源端、网络、迁移服务到目标存储的完整测量体系,并把初始全量迁移、增量同步、完整性验证和最终业务切换安排成一个连续的工程流程。
Google Cloud Transfer Service 怎么使用,大量文件迁移到云端应该如何安排
图片说明:示意图 图片来源:Public Domain(公有领域)
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP