把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

Stripe 的零停机数据转移平台以毫秒级流量切换迁移 PB 级数据

作者:Eran Stiller

  • 2025-12-02
    北京
  • 本文字数:1296 字

    阅读完需:约 4 分钟

大小:643.51K时长:03:39
Stripe的零停机数据转移平台以毫秒级流量切换迁移PB级数据

在旧金山 QCon 会议上,Stripe 的主任软件工程师Jimmy Morzaria介绍了公司的零停机数据转移平台(Zero-Downtime Data Movement Platform),这是一种能够进行 PB 级数据库迁移的系统,流量切换通常能够在毫秒内完成。该平台支持 Stripe 的基础设施,每秒处理 500 万次数据库查询,同时保持 99.9995%的可靠性,支持每年 1.4 万亿美元的交易。

 

该平台的迁移过程遵循一个六阶段的蓝图设计,围绕三个原则实现,即保持数据一致性,停机时间比节点故障事件短;最小化对实时查询的性能影响;适应从小型数据集到数十 TB 的分片。



Stripe 的 DocDB 零停机数据转移阶段

 

数据迁移始于名为“迁移注册(migration registration)”的步骤,该步骤会更新路由元数据服务以注册新的目标分片及其键范围。在数据移动发生之前,这一步建立了数据的预期目的地。

 

接下来,在批量数据导入(bulk data import)阶段,使用优化的服务传输主数据集,该服务比标准导入提高了十倍的性能。Morzaria 解释说,团队会重新排序插入操作,从而与 MongoDB 的 B 树存储引擎对齐,通过使用每个分片中最常用的索引对项目进行排序,从而将写入性能提高了 10 倍。

 

在异步复制(async replication)阶段,会有一个专用的复制服务在源和目标分片之间保持双向同步。这一关键阶段会捕获对源数据的持续更改,同时将修改复制回源分片。双向方法允许在出现问题时完全回滚迁移,为财务数据提供关键的安全机制。



零停机迁移中异步复制步骤的架构概览

 

复制完成后,验证服务在流量切换之前会对源和目标分片之间的数据进行全面的正确性检查(correctness check)。这种验证确保了迁移边界的数据完整性。

 

实际的流量切换(traffic switch)步骤代表了平台技术上最复杂的阶段。基于 Morzaria 所说的“版本化门控(versioned gating)”,该机制会协调数据库代理服务、协调器、路由服务和复制服务之间的版本更新。



流量切换阶段基于“版本化门控”,从而能够实现最小的停机时间

 

该过程从客户端应用程序通过版本一的代理查询开始,该代理路由到源数据库,然后,协调器设置版本二并验证复制同步。在确认后,代理会获取新路由,并开始使用版本二进行查询,将流量导向目标数据库,而源分片接收更新以保持回滚能力。整个协调过程在毫秒级到最多 2 秒内完成,使客户难以察觉中断。

 

迁移注销(migration deregistration)通过清理元数据和销毁迁移基础设施来结束整个过程。

 

除了水平扩展,Stripe 还使用该平台进行分片合并、跨多个主版本的 MongoDB 版本的升级和租户模型转换。Morzaria 指出,大量的基础投资使工具能够服务于超出其原始设计范围的场景。

 

Stripe 选择内部构建其 DocDB 平台,而不是使用托管服务,这主要是因为需要保证安全策略执行、可预测的性能以及基于强制配额的多租户支持。到 2020 年,随着单个分片达到数十 TB,公司需要一种系统化的数据移动方法。Morzaria 强调,40%的客户在支付拒绝后会放弃交易,这使得零停机迁移变得至关重要而非可选的功能。因此,鉴于战略重要性、差异化需求和安全需求,自己构建或购买的决策对 Stripe 来说是至关重要的。

 

原文链接:

Stripe's Zero-Downtime Data Movement Platform Migrates Petabytes with Millisecond Traffic Switches

2025-12-02 13:001

评论

发布
暂无评论

推荐一款少见开源的支付类项目(Spring Boot+Shiro+MyBatis+Redis)

北游学Java

Java redis spring mybatis

资讯|WebRTC M96 更新

网易云信

大数据 WebRTC 开发

Rainbond 对接 Istio 原理讲解和代码实现分析

北京好雨科技有限公司

Kubernetes istio PaaS rainbond

音视频开发:FFmpeg时间戳详解

赖猫

音视频 ffmpeg

恒源云(GPUSHARE)_云GPU服务器如何使用FinRL?

恒源云

算法 框架 PyTorch

Apache APISIX 社区双周报 | 功能亮点更新进行中

API7.ai 技术团队

开源 云原生 API网关 社区 Apache APISIX

静态代理模式——时间都去哪儿了

蝉沐风

设计模式 代理模式

后端老司机的跨域之旅

勇哥java实战分享

后端 CORS

金融云原生漫谈(一)|银行业如何快速提升应用研发效能和交付效率?

York

金融云原生漫谈(二)|中小银行破局之道:云原生架构转型全攻略

York

2022开篇之作,Docker与微服务实战教程

编程江湖

2021年度优质创作者评选名单公布!

InfoQ写作社区官方

热门活动

Swift 在手淘商品评价的技术重构与实践

阿里巴巴终端技术

ios swift 移动开发 客户端

「死磕」传统工业软件路径不通 他们给自己造了把梯子

ToB行业头条

Git fork的学习笔记

Changing Lin

1月月更

纯 MongoDB 实现中文全文搜索

MongoDB中文社区

mongodb

Flutter VS React Native,跨端方案大 PK

融云 RongCloud

flutter React Native Discord

创业公司COO:用宜搭落地管理思想,打破数据壁垒|《102个开发者故事》第五期

一只大光圈

低代码 数字化转型 企业管理 钉钉宜搭

常见的跨域场景

郑州埃文科技

数据库 IP 跨域

【MongoDB白皮书】DIRT和复杂性的高成本

MongoDB中文社区

mongodb

java学习中cookie原理

编程江湖

java 编程

肝了三个月Linux内核,面试薪资直接翻番,我才明白TA的重要性!

Yt

c++ Linux服务器开发 Linux内核 驱动开发

定了!皮皮APP助力电子竞技游戏师职业技能标准发布!

联营汇聚

金融云原生漫谈(三)|银行云原生基础设施构建:裸金属VS虚拟机

York

云原生 金融科技 新基建

为什么要避免在 Go 中使用 ioutil.ReadAll?

AlwaysBeta

Go 源码 io Go 语言

青藤:一招制敌!微隔离,让勒索软件不再横行

青藤云安全

堡垒机和防火墙的区别是什么?能防删库跑路吗?

行云管家

运维 网络安全 防火墙 堡垒机

金融云原生漫谈(四)|如何构建高可用、高并发、高性能的云原生容器网络?

York

云原生 金融科技 高性能网络

直播系统聊天技术(六):百万人在线的直播间实时聊天消息分发技术实践

JackJiang

消息推送 即时通讯 IM 直播技术 直播聊天室

防火墙是什么?怎么理解?

行云管家

运维 网络安全 防火墙 堡垒机

流式数据质量监控的技术调研及选型思考

字节跳动数据平台

sql 字节跳动 数据质量 流式数据 flik

Stripe的零停机数据转移平台以毫秒级流量切换迁移PB级数据_大数据_InfoQ精选文章