跳转到内容

扩展

Operator 拥有的原生扩展;用户 Worker 通过普通 Service Binding 调用。

扩展是 operator 放在本机、由 ocd 在启动时加载一次、并以 Service Binding 目标暴露的代码。用户 Worker 仍用 Wrangler servicesprops 绑定。没有新的公开 Binding 类型。

扩展不是 tenant 上传的 native code,不是安装器或插件市场,也不是第二个 workerd。Cloudflare 托管 Workers 没有这条原生 Provider 路径;这是 open-compute 在 macOS 与 Linux 上的明确超集。

每个配置名字指向一个本地目录:

[extensions.local-files]
path = "./extensions/files"

路径相对实际加载的 ocd config file 解析。目录必须包含严格的 extension.toml,分别命名一个 facade Worker 模块和一个 native Provider 可执行文件。启动时以 no-follow 打开这些文件,检查大小和可执行权限,并固定已打开 executable 的 SHA-256 与 FD。错误的 manifest、缺失文件或符号链接都会 fail closed:ocd 不会启动。

用户 Worker 调用的是普通 Service Binding。service 是扩展名字,不是 Worker ID:

{
"services": [
{
"binding": "FILES",
"service": "local-files",
"props": { "directory": "invoices" }
}
]
}

ocd 把 facade 作为 Service 目标加载,注入不可变的 ctx.props,并且只把私有 HOST 端口交给这个 facade。普通 Worker 拿不到 HostExtensionFactory、session identity、Provider 路径、原始 FD 或平台凭据。

事实 合同
所有者 放置文件并写入配置的 operator
加载时机 ocd 启动;替换文件后重启才使用新实现
Runtime 同一个受监督的 pinned workerd;Provider 是另外的宿主进程
用户 API Wrangler services + props / ctx.props;仅 facade 拥有 HOST.call / HOST.stream
名字空间 扩展名与 live Worker 的 service 名字共用 namespace
持久化 部署固定扩展名字、entrypoint 和 canonical props,不固定文件字节

移除扩展不会 fallback 到同名 Worker;调用方看到 unavailable。

Day1 不负责安装、下载、版本管理、热更新、授权、marketplace、进程池、HTTP fallback 或 OS sandbox。ocd 不加载动态库,也不执行 tenant native code。兼容性、宿主文件系统权限、升级和回滚由 operator 负责。

继续阅读: