老實說,當我們談論將服務遷移到 Rust 時,大家都會想像同一件事:液態閃電般的延遲、CPU 圖表斷崖式下跌,以及單一伺服器突然能處理一個小型歐洲國家的流量。
Momento 花了三年多時間,將其服務從 Kotlin 重寫為 Rust。他們原本預期能獲得原始速度,而實際上得到的卻是工程心智的重大升級。
以下就是放棄 JVM 改用螃蟹表情符號後,實際發生的情況。
1. 編譯器是你積極的結對程式設計師
在 Kotlin 中,你可以把 account_id 和 user_id 互換,因為它們都是字串。你的 IDE 不會在意,審查者也可能漏掉它,結果在凌晨兩點生產環境爆炸。
在 Rust 中,編譯器會把你當成犯罪現場的嫌犯。它強迫工程師宣告自訂型別並明確處理參考,整類別的錯誤在還沒觸及 Pull Request 之前就被消滅。
[ 你的大腦 ] -> 「我只是快速分享這個變數而已...」
[ 借用檢查器 ] -> 「除非我死。」
是的,學習曲線看起來像垂直的牆。但在筆電上跟編譯器搏鬥,遠比在生產環境中跟記憶體洩漏搏鬥好得多。
2. 劇情反轉:Rust 不會自動修復糟糕的程式碼
如果你用 Python 寫出糟糕的演算法,它會很慢。如果你用 Rust 寫出糟糕的演算法,它會安全地、並行地、漂亮地慢。
Momento 的第一次 Rust 重寫並沒有神奇地降低延遲。原因在於程式碼仍在做愚蠢的事,例如在主要請求路徑中反覆為指標配置動態字串記憶體。
他們仍然必須拿出火焰圖和 Criterion 來修復糟糕的鎖定設計並分析熱路徑。Rust 會阻止你射自己的腳,但它不會幫你寫程式碼。
3. 真正的亮點:吞吐量與雲端帳單
雖然延遲沒有立即下降,但單一執行個體的吞吐量卻大幅提升。
Momento 從每秒處理 20,000 個請求,提升到單一執行個體每秒處理 100,000 個請求。
傳統擴展方式:「多丟幾台 AWS 執行個體上去!」
Rust 的擴展方式:「我們刪掉了 80% 的伺服器,應用程式還是沒事。」
當你是一家基礎設施公司時,這種資源效率會讓財務主管喜極而泣。事實上,他們後來選擇 Rust 來開發一個原本並不注重效能的工作流程服務,原因只是因為他們喜歡明確的程式碼與一致性。
4. 如何採用 Rust(而不解雇你的團隊)
Momento 並沒有在第一天就重寫整個核心基礎設施。他們從小處開始:
- 他們建立了一個小型的內部 CLI 工具。
- 他們遷移了一個效能關鍵的熱點。
- 他們大力依賴一位已經理解生命週期與非同步模式的「Rust 大師」,以避免其他團隊成員因為編譯器錯誤而哭泣。
結論
Rust 不是能修復懶散工程的神奇效能引擎。它是一個工程安全網。它讓你的團隊有信心去實驗、重構與推送變更,而不必一直擔心一切即將崩壞。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.