不要盲目跟风引入 Rust:看清团队维护成本

封面信息图

在当下的技术社区里,Rust 几乎被奉为一种“政治正确”。无论什么技术讨论,评论区总会出现“用 Rust 重写一遍”的声音。从底层操作系统、浏览器引擎,到 CLI 工具、甚至普通的 Web 后台管理系统,似乎不带上 Rust 就显得架构落后。

很多团队受此影响,在业务发展初期就盲目拍板用 Rust(如 Axum、Actix-web)重构原本运行良好的 Web 后端或 CRUD 接口。然而几个月过去后,预想中的“极致性能与零内存故障”并未给业务带来质的飞跃,反而让团队陷入了编译时间漫长、招人极其困难、需求交付严重延期的泥潭。

作为一名看重投入产出比(ROI)的工程师,我们必须理性审视 Rust 的能力边界与适用场景。在绝大多数常规业务开发中,Node.js 和 Go 依然是综合性价比高得多的选择。

业务开发中 Rust 带来的四大隐性成本

Rust 的所有权模型、生命周期机制和无 GC 设计在系统级编程领域确实无与伦比。但一旦将它拉到高频迭代的业务系统场景下,它的设计哲学就会转化为沉重的心智枷锁。

1. 所有权与生命周期的思维内耗

在常规的 Web 业务中,数据流通常是易变的、充满嵌套和引用的。一个简单的业务逻辑——从缓存或数据库取出一个对象,传递给多个异步服务做校验、计算,并在遇到分支时动态修改某些属性——在 Go 或 TypeScript 中只需几十行极其自然的代码。

但在 Rust 中,开发者必须时刻与借用检查器(Borrow Checker)搏斗:

  • 这个引用会不会跨越 await 悬垂?
  • 是否需要引入 Arc<RwLock<T>> 或深度 clone() 来绕过生命周期报错?
  • 为什么闭包捕获的环境变量在多线程分发时报 Send + Sync 约束不足?

为了让编译器通过,工程师往往要花费 50% 以上的时间在内存所有权设计上,而不是专注于业务规则本身。

2. 编译时间对敏捷反馈环的摧毁

对于业务开发而言,“修改代码 -> 触发热重载 -> 浏览器/Postman 验证”的即时反馈循环至关重要。

  • 在 Node.js (Vite / TSX) 中,热重载耗时通常在 50ms ~ 300ms;
  • 在 Go 语言中,编译一个中型单体项目通常在 1 秒左右;
  • 而在一个引入了 Axum、Tokio、SeaORM、Serde 等庞大宏体系的 Rust 后端项目中,一个微小的修改触发增量编译往往需要 10 ~ 30 秒,全新冷编译甚至长达数分钟。

这种长时间的等待会彻底打碎开发者的专注状态,大幅削弱团队的需求交付速度。

3. 业务层生态与 ORM 的繁琐度

Web 业务开发的核心是快速操作关系型数据库。

  • 在 TypeScript 中,Prisma 或 Drizzle 能提供近乎直觉的强类型查询体验;
  • 在 Go 中,GORM 或 sqlx 兼顾了简洁度与高性能;
  • 在 Rust 中,无论是 Diesel 还是 SeaORM,宏的复杂度和类型系统的严苛程度都呈指数级上升。处理一个动态拼接的多条件可选分页查询,在 Rust 中写出的代码量和心智消耗通常是其他语言的 3 倍以上。
4. 人才梯队与招聘断层

熟练掌握 Rust 并能写出高质量异步代码的工程师在市场上极为稀缺且薪资昂贵。当团队需要快速扩招以应对业务爆发时,很难在短时间内招募到即战力。如果让普通的 Java/Node 开发者直接上手 Rust 业务开发,新人在前三个月几乎都在“对抗编译器报错”,试错成本极高。

语言选型的实用 ROI 决策树

不同语言有其各自的黄金甜点区,技术选型应当遵循“业务瓶颈驱动”原则:

选型考量维度Node.js (TypeScript)GoRust
主打场景全栈敏捷开发、BFF 层、AI CLI/Agent高并发微服务、网关、基础后端基础设施、编译器、存储引擎、加解密
I/O 吞吐能力优秀(单机 2w~4w QPS)极佳(单机 5w~10w+ QPS)极致(贴近硬件极限)
开发交付速度极快(★★★★★)很快(★★★★☆)较慢(★★☆☆☆)
内存开销中等(100MB ~ 500MB)极小(20MB ~ 80MB)极致精简(几 MB)
团队上手门槛极低极高
                     [ 你的核心任务是什么? ]
                                ↓
      ┌─────────────────────────┴─────────────────────────┐
      ↓                                                   ↓
[ 业务型 Web API / CRUD / 全栈 ]             [ 底层基建 / 密集计算 / 资源受限 ]
      ↓                                                   ↓
需要极致前后端同构?                             需要极致内存安全与零 GC 停顿?
  ├── 是 ──→ [ Node.js + TypeScript ]              ├── 是 ──→ [ Rust (如 SWC/VectorDB) ]
  └── 否 ──→ [ Go 语言 (简洁高并发) ]              └── 否 ──→ [ Go / C++ ]

务实结论:让凯撒的归凯撒

我们绝不否定 Rust 在系统软件、底层编译器(如 Turbopack、Rolldown、Ruff)、高性能向量数据库(如 Qdrant)以及 WebAssembly 领域的颠覆性价值。在这些领域,Rust 的性能和无 GC 确定性是杀手级的。

但对于 95% 以上由 I/O 驱动、依靠快速验证商业逻辑生存的互联网业务而言,过早引入 Rust 是一种典型的“简历驱动开发(Resume-Driven Development)”。在 Node.js 和 Go 完全能以极低成本支撑业务百万级 DAU 的阶段,把宝贵的开发精力投入在交付业务价值上,才是真正成熟的工程智慧。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