Stripe 构建了一套零停机数据移动平台,能够迁移 PB 级数据并在毫秒级完成流量切换。该平台支撑着 Stripe 的基础设施,每秒处理 500 万次数据库查询,覆盖 2000 多个基于 MongoDB 的分片,年交易额达 1.4 万亿美元,可靠性高达 99.9995%。
迁移过程遵循六阶段蓝图,围绕三个核心原则设计:保持数据一致性且停机时间短于节点故障事件、最小化对实时查询的性能影响、支持从小型数据集到数十 TB 的分片范围。
迁移流程阶段详解
1. 迁移注册
更新路由元数据服务以注册新目标分片及其键范围,在数据移动前确立目标位置。
2. 批量数据导入
通过优化服务传输主数据集,相比标准导入实现十倍性能提升。团队重排插入操作以匹配 MongoDB B-tree 存储引擎,按各分片最常用索引排序物品,使写入性能提升 10 倍。
3. 异步复制
专用复制服务维持源和目标分片间的双向同步,在捕获源数据变更的同时将修改复制回源分片。这种双向方法为出现问题时提供完整迁移回滚能力,成为金融数据的关键安全机制。
4. 验证服务
在执行流量切换前,验证服务执行全面正确性检查,比较源和目标分片间的数据,确保跨迁移边界的数据完整性。
5. 流量切换
基于“版本化门控”机制,协调数据库代理服务、协调器、路由服务和复制服务的版本更新。客户端应用程序通过代理在版本一下查询路由到源数据库,协调器设置版本二并验证复制同步。确认后,代理获取新路由并开始用版本二查询,将流量导向目标数据库,而源分片接收更新以保持回滚能力。整个协调过程在毫秒至多 2 秒内完成,客户干扰不可感知。这一 云原生技术 实现的高效切换保障了系统连续性。
6. 迁移注销
通过清理元数据和停用迁移基础设施结束流程。
平台应用与构建决策
除水平扩展外,Stripe 使用该平台进行分片合并、MongoDB 跨多主要版本升级和租户模型转换。基础投资使工具能服务于超出原始设计的多种场景。
Stripe 内部构建 DocDB 平台而非使用托管服务,源于安全策略执行、可预测性能和多租户支持与强制配额的需求。到 2020 年单个分片达数十 TB 时,公司需要系统化数据移动方法。40% 客户在支付被拒后放弃交易,使得零停机迁移成为必需而非可选。考虑到战略重要性、差异化需求和安全需要,自建 versus 外购决策对 Stripe 具有意义。
|