SQLite and Litestream: A Minimalist Approach to Durable Workflows

"durable execution"(持久化执行)的概念经常与对沉重、持久化基础设施的需求混淆在一起。然而,对于大量的应用程序——特别是涉及 AI agents 和实验性工作流的应用程序——实际需求并不是一个庞大的数据库集群,而仅仅是一种可靠的持久化工作流状态的方法。

最近开发者社区中的讨论(由于意识到 Postgres 可以处理持久化执行而引发)将对话推向了更深层次:对于许多用例,SQLite 不仅仅是足够的,而且是最佳选择。

The Architecture of Minimalist Durability

其核心在于,持久化执行意味着如果一个进程崩溃或服务器重启,工作流可以从中断的地方恢复。这需要一个执行日志,其中记录了进度并持久化了历史记录。虽然计算层可以保持廉价且可丢弃(例如 micro-VMs 或 containers),但状态必须是持久的。

SQLite 非常契合这一模型,因为它提供了事务性的持久性,而无需承担独立数据库服务的运维开销。通过消除与客户端-服务器数据库相关的网络跳转和复杂的控制平面,开发者可以将状态保持在运行时本地。

Solving the Portability Problem with Litestream

在生产环境中使用 SQLite 的主要批评之一是“本地文件”问题:如何备份、迁移或检查存储在特定磁盘上的数据库?

Litestream 通过将 SQLite 的变更异步流式传输到 S3 兼容的对象存储中解决了这个问题。这创建了一个混合模型,应用程序可以享受本地数据库的低延迟,同时维护一个基于云的备份用于恢复和检查。

需要注意一个关键的权衡:由于 Litestream 的复制是异步的,突发的卷故障可能会导致最近写入的数据丢失。对于高风险的金融系统,这是无法接受的;但对于 AI agents 和实验,这通常是一个可以接受的风险。

Why This Model Excels for AI Agents

AI 生成的工作流通常是爆发式且实验性的。为每个 agent 或租户分配其独立的、自包含的 SQLite 数据库具有以下几个优势:

  1. Fault Isolation: 一个 agent 的状态损坏或故障不会影响其他 agent。
  2. Simplicity: Agents 可以部署在一组微型服务器中,每个服务器管理自己的状态文件。
  3. Token Efficiency: 正如社区贡献者所指出的,LLMs 非常擅长编写 SQL。允许一个 agent 查询 SQLite 表中的特定行,比强制它使用 jqgrep 等工具解析大型 JSON 或 Markdown 文件要高效得多(在 token 使用上)。

The Counter-Argument: When to Reach for Postgres

尽管 SQLite+Litestream 技术栈具有优势,但它并不是万能的解决方案。在以下几种场景中,网络数据库(如 Postgres)仍然是正确选择:

  • High Availability: 当零数据丢失是硬性要求且异步复制不足以满足需求时。
  • Shared Scalability: 当不同机器上的多个进程必须并发地修改相同数据时。
  • Complex Schema Evolution: SQLite 有限的 ALTER TABLE 能力可能会使模式迁移变得繁琐,通常需要创建临时表来移动数据。
  • Strict Typing: 来自 Postgres 的开发者经常发现 SQLite 灵活的类型系统(manifest typing)在数据完整性方面是一种退化。

Community Perspectives and Alternatives

关于“嵌入式 vs. 服务器”数据库的争论突显了架构哲学的分歧。一些人认为,从像 Postgres 这样的重量级系统开始可以避免后期的“迁移税”——这是一种为了防止未来瓶颈而进行的“明智的过度工程”哲学。

其他人则指向了基于不同工作负载的替代嵌入式工具:

  • DuckDB: 推荐用于 ETL 和分析任务,其性能超过了 SQLite 的能力。
  • Temporal: 一个更强大的编排引擎,它在本地开发时使用 SQLite,但在生产环境中扩展到完全分布式的系统。
  • Cloudflare Durable Objects: 一个大规模生产系统的例子,它利用了类似 SQLite 的变体来在边缘侧管理状态。

Conclusion

对于许多开发者来说,最明智的默认选择是尽可能减少基础设施的使用。一个本地 SQLite 数据库配合 Litestream 备份到 S3,为现代 agentic workflows 提供了一个持久、可检查且高性能的基础。虽然它可能无法在单个文件上扩展到数百万个并发写入者,但对于隔离的 agent 状态世界,它通常就是你所需要的全部。

Sources