我们的转写 SaaS 七天内从 Rails 迁到 Rust,没有人被强制退出登录
SoundScript.AI 能把音频转成 99 种语言的文字。它的 Rails 应用把网站、后台任务和 Redis 都挤在一台小服务器上,已经触到上限。我们用 Rust 重写了它,逐页与旧应用比对,并在大约四分钟的窗口内完成了生产环境切换。
- 客户
- Envixo
- 平台
- Web 应用与移动端 API
- 行业
- AI 与 SaaS
- 上线
- 2026
挑战
这个 Rails 8.1 应用能用,但 Puma、Sidekiq、Redis 和 PostgreSQL 共用一台只有 1.9 GB 内存的服务器。负载一高,页面要好几秒才响应;2026 年 7 月,后台任务更是卡死了五天。
我们构建了什么
这是产品的彻底重写,不是原型:99 种语言的网站、转写流水线、AI 摘要与对话、各类导出、计费、移动端 API 和管理控制台。
相同的 URL 与接口约定
每个本地化页面、webhook 路径、移动端 API 接口和存储桶都保持原样,因此链接、应用和集成照常工作。
没有人被退出登录
Rust 应用会读取 Rails 的会话 cookie 和原有的密码哈希,所以用户在切换过程中始终保持登录。
数据经过核验,而非想当然
最后一次复制完成后,我们比对了新旧数据库中账号、转写稿、用量和订阅的记录条数与校验和:完全一致。
一套对等性测试装置
涵盖 11 类用户、四种语言的 1,126 次页面请求,39 次表单提交和 343 次管理后台请求,在两个应用上重放并逐一比对。
整个产品
用 Whisper 和 Azure 转写,实时状态,AI 摘要与对话,TXT、SRT、DOCX 和 PDF 导出,Stripe 与 Google Play 计费,以及一个管理控制台。
一条安全的退路
切换后旧服务器原封不动保留了两周,因此回滚只需改一次 DNS。
工程成果
上线前在一台共享机器上做压力测试测得:绝对数值仅供参考,比例关系成立。
- 生产环境在大约四分钟的窗口内完成切换
- 切换后在生产环境逐一验证了注册、上传、实时状态、下载、AI、API 和管理后台
- 压力测试发现了一个连接池缺陷,上线前已修复
- 99 种语言,含从右到左的 PDF
技术
- Rust
- axum
- PostgreSQL
- Typst
- OpenAI Whisper
- Azure Speech
- Stripe
- Kubernetes