概要
- celld はCloudflare WorkersとDurable Objectsを自前環境で動作させる オープンソースデーモン
- 各オブジェクトは独立した SQLiteデータベース として管理・S3互換バケットにレプリケーション
- 分散・自己ホスト型設計 で、コントロールプレーンや合意形成なし
- アイドル状態のセルは自動休止、効率的なリソース利用
- 詳細は celld.dev およびドキュメント参照
Self-hosted, distributed Durable Objects「celld」概要
- celld はCloudflare WorkersとDurable Objectsを自身のサーバーで稼働させる オープンソースデーモン
- 各Durable Objectは独自の SQLiteデータベース を持ち、名前でアドレス指定・S3互換バケットにレプリケーション
- ノード間の協調 はバケットのみで行い、コントロールプレーンや合意形成プロトコルは不要
- アプリケーションは 自動的にシャーディング、単一DBの競合や障害範囲を回避
- アイドルセルは自動で休止 し、リソース消費を最小化
仕組み
- 各celldノードは V8エンジンを内蔵、Wranglerバンドルを実行
- S3互換バケット でデプロイメント・状態・所有情報を共有
- Compare-and-swap でセルの所有権を管理、メンバーシップや障害検知・合意形成不要
- 各セルのSQLite DBは常時バケットにレプリケーション
- セルの移動・再起動時はDBを復元し実行再開
- バケットが唯一の信頼ソース、ノードは交換可能
インストール方法
- インストーラーで celldバイナリ をダウンロード
curl -fsSL https://celld.dev/install.sh | sh
~/.local/binをPATHに追加(必要時)- Workerプロジェクトのデプロイには esbuild が必要
- アンインストールは
curl -fsSL https://celld.dev/uninstall.sh | sh
コンテナ実行
- 公式イメージ(Linux x86-64, ARM64)を提供
- ローカル状態永続化とAWS認証情報を環境変数で渡す
- 例:
docker run --rm ghcr.io/denoland/celld --versiondocker run --rm --network host ... ghcr.io/denoland/celld ...
運用・デプロイ方法
- AWS認証チェーン を利用
- S3互換バケットにデプロイ後、celldを同じバケットで起動
- 各ノードは --advertise で他ノードから到達可能なアドレスを指定
- TLS終端なし、ピア間通信は信頼できるプライベートネットワークやWireGuard、Tailscale等の利用推奨
- public IPは禁止 (--unsafe-public-advertiseで明示許可時のみ)
- バケットに fleet/peer-auth.json を作成し、ピア認証・HMAC・リプレイ保護を実施
- バケットとその認証情報へのアクセスは 管理者権限 相当
フリート運用・診断
celld diagnoseでノードリースを列挙・各ピアを直接プローブ- レポートは失敗時も継続、期限切れ・アドレス異常・到達不可・プロトコル不一致を判別
- 各ノードのセル数・WebSocket・RSS・CPU・FD等の統計を表示
- CELLD_MAX_RESIDENT_CELLS 等でセル数・メモリ・CPU制限を設定可能
- プレッシャー下では LRUセルを休止・再割当制御
- アクティブなセルやWebSocket接続中は休止対象外
ソースビルド
cargo build --locked等でビルド・テスト・Lint- プロトコル仕様は crates/celld/protocol.rs に記載
- examples/配下にサンプルプロジェクト
- ランタイム・互換性は進化中、各種テスト・シミュレーションも実施
コントリビューション・ライセンス
- Pull Requestは無効、パッチは git format-patch添付でry@deno.comへメール提出
- ライセンスは Apache-2.0
- パッチ送信時は権利譲渡・ライセンス許諾への同意が必要
- 公開フリート運用時は limitations・securityページ を確認推奨