主要观点:
- 在软件行业 20 多年的经验中,学会了“不要重新发明轮子”和“不要重写正在运行的东西”,但公司最近却违背了这两点来解决可扩展性问题。
- Turso 是基于 SQLite 分支的无服务器数据库,通过控制平面为用户提供小 VM,用户可在其中创建 SQLite 文件并访问或复制。虽单个数据库成本可降为零,但仍需保持 VM 运行,且不同数据库间隔离并非完美。
- 采用 KimStyle 方法确保系统无错,但随着用户增加,新问题不断,如一个客户在几小时内创建约 5000 个数据库时出现数据库创建死锁问题,追踪该问题花费数周。
- 决定尝试 TigerStyle 编码风格,核心是确定性模拟测试(DST),可抽象 I/O 操作并插入模拟器,能重现各种情况,找到潜在问题。
- 决定重写服务器,一方面从头开始使用 DST 重写栈以长期更快更便宜地发现和迭代 bug,另一方面使用 Antithesis 进行外部模拟以测试系统与其他组件的交互,这对于实现大规模多租户至关重要。
- 对于处理 I/O 的复杂代码,决定在基于 DST 的服务器中使用手动创建的带有回调系统的事件循环和同步 Rust,评估了使用异步 Rust(如 Tokio)的直接和间接成本以及固有不确定性。
- 决定从头开始编写大部分云服务,利用 DST 确保大规模多租户是核心设计部分,已在短时间内找到大量 bug 并建立了信心,下周将发布 beta 版本。
- 附录中解释选择 Rust 而不是 Zig 的原因,虽 Zig 能更好控制内存分配,但 Rust 生态更发达,且其借用检查器能提供重要的安全保证。
关键信息和重要细节:
- Turso 控制平面为用户提供小 VM,用户可创建 SQLite 文件并通过 HTTP 访问或复制到自己的服务器或移动设备,单个数据库成本可降为零但需保持 VM 运行,不同数据库间隔离非完美。
- KimStyle 方法依赖开发者小心操作和自动化测试,随着用户增加发现更多问题,如一个客户创建大量数据库时出现死锁问题,追踪困难。
- TigerStyle 的核心 DST 可抽象 I/O 操作并插入模拟器,能重现各种情况,通过生成随机轨迹测试系统。
- 决定重写服务器,从头开始使用 DST 重写栈和使用 Antithesis 进行外部模拟,以实现大规模多租户和发现 bug。
- 评估使用异步 Rust(如 Tokio)的成本和不确定性,包括直接成本(约 5 倍慢)、间接成本(难以控制堆内存分配)和固有不确定性(异步执行器本身可能导致非确定性)。
- 决定从头开始编写大部分云服务,利用 DST 找到大量 bug 并建立信心,下周将发布 beta 版本。
- 附录中解释选择 Rust 而不是 Zig 的原因,包括 Rust 生态更发达、借用检查器的重要性等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。