← На главную

celld запускает Cloudflare Workers и Durable Objects без control plane

05.08.2026 16:50 · hackernews

celld — это открытый демон, который запускает Cloudflare Workers и Durable Objects на ваших собственных машинах. Каждый объект — отдельная SQLite-база, которая адресуется по имени и реплицируется в S3-совместимое хранилище. Узлы координируются только через этот bucket: никакого control plane, никакого консенсуса. Каждый объект — маленькая база, поэтому приложение шардируется само собой: проблемы конкуренции и масштаб отказа общей базы исключены на уровне архитектуры, а не «лечатся» в рантайме. Простаивающие ячейки засыпают почти до нуля.

Каждый узел celld встраивает V8 и исполняет Wrangler-бандлы. Флот использует общий S3-совместимый bucket, где лежат деплои, состояние ячеек и небольшие записи о владении. Compare-and-swap объектного хранилища гарантирует, что ячейкой владеет ровно один узел — без протокола членства, детектора отказов и сервиса консенсуса. celld постоянно реплицирует SQLite-базу каждой ячейки в bucket. Когда ячейка переезжает или просыпается, новый владелец восстанавливает базу и продолжает выполнение. Bucket — надёжный источник истины, узлы заменяемы.

Установка — простой скрипт: curl -fsSL https://celld.dev/install.sh | sh. Проверка подлинности через gh attestation verify. Если установщик попросит — добавьте ~/.local/bin в PATH. Для celld deploy нужен esbuild на PATH (для asset-only проектов не нужен). Удаление — через отдельный uninstall.sh. Релизный образ опубликован для Linux x86-64 и ARM64 на ghcr.io/denoland/celld. Для Docker нужно пробросить локальное состояние и стандартные AWS-переменные окружения, как в примере из документации.

Деплой — это просто загрузка в S3-совместимый bucket, после чего запускается celld против того же bucket. Все узлы подхватывают последний успешно закоммиченный деплой из deploy/current.json. Полный список флагов — в celld --help.

Peer HTTP не завершает TLS. Адреса нужно держать в доверенной частной сети или в зашифрованном оверлее типа WireGuard или Tailscale. Публичный IP отклоняется, если явно не указать --unsafe-public-advertise. Первый узел создаёт fleet/peer-auth.json в bucket. Все peer-запросы версионированы, привязаны к телу, HMAC-аутентифицированы, ограничены по времени и защищены от повтора. Доступ к bucket приравнивается к администрированию флота.

Диагностика через celld diagnose перечисляет аренды узлов, делает подписанный пробный запрос к каждому живому пиру и отличает устаревшие записи, битые адреса, недостижимые узлы и несовместимые протоколы. Также показывает примерное потребление памяти, CPU, файловых дескрипторов и давление.

Сброс давления (pressure shedding) опционален. Можно задать верхний и нижний пороги резидентных ячеек через CELLD_MAX_RESIDENT_CELLS и CELLD_RESIDENT_LOW_WATER, на Linux дополнительно CELLD_MAX_RSS_MB и CELLD_MAX_CPU_PERCENT. Под давлением celld реплицирует и «заборачивает» наименее использованные ячейки, публикует их как свободные и не берёт новые, пока не вернётся к нижней отметке. Ячейки с активной работой и живыми WebSocket не трогаются.

Код собирается через cargo build --locked, тесты и clippy тоже с --locked. Версионированный протокол объектного хранилища лежит в crates/celld/protocol.rs. Pull requests отключены — можно отправить git format-patch на ry@deno.com, подписав Contributor License Agreement с передачей прав Deno Land Inc. Лицензия — Apache-2.0. Перед запуском публичного флота стоит прочитать страницы limitations и security.

Читать оригинал →