
2026/10/24 10:16
分散型の SQLite が 12 年
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
元のサマリーが具体的なタイムラインの詳細を欠き、rqlite と関連プロジェクト間の主要な文脈的な対比を省略しており、「Key Points List」によって完全に支持されていない採用に関する推測を含んでいるため、改訂版は以下の通りです:
2014 年 9 月にリリースされた rqlite は、SQLite を Raft 合意プロトコルと組み合わせてクラスター全体に書き込みの複製を行い、ノードの障害後もデータの存続を確保するオープンソースでセルフホスト可能な関係型データベースです。初出以来、rqlite は「書き込み操作は指定されたリーダーノードを経由し、多数派からの承認が必要である」という核心的な設計決定を採用しており、2014 年以降変更されていません。この特性により、rqlite はパーティション発生時を書き込みを拒否する CP システムとなっています。このリーダーベースのアーキテクチャは、CRDT ベースのシステム(例:cr-sqlite)や単一ノード回復ツール(例:Litestream で、合意なしに S3 に SQLite WAL をストリーミングして障害復旧を行うもの)など、新しいトレンドとは明確に区別されます。関連プロジェクトとして Canonical の dqlite(コンテナ向けの埋め込み式複製ストアであり、当初は Go で実装されその後 C に移行しカスタム Raft ライブラリを採用)や Fly.io の LiteFS(Consul レーシスを活用してファイルシステムレベルで SQLite を複製する)などが登場しましたが、ベンダーロックインのない堅牢で故障許容性の高い複製を求めつつあるユーザーにとって、rqlite は依然として重要な選択肢です。開発が 8 年以上経過し、rqlite の基盤となるインフラストラクチャの概念は大きく成熟しており、Cloudflare の D1 や Turso(SQLite をフォークしたか、ホストされたエッジレプリカサービスを提供した)といった商用エコシステムに対する透明性の高い代替手段として機能しています。業界が「自分で動作させるもの」(オープンソースプロジェクト)から「購入するもの」(マネージドサービス)へと移行しつつある一方で、rqlite はベンダー依存なしで完全に理解可能であるセルフホスト可能な故障許容型の関係型データベースとして引き続き機能しています。
本文
分散型 SQLite の 12 年:rqlite の誕生と進化
記事の背景と主旨
- 著者は 2014 年に rqlite の紹介記事を公開し、これが Raft と SQLite を組み合わせた最初のオープンソース・システムであることを明かした。
- 当時、この分野には誰も関心を示さず、数年間は追随するプロジェクトもなかったが、現在は「分散型 SQLite」カテゴリに十数件のプロジェクトが存在する。
- いくつかのプロジェクトはベンチャーキャピタルによる資金調達を受け、2 つは買収されている。
- 記事は現在の流れではなく、2014 年からの歴史的経緯から物語を開始することを意図している。
2014: rqlite の誕生と設計思想
開発の動機
- 当時勤務する
で運用していたクラスター化システムにおいて、少量の関係性データベース(RDB)ストレージが必要だった。jut.io - しかし、どのノードにデータを保持すべきかという問いに対する明確な答えはなく、この課題を解決する必要があった。
- コンセンサス・プロトコルを用いて SQLite を複製することで、ノード喪失によるデータ損失を防ぐ解決策を見出た。
技術的進化と設計決定
- 初期バージョンでは
ライブラリを使用していた(InfluxDB や etcd でも採用)。goraft - 2016 年初頭には、HashiCorp の Raft 実装へ移行し、現在もこの実装が使用されている。
- 最も重要な設計決定として、rqlite は CP システムであることが確立された。
- 書き込みはリーダーを経由する。
- 多数派による承認が必要であり、少数派は書き込みを拒否する。
- HTTP API、読み込みの整合性レベル、スナップショットなどの全ての要素がこの原則から派生している。
rqlite の果たした役割
- 類似のアイデア(Expensify の Bedrock、ActorDB)も存在したが、組織外での広範な採用はなかった。
- rqlite が果たしたのは、誰でも実行可能な独立した汎用的なオープンソース・プロジェクトとしてこの実現を成し遂げた点にある。
2017: dqlite の登場と対比
Canonical との協力
- Canonical は LXD および後の MicroK8s で、etcd を使用せず埋め込み型の複製ストレージを実現するために dqlite を構築した。
- Mark Shuttleworth から直接連絡を受け、rqlite の実用性について話し合ったが、完全な適合はなかった。
- dqlite は Go で始まり、後に独自の Raft ライブラリを持つ C 言語への再実装に進んだ。
rqlite と dqlite の違い
- 意図としては最も類似したプロジェクトだが、主な違いはパッケージングにある。
- dqlite: 埋め込み可能なライブラリ(製品内組み込み向け)。
- rqlite: 実行するサーバー(任意の製品の外側へ配置)。
2021: Litestream とアプローチの変化
Litestream の概要
- InfluxDB で共働した Ben Johnson が 2021 年初頭に公開。
- コンセンサス機構を使用せず、SQLite の WAL を監視して S3 にストリーム送信することで災害復旧を実現。
- 単一ノードに対するバックアップ手段として「ほぼコストゼロ」な解決策を提供。
異なる問いへの答え
両者は異なる問題意識に基づいている:
- Litestream: マシンが故障した後の復旧(災害対策)。
- rqlite: マシンが故障し、かつ即時復旧が必要な場合の可用性確保。
前者が一般的だが、後者のニーズを持つ人々には rqlite が適している。
影響と展開
- Fly.io は Ben を招致し、Consul のリースを用いたファイルシステムレベル複製の LiteFS をリリース。
- Litestream のアプローチは、rqlite バージョン 8.0 で採用された SQLite WAL 処理に多大な影響を与えた。
2022:フォーク、拡張、プラットフォーム化
新しいアプローチの出現
2022 年以降、rqlite や Litestream が採らなかった以下の二つの方向性が生まれた:
- cr-sqlite
- SQLite への拡張として CRDT を追加。
- リーダーなしで複数の書き込み主体が分岐・再統合可能(AP 領域)。
- ローカスファーストなアプリケーションに適している。
- libSQL (ChiselStrike / Turso)
- SQLite そのものをフォーク。
- ホスト型サービスとしてエッジにレプリカを持つアーキテクチャを採用。
- ヴェンチャー・フィナンシングを受け、2026 年に Supabase に買収された(Turso)。
クラウドネイティブ化とプラットフォームへの進化
- SQLite Cloud: Raft による複製された SQLite を提供したホスト型サービス(rqlite の初期設計に近いアプローチ)。
- Cloudflare D1 / Durable Objects: エッジネットワーク内のサーバーレスデータベース、および管理型製品としての複製 SQLite。
- この流れは、「自分で実行するもの」から**「購入するもの」**へと市場を進化したことを示す。
12 年間が示す結論
3 つの核心的な発見
著者は以下の 3 点を強調している:
-
コアのアイデアは正しかった
- 「ストレージエンジンとしての SQLite に外部から複製機能を追加する」というアプローチは、少なくとも 8 つの異なるチームによって再発明された。
- これを止めるべきだとの理由は見つかっていない。
-
設計空間には 3 つの領域があり、それらは順次出現した
- コンセンサス (rqlite, dqlite): 単一リーダー、強い整合性、クラスター構造。
- ストリーミング (Litestream): 単一書き込み主体、低コストの復旧、クラスターなし。
- マージ (cr-sqlite など): 複数書き込み主体、漸進的整合性。
- 各領域はそれぞれの問いに対して正しい答えを提供しており、議論の焦点は「どの問いが提起されているか」にある。
-
資金はプラットフォームへ流れ込んだ
- rqlite、dqlite、Litestream はオープンソースで無料だが、複製 SQLite をサービス化し請求書発行の対象としたプロジェクトらは資金調達や買収を受けた。
- これはインフラストラクチャー関連のアイデアにとって usual な運命であり、著者はそれを否定するものではないが、8 年間オープンソースとして存在した後、初めて商品化された点に記録の価値がある。
最後に:rqlite の現在
- rqlite は今も健在である。
- 2014 年以来変わらずに同じ役割を果たしつつ、はるかに良く機能している。
- オープンソースで耐障害性のある RDB を必要とする場合に、支払いをせず、自分で実行して完全に理解できる唯一の選択肢として有効だ。
- 12 年経過後、著者はこの物語における自らの位置づけに満足している。