设计哲学

为什么选择 Rust?为什么这样设计?架构决策的来龙去脉。

为什么是 Rust

站群系统是长生命周期的基础设施,运行时间以年为单位。Rust 的三个核心特性直接对应系统长期运行的核心需求:

子站数据隔离,互不感知

子站是系统里的一等实体:各自独立的模板目录、独立的上传文件目录,数据库层面按站点严格隔离,一个子站的用户看不到、也访问不到其他子站的数据。子站之间要协作,走的是"内容推送、接收方独立审核"这种显式流程,不是共享数据库表意义上的"互通"。

编译期安全 > 运行时校验

rsSites 把安全检查尽可能前置到编译期:SQLx 在编译时校验 SQL 语法和字段类型、Axum 在编译时校验路由参数类型、serde 在编译时生成序列化代码。运行时不是没有防护(限流、认证、文件校验一个不少),但"这个字段名拼错了"这类问题在 cargo build 阶段就能发现,不需要等到上线后从日志里排查。

分层架构

routes 只做参数解析和序列化,services 承载所有业务逻辑。同一份 service 函数被 HTTP handler 和 CLI 子命令共享调用——批量脚本、定时任务、AI 自动化对接的都是同一套业务代码,不存在"Web 版一个逻辑、命令行版另一个逻辑"的问题。

不引入不必要的复杂度

一个站群系统的日常规模通常撑不满一台机器的零头。架构决策遵循"足够好即可"原则:不做微服务、不引入消息队列、不依赖对象存储。单进程 + PostgreSQL + Redis 三板斧解决所有问题——少一个组件,就少一处能出故障、少一处要运维的地方。等规模真正增长、瓶颈真正出现时,再针对实际问题做优化,不为想象中的未来买单。