深入了解我们新的大规模多租户架构

主要观点:

  • 在软件行业 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 生态更发达、借用检查器的重要性等。
阅读 27
0 条评论