
作者 | Leela Kumili
譯者 | 張衛濱
Reddit 完成了對其評論后端的重大重構,從傳統的 Python 系統遷移到了特定領域的 Go 微服務,以提高性能和可靠性。這一變化解決了 Reddit 的最高寫入系統中長期存在的延遲和可擴展性挑戰,同時為現代化其他核心模型奠定了基礎。
遷移遵循了一個多階段的策略,旨在保持正確性并最小化用戶中斷。Reddit 工程師首先在 Go 中實現了所有評論讀取端點,并使用 tap-compare 測試方法進行驗證。在這種方法中,一部分實時流量被發送到新服務,將其響應與舊的 Python 系統進行比較,并且只將原始響應返回給用戶。這使得工程師能夠在完全切換流量之前,在生產環境中安全地檢測差異。
寫入操作更為復雜,因為評論創建涉及多個數據存儲:PostgreSQL 用于持久化,Memcached 用于緩存,Redis 用于 變更數據捕獲(change data capture,CDC) 事件。為了防止與生產數據沖突,Reddit 在 tap-compare 測試期間為 Go 服務部署了姊妹數據存儲。這些存儲鏡像了生產環境的模式,但僅用于處理寫入的測試,使團隊能夠在不承擔實時數據損壞的風險下驗證系統的行為。Reddit 一共測試了三個寫入端點,跨越三個數據存儲,創建了 18 個單獨的驗證路徑。
![]()
在 tap-compare 期間對評論后端進行雙重寫入(來源:Reddit 工程的帖子)
遷移也暴露了幾個邊緣案例,例如,早期序列化不匹配意味著 Python 服務最初無法反序列化由 Go 寫入的數據,這通過驗證 CDC 事件消費者與舊服務的對比來解決。數據訪問的差異性也導致了數據庫壓力:Python 單體使用 ORM,而 Go 會直接寫入,產生了更高的寫入放大負載,這通過查詢級優化得到了緩解。此外,在 tap-compare 期間,Python 寫入生產數據與 Go 寫入和比較讀取之間發生了競態條件。工程師通過在運行 tap-compare 之前使用生產派生數據改進本地測試來解決這些問題。
![]()
在雙重寫入后進行 tap-compare 驗證(來源:Reddit 工程帖子)
根據 Reddit 團隊的說法,新架構簡化了評論系統的依賴鏈,同時為下游系統保持了完整的事件傳遞保證。轉向特定領域的微服務還使平臺為進一步分解其他核心服務做好了準備,這些服務是四個核心模型的一部分,幾乎涵蓋了所有用例:評論、賬戶、帖子和子版塊。截至本文撰寫時,這兩個模型,即評論和賬戶,已從 Python 單體完全遷移,而帖子和子版塊的遷移正在進行中。一旦完成,所有四個核心模型將在新的微服務架構下實現現代化。
Reddit 的高級軟件工程師 Katie Shannon 總結了重寫的結果:
與舊的 Python 系統相比,關鍵寫入操作,以及創建、更新和增加端點的 p99 延遲,減少了一半,舊系統之前曾經歷過高達 15 秒的峰值。
社區反饋顯示了更快的評論創建和在高峰流量期間減少的停機時間。Shannon 指出,仔細管理數據一致性和模式演變,解決了并發和 Go 的特定問題。Reddit 基礎設施團隊補充說,Go 的并發性允許以較少的 pod 實現比 Python 更高的吞吐量,使其成為首選方案。
Reddit Migrates Comment Backend from Python to Go Microservice to Halve Latency(https://www.infoq.com/news/2025/11/reddit-comments-go-migration/)
聲明:本文為 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.