世界を動かす技術を、日本語で。

Celld: 自己ホスト型の分散耐久オブジェクト

2026年8月6日原文(github.com)

概要

  • 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 --version
    • docker 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ページ を確認推奨

Hackerたちの意見

これはタイミングが良すぎるね。彼らは知ってたのかな?ずっと温めてたのかも。CloudFlare OS: https://blog.cloudflare.com/cloudflare-os/ https://news.ycombinator.com/item?id=49182996 それと、celldはアイソレートされてる!v8のアイソレーション境界内での超軽量なやつだよ。だから「非常に低いアイドルコスト」ってわけ。Denoチームは新しいランタイムを作ったんだ!deno_coreなしでね!2022年のこの素晴らしい投稿に感謝!: https://deno.com/blog/roll-your-own-javascript-runtime https://news.ycombinator.com/item?id=35819990 https://news.ycombinator.com/item?id=35819990 たくさんのソフトウェアが低プロファイルで動く時代が来て、本当にワクワクするよ。信じられないほどのRAMの圧迫状態に対して、またタイミングが良すぎる。次は、できればv8のようなランタイムがあって、複数のアイソレート間でライブラリを共有できるようになればいいな!共有コードと共有データを分けるのは、ライブラリのインスタンスを複数持つのが難しそうだね。(Wasmにはここに大きな可能性がある気がするし、サンドボックス化しながらコード共有が本当に可能だという明確な信号を待ち望んでるよ)

いよいよ古いSOAの領域に入ってきたね…データ交換がパイプ上のサービスと同じくらい確率的になる。

これは本当に驚異的なオーダーの大きさだね。

次に、理想的には、いつかはv8のようなランタイムがあって、複数のアイソレート間でライブラリを共有できるようになるといいな!多分、君のポイントを見落としてるけど、wasmメモリってまさにこれを実現してるんじゃない?wasmtimeの例を挙げると: https://docs.wasmtime.dev/examples-multimemory.html

これをスポットインスタンスで動かす方法が必要だね。

なんでダメなの?誰かがスポットインスタンスが死んだときに新しいインスタンスを立ち上げるシンプルなLambdaを書いたことがあるから、常に少なくとも1つは動いてるよ。

やっと来た!1つのプロバイダーの外で耐久オブジェクトを動かすサポートが見れて嬉しい。アップボートしたよ。「耐久オブジェクト」って概念は、価値のある抽象化として繰り返し示されてる。「各オブジェクトは自分自身のSQLiteデータベースで、名前でアドレス指定され、あなたの所有するS3互換バケットに複製される」—この概念は、その力とシンプルさで大きな可能性を秘めてる。

https://rivet.dev/actors/をチェックしてみて!

このコンセプトはずっと前からあったよね。

いいね!最初からローカルで動かせて、簡単に遊んだりプロトタイピングできるようにS3を設定しなくて済むと最高だな。

もしかしたら、Wranglerがそれをやるのにいい方法かもしれないね。

celldとCloudflare Workersのオープンソース版workerdの違いって何?

Hacker Newsで議論の続きを見る