返回首页

Rust 语言入门:为什么我选择用 Rust 开发 SaaS?

技术
2025-10-24 742 0 2 min

我写 JavaScript 写了七年,写 Go 写了三年。去年开始,我把新项目的核心服务换成了 Rust。

这不是一次技术炫耀,而是一次被逼出来的选择。

起因:一个内存泄漏

我之前的服务用 Node.js 写,跑在一个 2C4G 的机器上。某天凌晨,监控告警:内存占用从 300MB 涨到了 3.8GB,进程被 OOM 杀掉。

排查了两天,发现是一个缓存 Map 只增不减。修复只花了 5 分钟,但那两天让我意识到:动态类型语言的自由度,是用运行时的确定性换来的。

Rust 给我的三样东西

1. 编译期就能发现的错误

rust
fn main() {
    let data = vec![1, 2, 3];
    let first = &data[0];
    data.push(4); // 编译错误:不能在可变借用期间使用不可变借用
    println!("{}", first);
}

这段代码在 JavaScript 里会安静地跑出你意想不到的结果,在 Rust 里根本编译不过。把 bug 从线上移到编译器,这是我最有安全感的部分。

2. 可预测的性能

Rust 没有 GC,内存布局可控。同样的 JSON 处理任务,我用 Node.js 跑需要 180ms,用 Rust 只要 12ms。

对 SaaS 来说,这意味着同样的硬件可以服务更多的用户 —— 或者,同样的用户只需要更便宜的硬件。

3. 优秀的错误处理

rust
use std::fs;

fn read_config(path: &str) -> Result<String, std::io::Error> {
    let content = fs::read_to_string(path)?;
    Ok(content)
}

fn main() {
    match read_config("config.toml") {
        Ok(c) => println!("配置加载成功,长度 {}", c.len()),
        Err(e) => eprintln!("读取失败: {e}"),
    }
}

Result 强制你处理每一种失败。没有「忘记 try-catch」这回事。

什么时候不该用 Rust

说实话,Rust 不适合所有场景:

  • 原型阶段:改一行要等 20 秒编译,创意会被打断
  • 纯 CRUD 后台:用 Go 或 TypeScript 快得多
  • 团队没有 Rust 经验:学习曲线会拖慢交付

我的做法是:用 TypeScript 做边缘层和页面,用 Rust 做核心计算。边界清晰,各取所长。

我的学习路径

  1. 先读《The Rust Programming Language》(官方书,免费)
  2. 用 Rust 重写一个自己熟悉的小工具,比如日志分析脚本
  3. 读 tokio 的 examples,理解异步模型
  4. 最后才碰 Web 框架(我用的是 axum)

不要一上来就写 Web 服务。先用 Rust 写几个命令行工具,把所有权和生命周期的直觉建立起来。

一个最小的 axum 服务

rust
use axum::{routing::get, Router, Json};
use serde_json::json;

async fn health() -> Json<serde_json::Value> {
    Json(json!({ "status": "ok" }))
}

#[tokio::main]
async fn main() {
    let app = Router::new().route("/health", get(health));
    let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}

二十行,一个生产可用的健康检查服务。

结论

Rust 不会让你变成更好的程序员,但它会让你写出更难出错的程序。

如果你正在做一个需要长期维护、对稳定性有要求的服务,值得投入时间学它。如果只是验证想法,先用你最熟的语言。

评论

友善交流,邮箱不会公开

发表评论

未配置人机验证,已启用频率限制与内容过滤