为什么我们把热点服务迁到了 Rust
在网关与序列化这类 CPU 密集、延迟敏感的链路上,我们用 Rust 重写后 p99 延迟下降约 40%,内存占用减半,并彻底告别了 GC 抖动。
一、所有权模型带来的确定性
Rust 的所有权与借用检查在编译期就消除了数据竞争和悬垂指针,让我们敢在高并发热路径上大胆使用零拷贝与无锁结构,而不必担心运行时崩溃。
let buf = Bytes::from(payload); // 引用计数零拷贝
tokio::spawn(async move {
handle(buf).await; // 跨任务共享,无需深拷贝
});
二、渐进式迁移,而非推倒重来
我们没有重写整个系统,而是通过 FFI 把最热的编解码模块先换成 Rust:用 criterion 做基准测试、用 flamegraph 定位热点、用 cargo-fuzz 兜底边界。每替换一个模块都灰度上线、对比指标。
三、收益与代价
收益是延迟与内存的实打实下降;代价是团队的学习曲线和编译时间。但对核心链路,这笔投资非常值。