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