返回

文章详情

分布式 SQLite 的十二年

Hacker News2026年10月24日 01:16

在2014年9月,我发布了一篇短文,宣布了 rqlite 。这个想法很简单:将 SQLite 放在 Raft 日志之前,并将每次写入复制到一个集群中,以便节点的丢失不会导致数据的丢失。源代码在那个周末上传到了 GitHub。就我所知,这是第一个将 Raft 和 SQLite 结合在一起的开源系统。其他人没有这样做,几年间也没有人尝试。今天,“分布式 SQLite”已经成为一个类别,其中有十几个项目,其中一些获得了风投,两个被收购。由于现在撰写该类别文章的人倾向于从2021年开始叙述这个故事,我想我应该写下从2014年开始的版本。我参与了整个过程。2014年:rqlite 需求是具体的。我参与的一个集群系统需要少量的关系存储,而哪个节点应该持有它的问题没有好的答案。用一致性协议复制 SQLite 解决了这个问题。我们在工作中走了另一条路,但我继续构建 rqlite,因为问题是普遍的,解决方案是简单的。第一个版本使用了 goraft ,这是 InfluxDB 和 etcd 当时使用的相同库(我大约在同一时间加入了 InfluxDB,成为核心开发者)。在2016年初,我将其替换为 Hashicorp 的 Raft 实现,rqlite 仍然使用这一实现。最重要的设计决定是在那时做出的,且从未改变。rqlite 是一个 CP 系统。写入必须通过领导者,大多数人必须确认,而分区少数拒绝写入。其他一切,HTTP API ,读取一致性级别 ,快照等,都是基于这一点。2014年之前,以及与其并行的事情 有两件事值得提及以保持诚实。Expensify 多年来一直在其自己的基础设施中使用 Paxos 风格的协议复制 SQLite;他们在2016年以 Bedrock 的名义发布了它。ActorDB 是一个 Erlang 系统,每个“演员”都有自己的 SQLite 数据库,由 Raft 复制,出现在与 rqlite 大约相同的时间。这两者在其起源之外并未得到广泛采用,但这两个项目表明这个想法是存在的。rqlite 的作用是使其成为任何人都可以运行的独立、通用、开源的东西。2017年:dqlite Canonical 构建了 dqlite,以便为 LXD 和后来的 MicroK8s 提供一个嵌入式的复制存储,而无需运行 etcd。马克·沙特尔沃思实际上曾经给我打过一次电话,我们聊过,希望 rqlite 能够成功,但它从未完全适合。dqlite 开始于 Go ,后来用 C 及其自己的 Raft 库重写。它是与 rqlite 在意图上最相似的项目,主要区别在于包装:dqlite 是一个嵌入的库,rqlite 是一个你运行的服务器。Canonical 的需求是他们产品中的数据库:而我的需求是任何产品旁边的数据库。2021年:Litestream 和方法的变化 本·约翰逊(我在 InfluxDB 工作时与其合作)在2021年初发布了 Litestream 。Litestream 根本不使用一致性。它监视 SQLite 的 WAL 并将其流式传输到 S3 ,几乎没有成本地为单个节点的 SQLite 数据库提供灾难恢复。本的论点是,大多数应用程序不需要集群;它们使用一台机器,且需要一种在机器故障时进行恢复的方法。他在许多应用程序上是对的,接下来几年的“SQLite 足够”运动,借助博客文章和会议演讲,很大程度上归功于这个论点。Litestream 和 rqlite 回答了不同的问题。Litestream:如果机器死了怎么办?rqlite:如果机器死了,我不能等到恢复怎么办?第一个问题更为常见,第二个是人们来找 rqlite 时所面临的问题。Fly.io 在2022年雇佣了本并发布了 LiteFS ,它在文件系统级别复制 SQLite,使用来自 Consul 的租约。这是第一次尝试将复制的 SQLite 作为平台功能,而不是单独部署的东西。最后的变化是,Litestream 启发了 rqlite 在处理 SQLite WAL 时采用的 v8.0 方法。2022年:分支和扩展 2022年的两个项目采取了 rqlite 和 Litestream 都没有的方式。cr-sqlite 将 CRDTs 添加到 SQLite 作为扩展,以便多个写入者可以在没有领导的情况下分歧和合并。这是设计空间的 AP 角落,适合本地优先的应用程序,而 rqlite 的 CP 保证可能成为障碍。libSQL 分支了 SQLite 本身。ChiselStrike,后来改名为 Turso ,希望在 SQLite 项目内更改一些内容,而该项目并不接受外部贡献,也不会进行更改。在这个分支上,他们构建了一个在边缘具有副本的托管服务。Turso 通过这一方式获得了风险投资,而在2026年,Supabase 收购了他们。与此同时,SQLite Cloud 出现,提供使用 Raft 复制的托管 SQLite。这是最接近 rqlite 最初设计的项目,包装在一个云服务中。2022年及以后的平台 Cloudflare 在2022年宣布了 D1,将 SQLite 作为其边缘网络内的无服务器数据库,随后将 SQLite 存储置于 Durables Objects 内。

阅读全文 →

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

☕请我喝杯咖啡