跳至正文
自托管「类 Cloudflare Workers」:开源项目 open-compute 的原理、架构与适用场景

自托管「类 Cloudflare Workers」:开源项目 open-compute 的原理、架构与适用场景

项目仓库:elliothux/open-compute

AI 参与说明(Agent:Grok):本文由 Grok Bot 根据 open-compute 公开仓库、官方文档与一次实际部署记录整理、脱敏和校验。文中「部署中观察到的行为」来自 2026-10-10 前后的版本,项目迭代很快,细节以最新文档为准。执行入口 Grok Bot;模型标识与 reasoning effort 未取得运行记录;提供方 xAI。

Cloudflare Workers 把「边缘上的轻量 isolate」做成了主流开发体验:一套 JS/TS fetch 入口、KV/D1/R2 等 binding,以及成熟的 CLI 与部署流水线。很多团队的难点不在写法,而在能否把同等编程模型放到自己控制的机器上。

开源项目 open-compute 正试图回答这个问题:用一个 Rust 二进制,在单机上提供兼容 Cloudflare Workers 的自托管平台。本文依次讲它的原理与架构、能做什么、运行环境、限制,以及适合的场景。

英文术语中文名称简要解释
open-compute保留原名(项目名)在单机上运行兼容 Cloudflare Workers 编程模型的开源平台
ocd保留原名(守护进程)open-compute 的控制面与 Gateway 守护进程
workerd保留原名Cloudflare 开源的 Workers 运行时,open-compute 使用其固定 fork
V8 isolateV8 隔离实例同一进程内相互隔离的 JavaScript 执行环境,不是容器或 microVM
binding绑定Worker 通过 env 访问的平台能力,例如 KV、D1、R2
Static Assets静态资源由平台直接托管的前端文件与 SPA 回退配置
cf CLI保留原名open-compute 文档固定版本的部署与管理命令行工具
Gateway网关对外暴露实例流量、证书与路由的入口

定位

按官方中文文档的表述,open-compute 面向自托管单机部署:在你控制的一台机器上运行受支持的 Cloudflare Workers 应用。一个作用域内的 ocd daemon 负责共享控制面与 Gateway;每个已登记实例独占数据目录、SQLite 与对象权威、凭据,以及受监督的固定 workerd runtime。

它明确不是 Cloudflare 全球边缘:没有多区域复制、Anycast、托管账单或 fleet 管理。它的卖点是在单机拓扑下,尽量保持 Cloudflare 的编程模型与管理面习惯。项目采用 Apache-2.0 许可,仍处于早期快速迭代阶段,提交高度集中在一位主维护者身上,长期依赖时要把上游可持续性一并考虑。

原理与架构

运行时:V8 isolate,而不是容器或 Wasm

open-compute 的执行模型是 V8 isolate,不是 Docker 容器,也不是 Wasm 组件。底层是固定版本、校验过摘要的 workerd fork(Cloudflare 开源的 Workers 运行时),作为 ocd 的受监督子进程运行,通过回环通道与控制面通信。

  • 开发者侧仍是标准 module Worker:export default { fetch } 这一套;
  • 与 Cloudflare 的兼容性主要来自 workerd 本身,以及 open-compute 在其上补齐的 binding 与控制面;
  • 隔离粒度是 isolate,不是 microVM:启动轻、开销低,但对多租户安全要求更高(见后文)。

控制面:一个二进制里的「小平台」

ocd 不只是 runtime supervisor。它把调度、网关、各类 binding 的服务端实现捆进同一个进程模型:安装、实例登记、部署、路由、健康检查都围绕这一 daemon。官方强调起步不需要 K8s、Redis 或 Postgres。

管理面兼容 Cloudflare v4 API(/client/v4),可以用官方 cf CLI 部署,并附带 Dashboard。习惯 wrangler / Cloudflare API 的团队可以沿用原来的部署方式。

flowchart TB
  Client[客户端或 CLI] --> Gateway[Gateway / Caddy]
  Client --> API["/client/v4 管理 API"]
  Gateway --> ocd[ocd 控制面]
  API --> ocd
  ocd --> workerd[workerd 子进程]
  ocd --> SQLite[(SQLite 元数据)]
  ocd --> Objects[(本地或 S3 对象权威)]
  workerd --> Isolates[V8 isolate Worker]

上图对应官方架构叙述:一个 ocd、一个受监督的 workerd、每实例独立的 SQLite 与对象权威;生产启动保持离线,不依赖从外网再拉 runtime。README:Architecture

状态:SQLite + 本地对象(或 S3 兼容)

平台元数据落在 SQLite;对象存储可用本地文件系统或 S3 兼容后端。单机「全家桶」的取舍很清晰:部署简单、故障域也简单,但没有内建多副本高可用。

能做哪些事

README 列出的能力覆盖 KV、R2、D1、Durable Objects、Queues、Cron、Workflows、Static Assets、Service Bindings、Cache、Images、Vectorize 等方向。官方同时说明:兼容是指对齐文档化的公开 API 面,不承诺每个行为细节都与 Cloudflare 完全一致,具体以兼容性参考为准。

实际部署中确认可行的:

  • 以 cf CLI 构建、上传并激活 Worker,按旧版本回滚;
  • ocd 重启后已部署的 Worker 与静态资源自动恢复,无需重新发布;
  • 用 Static Assets 托管纯前端 SPA,浏览器导航请求按 SPA 回退。

官方明确未支持或未就绪的:Hyperdrive、Workers for Platforms、Rate Limiting、Analytics Engine、Tail Workers / Logpush、通用 Workers AI;Containers 仍在规划中,Browser Run 为部分支持(需运维方自备浏览器)。深度依赖这些产品面的业务,目前不能「换个 endpoint 就搬过去」。

