让我们实话实说。当我们谈论将服务迁移到 Rust 时,我们所有人脑海中浮现的都是同一幅画面:液态闪电般的延迟、CPU 曲线直线下降,以及单台服务器突然能承载一个小欧洲国家的流量。
Momento 花了三年多时间将其服务从 Kotlin 重写为 Rust。他们原本期望获得原始速度,但实际得到的却是工程理智的巨大升级。
以下是抛弃 JVM 改用螃蟹表情符号后真正发生的事情。


1. 编译器是你强势的结对程序员

在 Kotlin 中,你把 account_id 和 user_id 搞混了,因为它们都是字符串。你的 IDE 不在乎。你的审查者也漏过了。生产环境在凌晨 2 点爆炸。
在 Rust 中,编译器对待你就像对待犯罪现场的嫌疑人。通过强制工程师声明自定义类型并显式处理引用,整个类别的 bug 在触及 Pull Request 之前就被蒸发了。

[ 你的大脑 ] -> "我只是快速共享一下这个变量……"
[ 借用检查器 ] -> "除非我死了。"

是的,学习曲线看起来像一面垂直的墙。但在笔记本上与编译器搏斗,远比在生产环境中与内存泄漏搏斗要好得多。


2. 剧情反转:Rust 不会自动修复糟糕的代码

如果你用 Python 写了一个糟糕的算法,它会很慢。如果你用 Rust 写了一个糟糕的算法,它会安全地、并发地、漂亮地慢。
Momento 的第一次 Rust 重写并没有神奇地降低延迟。为什么?因为代码仍在做一些愚蠢的事情,比如在主请求路径中反复为指标分配动态字符串内存。
他们仍然需要拿出火焰图和 Criterion 来修复糟糕的锁设计并分析热点路径。Rust 阻止你朝自己的脚开枪,但它不会为你写代码。


3. 真正的炫耀:吞吐量与云账单

虽然延迟没有立即下降,但实例吞吐量却大幅飙升。
Momento 从每秒处理 20,000 个请求提升到单实例处理 100,000 个请求。

传统扩展方式:“往里面扔更多 AWS 实例!”
Rust 扩展方式:“我们删掉了 80% 的服务器,应用依然正常。”

当你是一家基础设施公司时,这种资源效率会让财务主管喜极而泣。事实上,他们后来为一个甚至不注重性能的工作流服务选择了 Rust,只是因为他们喜欢显式的代码和一致性。


4. 如何在不解雇团队的情况下采用 Rust

Momento 并没有在第一天就重写整个核心基础设施。他们从小处着手:

  1. 他们构建了一个小型内部 CLI 工具。
  2. 他们迁移了一个性能关键的热点。
  3. 他们严重依赖一位已经理解生命周期和异步模式的“Rust 大师”,以防止团队其他成员因编译器错误而崩溃。

总结

Rust 不是一个能修复懒惰工程的神奇性能引擎。它是一个工程安全网。它让你的团队有信心去实验、重构和推送变更,而不必一直担心一切即将崩溃。