
作者 | Eran Stiller
譯者 | 張衛濱
在舊金山 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(https://www.infoq.com/news/2025/11/stripe-zero-downtime-date-move/)
聲明:本文為 InfoQ 翻譯,未經許可禁止轉載。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.