
作者 | Patrick Farry
譯者 | 張衛濱
2025 年,Patreon 面臨了一個經典的工程挑戰,那就是如何在為超過 1000 萬名付費會員持續交付新功能的同時,重建支撐這些服務的底層基礎設施。Patreon 工程團隊在其工程博客上發布了文章“年度回顧:來自 12 個項目的經驗教訓”,詳細記錄了這一過程。
Idea Link 在 2025 年 5 月發布了一份關于軟件開發真實成本的報告,該報告顯示,初始軟件構建僅僅是“冰山一角”,在軟件的整個生命周期中,50% 至 80% 的成本實際上都花在了維護上。Patreon 最近發布的這份年度回顧正是這一經濟現實的生動例證。面對 30 多萬名活躍內容創作者和數百萬訂閱用戶,該平臺 2025 年的工程主線并非新功能開發,而是完善性維護(perfective maintenance)與存量系統演進(brownfield evolution)。這篇回顧詳述了 12 個重大項目,并提煉出三大核心架構主題:韌性遷移模式、面向基數擴展的數據模型重構,以及分布式系統中的一致性權衡。
在將 50TB 的生產數據從自管理的 EC2 MySQL 遷移至 Amazon Aurora 的過程中,Patreon 無法承受傳統“整體遷移”(lift-and-shift)方式所帶來的停機風險。團隊采用了一種防御性遷移策略,即在保留舊有 EC2 集群作為故障安全回退路徑的同時,建立向新 Aurora 集群的復制流。事實證明,這種架構方面的冗余至關重要,當 Aurora 的 general.log 中一個冷門配置意外引發新主庫延遲激增時,團隊立即觸發回切機制,無縫切換回了 EC2 路徑,保障了系統的可用性。類似地,在移除一個深陷多年技術債務的舊版 React Router 時,團隊采用了守門人(Gatekeeper)模式。由于缺乏對該遺留代碼的專業級知識,工程師首先構建了專門的可觀測性和功能開關(feature-flagging)基礎設施。這使得他們能夠逐步將流量路由至新的 Next.j 架構,在確認功能對等后,才最終下線舊路由器。
另外,還有大量工程投入用來打破限制產品發展的剛性 1:1 數據關系。例如,Multiple Podcasts 項目迫使團隊重構了沿用十多年、默認“每位創作者對應一個 RSS 源”的核心身份模型。在啟動任何前端工作之前,工程師必須先在后端數據庫結構中將 feed 實體與 user 實體解耦。 在另一個項目中,“訂閱贈送”功能的引入打破了計費引擎中原有的二元狀態假設(即用戶要么有訂閱,要么沒有)。為此,架構師重新設計了計費狀態機,使其能夠支持并發的訂閱狀態,例如,某名用戶可同時擁有一個自費的個人訂閱和一個他人贈送的訂閱。這一變革實質上將系統從單一狀態模型升級為分層權益模型(layered entitlement model),為更靈活的訂閱場景奠定了基礎。
最后一個核心主題聚焦于在分布式系統中主動選擇一致性方面權衡。在 Patreon 的回顧文章中,明確引用了 CAP 定理,并描述了多個優先保障一致性而非吞吐量的場景。例如,在 Autopilot 營銷引擎中,數據不一致的風險被視為不可接受。團隊因此放棄了高吞吐的批處理模式,轉而采用基于收件人的原子事務模型。該設計雖然犧牲了單條記錄的處理速度,但確保了數據庫寫入與發送郵件操作之間的一致性,徹底消除了“幽靈重試”問題。此外,為提升創作者數據分析的靈活性,團隊還實施了轉換層模式(Transformation Layer)。該層充當面向前端的后端(BFF,Backend for Frontend),將原始數據獲取與 UI 展示邏輯解耦,并作為數據清洗與標準化的唯一可信源(single source of truth)。
Architectural Lessons From Patreon's Year in Review(https://www.infoq.com/news/2025/12/patreon-2025-review/)
聲明:本文為 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.