概要
- Litestream はSQLiteアプリケーション向けのリアルタイムバックアップ・リストアツール
- 新バージョンで パフォーマンス向上 と効率的なポイントインタイムリカバリ(PITR)を実現
- LTXファイルフォーマット による柔軟なトランザクション管理と高速復元
- 世代管理の廃止 でシンプルな運用性を提供
- 今後は VFSによるリードレプリカ 対応も予定
LitestreamとLiteFSの進化
- Litestream はSQLiteアプリケーションの耐障害性を強化するオープンソースツール
- サイドカープロセス として動作し、WALチェックポイントをリアルタイムでオブジェクトストレージへ転送
- サーバ障害時でも 迅速なデータベース復元 を実現
- LiteFS はFUSEファイルシステムを用い、より高度なライブレプリケーションを目指したプロジェクト
- マルチリージョンでのプライマリ・リードレプリカ構成を可能に
- しかし、ユーザーは シンプルなLitestream を選好
- LiteFSで得た知見 をLitestreamへフィードバックし、機能強化を継続
LTXファイルフォーマットの導入
- SQLiteは ページ単位 でデータを管理
- Litestreamは ページ単位の変更 のみを監視
- 自動インクリメントの主キーなど、特定のテーブル構造で復元が非効率になる課題
- LiteFS のために開発された LTXファイルフォーマット をLitestreamにも導入
- LTXは トランザクション単位 での情報保持と 圧縮・コンパクション をサポート
- 複数のLTXファイルを階層的に圧縮し、 任意時点への高速リストア を実現
- Litestream自身が コンパクション処理 を担当し、SQLite本体には依存しない設計
世代管理の廃止と新アーキテクチャ
- 従来は 世代(generation) という概念で複数Litestreamプロセスの競合を回避
- 各世代ごとにバックアップを分離管理
- LTX導入後は世代管理を廃止
- トランザクションID (TXID)による一意な管理へ移行
- WALの連続性が途切れた場合は、新たなLTXファイルで再スナップショット
- 任意時点の状態 をシンプルに参照可能
Litestream v0.5.0へのアップグレード
- 新バージョンは 旧WALセグメントファイル からのリストアに非対応
- アップグレード手順は 新バージョンを導入するだけ で完了
- 旧WALファイルはそのまま保持、 ltxディレクトリ に新LTXファイルを保存
- 設定ファイルは 後方互換性 を維持
- 1データベースにつき1レプリカ先 のみサポート(公式仕様に昇格)
- 複数レプリカの分岐や競合のリスク回避
- コマンド体系も一部変更
- 例: litestream wal → litestream ltx
- TXID 参照の導入
v0.5.0のその他の改善点
- LTXファイルフォーマットライブラリ の強化
- ページ単位の圧縮とインデックス付与で 高速なページ抽出 が可能
- 任意時点クエリや 部分的なデータ取得 機能の拡張基盤
- CGOの排除 と modernc.org/sqlite への移行
- クロスコンパイルやビルド自動化の容易化
- NATS JetStream 向けレプリカタイプを追加
- 既存のJetStream利用者は 追加のオブジェクトストレージ不要
- S3/Google Storage/Azure Blob Storage クライアントの最新版対応
- 新S3 API サポート
今後の展望
- Litestream VFS for read replicas を開発中
- S3から直接ページを読み込みつつ、バックグラウンドでデータベース全体を同期
- 即時レプリカ起動 と高可用性の実現
- PoC(Proof of Concept) はすでに完成、今後のリリースに期待