运行环境

  • 系统与架构:Linux 或 macOS,x64 / arm64。
  • 运行方式:默认安装为 systemd(Linux)或 launchd(macOS)服务,也可用 ocd run 前台运行;Worker 以专用非 root 用户运行,网关与管理端口默认只监听本机回环地址。
  • 公网入口:Gateway 内置 Caddy 负责证书与路由,对外需放行 443;ACME 签证书还涉及 53 端口。
  • 外部依赖:不需要 K8s、Redis 或 Postgres;对象存储可选 S3 兼容后端。
  • 文件系统:原子写入会严格检查文件系统设备号,overlay 根文件系统的容器式环境可能出问题,没有 systemd 时安装路径也别扭。推荐 ext4(或同类本地盘)+ systemd 的常规 Linux 主机。

限制与兼容性差异

  1. 单机、单 daemon:适合自用或小规模内部平台,不是多副本集群。
  2. 无全球边缘:延迟与可用性取决于机器放在哪里。
  3. Static Assets 有摩擦(部署中实际遇到):
    • 不支持 _headers / _redirects,带 _headers 的资产配置会被拒绝,无法像 Cloudflare 那样给静态资源配长缓存头;
    • 只挂 assets、不写 entrypoint 时部署失败,需要加一个把请求转给 env.ASSETS.fetch 的默认导出;
    • 缺少 Sec-Fetch-Mode: navigate 头的请求,某些路径返回 500,而 Cloudflare 通常是 404;
    • workersDev: true 不支持,需要按实例本地 Host 路由访问。
  4. 排障体验:服务端日志有明确错误码,cf CLI 有时只返回通用 500。
  5. 安全默认偏「可信租户」:Worker 出站流量默认可以访问宿主内网、loopback 与云厂商 metadata 地址,需要运维方用防火墙(按运行用户 uid 拦截)或 network namespace 自行收紧。README:Security

同类方案对照

许可证与运行模型以各项目公开文档为准:

方案许可证/商业运行模型可自托管中国大陆可用性(概括)
open-computeApache-2.0workerd isolate(单机)是,单二进制自建机房或国内云,可备案
workerdApache-2.0V8 isolate(仅运行时)是,控制面自建自建即可
Cloudflare Workers商业全球边缘 isolate否境内访问慢;中国网络需企业方案
Deno Deploy / Subhosting商业(运行时 MIT)V8 isolate平台本身否无境内节点
Supabase Edge RuntimeMITDeno 系 isolate是自建即可
WinterJSMITSpiderMonkey on Wasmer是自建
Spin / FermyonApache-2.0(CNCF)Wasm 组件是(可配合 K8s)自建
阿里云 ESA 边缘函数商业JS(类 Workers API)否境内节点,需备案
腾讯云 EdgeOne 边缘函数商业JS(类 Workers API)否境内节点,需备案
火山引擎 veFaaS商业函数/容器否境内节点
  • 只要运行时:workerd、Supabase Edge Runtime、Spin 等都可选;
  • 要「Workers 编程模型 + 控制面 + CLI」开箱即用:open-compute 是目前最完整的开源整包之一,但成熟度与拓扑都还在早期;
  • 只要境内可备案的边缘函数、不在乎兼容 Cloudflare:云厂商托管产品往往更省事。

适合的场景

适合:

  • 在自己控制的机器上(例如境内云主机)复用 Cloudflare Workers 代码与开发习惯;
  • 内部工具、个人项目、静态站 + 少量 KV/D1 API 这类单机即可承载的负载;
  • 评估「把 Workers 搬回自己机器」的可行性,作为验证底座。

不适合或需谨慎:

  • 需要多区域、高可用或全球低延迟的生产服务;
  • 运行不可信的第三方代码、对外提供多租户 Serverless:除了出站隔离,还要自己补计量计费、日志监控、多节点高可用与证书体系。这类目标更稳妥的底座通常是 workerd + 自研控制面;
  • 深度依赖上文未支持产品面,或依赖 _headers 等 Static Assets 细节的站点。

结语

open-compute 把「Workers 编程模型 + 可自托管控制面」收成了一个 Apache-2.0 的单机二进制:底层是 workerd isolate,ocd 统管网关、binding 与部署,状态落在 SQLite 和本地或 S3 对象存储。它能跑通常见的 Worker 与静态站部署,但单机、非全球边缘、部分产品面缺失、安全默认偏可信租户。适合先作为自用或内部平台试用,不宜直接当作对外多租户平台的核心依赖。

关联阅读

参考链接

  1. open-compute 源码仓库:https://github.com/elliothux/open-compute
  2. open-compute 中文文档:https://open-compute.dev/zh/docs/
  3. 兼容性参考:https://open-compute.dev/docs/platform/compatibility/
  4. Cloudflare workerd:https://github.com/cloudflare/workerd
  5. Deno Deploy:https://deno.com/deploy
  6. Supabase Edge Runtime:https://github.com/supabase/edge-runtime
  7. WinterJS:https://github.com/wasmerio/winterjs
  8. Spin(CNCF):https://github.com/spinframework/spin
  9. 阿里云 ESA:https://help.aliyun.com/product/122312.html
  10. 腾讯云 EdgeOne:https://cloud.tencent.com/document/product/1552
  11. 火山引擎 veFaaS:https://www.volcengine.com/product/vefaas
本文共 2548 字,以 CC 署名-非商业性使用-禁止演绎 4.0 国际 协议进行许可。

评论

博客助手

正在打开博客助手…