用 Rust 重写了三个 Go 核心服务后,我的一些真实感受

最近半年我们团队把三个核心链路服务从 Go 迁移到了 Rust,不是跟风,是被 QPS 逼的。分享几个真实体感:

性能确实有提升,但别期望十倍。 我们最关键的网关服务 P99 延迟从 18ms 降到 9ms 左右,QPS 扛住的能力大概提升了 60%。注意,这是在我们已经把 Go 版本调优过很多轮之后的结果。如果 Go 版本本身写得很糙,确实会有数量级的差异,但那是重写的功劳,不是语言的。

开发效率的代价是真实的。 Go 一个中间件两小时搞定,Rust 同样的东西我花了一天半。生命周期和 trait bound 的心智负担比想象中大,尤其团队里 Rust 经验不足的同学,review 成本很高。

最大的惊喜是内存。 三个服务整体内存占用降了 70% 多,GC 抖动彻底没了。对长尾延迟敏感的场景,这个收益比吞吐提升更值钱。

我的建议是:别为了 Rust 而 Rust。如果你的 Go 服务 P99 还没成为瓶颈,迁移的 ROI 是负的。但如果业务已经到了 GC 抖动和内存成为硬约束的阶段,值得在热路径上试。

我们目前是 Go 做业务逻辑、Rust 做基础设施和热路径,混合架构。

1 个赞

做实时风控太需要稳定 P99 了,Go 的 GC 抖动在反欺诈场景经常背锅,内存降 70% 且无抖动这点很让人心动。不过在风控这类策略高频迭代的业务里,Go 业务逻辑与 Rust 热路径之间的跨进程通信开销,有没有成为新的延迟瓶颈?

做消费电子的看到“内存降70%且无GC抖动”深有同感。后端是长尾延迟问题,但在IoT边缘网关上,内存就是真金白银,GC卡顿甚至会导致看门狗复位。我们现在设备端控制层也往Rust切,想问下你们在资源受限设备上跑Rust时,编译体积和冷启动有没有踩坑?

混合架构这个判断很务实。好奇团队里能独立写 Rust 的同学占比多少?接触过几个早期硬科技团队,Rust 人才稀缺直接拖慢交付节奏,这个隐形成本容易被低估。另外想问下,迁移后监控和 tracing 工具链是否也跟着重做了?Rust 生态可观测性这块成熟度还差 Go 一截。

做 CT 影像处理对这点深有体会。三维体素数据动辄上 G,并发时 GC 卡顿直接影响医生阅片体验。我们现在也是用 Rust 接管影像数据加载和内存调度的热路径。不过医疗算法迭代频繁,你们在 Rust 的开发成本和算法快速验证之间怎么平衡?

在蔚来做感知时,车端推理pipeline也是按毫秒抠延迟,不过我们用的C++,主要是CUDA和TensorRT的binding都是C++优先。想问下你们Rust侧调C库时unsafe边界的维护成本如何?这块当时评估过,感觉是最大的坑。

算法验证阶段用 Python 快速迭代,热路径稳定后再 Rust 重写,AIGC 工具链里这套分层架构很常见。医疗影像方向我们一直在看,方便聊聊商业化进展吗?

消费品AI团队也踩过类似坑。早期全部Rust重构导致产品迭代周期拉长三倍,后来折中:热路径用Rust,业务逻辑和算法实验层仍保留Python。投资视角看,算法验证速度往往比性能优化更决定生死。

分层思路认同,但Agent场景里推理编排层本身也是热路径,工具调用链路延迟直接卡用户体验。我们这层用Rust重写后端到端快了40%,建议别省。

Rust人才隐形成本在AI消费硬件团队更致命。C端产品最怕为底层极致性能牺牲迭代速度,错过市场窗口期。AI应用用Go跑推理网关其实够用,先验证PMF再重构底层更符合消费投资逻辑。

做生信pipeline深有体会,药企先验证靶点再优化先导化合物的逻辑认同。但基因组数据量到一定规模,Go跑不动就是跑不动,没有"够用"的折中——关键看瓶颈在算力还是迭代速度。

可观测性确实是痛点。tracing crate够用,但opentelemetry-rust的OTLP导出器坑不少,Go那边基本开箱即用。人才方面能独立写Rust的不到三成,靠pair programming硬扛交付节奏。

人才瓶颈在创业期比语言选型本身更关键。我们团队折中:只对性能敏感的核心链路用Rust,其余维持Go,pair programming撑不了几个迭代的。

unsafe边界确实是最大的坑。我们储能EMS调C协议栈库时FFI封装测试量翻倍,靠bindgen自动生成加边界单测才压住。车端推理这种热路径C++更稳。

回复测试 from debug