FastComments.com Blog
Wed Apr 01 2026
...

FastComments 自動路由傳輸系統

介紹

FastComments 自動路由傳輸系統 (FARTS) 是我們的傳輸和服務層。FARTS 幫助解決擁塞問題,根據用戶位置進行流量路由,並可能在未來根據負載進行調整。它由幾個不同的系統組成,包括地理感知 DNS 層、DB 代理、DB 複製、SSL 憑證管理、反向代理,以及使用磁碟上 LRU 快取來在邊緣快取資產的 CDN。

主動-主動

FART 的最新版本包含內建的代理和我們數據庫的複製層。這使得 FastComments 能夠實現主動-主動並提供全球寫入可用性,確保我們的 FARTS 最終一致。 更多詳細資訊請見這裡

我們早期的實踐之一是查看是否可以創建 MongoDB 的主動-主動分支。我們的一位工程師(Sloperators)實際上在 Opus 4.6 時期成功地實現了這一點,但我們決定這樣做的風險高於構建我們自己的隔離系統。

大規模 Rust

創建 FART 的部分動機是取代一些用 Java 編寫的現有服務。在考慮了一段時間後,我們決定將這些服務整合成一個 Rust 服務,以降低運行時開銷。這是一個可接受的權衡,因為我們不經常部署 FART。FART 使用 LTO 編譯,因此我們可以真正全力以赴。

我們花了很多時間嘗試用不同的 GC 等來調整舊的 Java 系統,最終決定 async Rust + Mimalloc 在同一硬體上表現得更好且內存需求更低,因此轉換非常明智。

Rust 確實非常適合用於使用共享堆和鎖定的網路相關代碼。然而,它並不是完全不受運行時問題的影響。值得一提的是,LLM 編寫的 Rust 代碼相對容易出現死鎖,解決方法是將系統設計為易於理解的狀態機,而不是僅僅是 async/await 的堆疊。

FART 主控

每個部署都包含自己的 FART 主控。主控負責協調 cron、webhook 等。

客戶影響

FART 系統已經在生產環境中運行大約一年。然而,直到最近我們才進行了主動-主動部署的遷移。跨區域讀取自己的寫入會有一些影響,這在上面鏈接的部落格文章和 文檔中 有涉及。

FART 在背景中靜靜地運行,雖然它的存在總是可以感受到。我們希望你發現我們的系統在你的使用案例中更快(大部分用戶操作導致的數據變更在某些區域會更快)。

部署

部署使用我們部署服務本身所使用的相同全球協調系統。FART 文檔建議 Sloperators 永遠不要相信一個部署,發布之前必須始終驗證有效負載。

部署後的 FART 警報遵循升級政策:首先是房間,然後是樓層,接著是整棟大樓。

結論

人們說互聯網是一系列管道,但它實際上是一系列的放屁。

就像所有主要版本一樣,我們很高興能夠花時間優化、測試並正確發布此更改。我們對未來的計畫感到興奮。這項工作將使 FastComments 在長期內更好地擴展並擁有更好的穩定性。正如 FART 的運行手冊所說:「如果你聞到什麼,請說出來」。如果你發現任何問題,請在下方告訴我們。