7.0
热点
AI SCORE
开源项目2026-01-01 23:09
OpenWorkers:用Rust实现自托管云函数
Hacker News · openworkers.com#开源#无服务计算#Rust
Editor brief · 编辑速览
Rust开源项目实现Cloudflare Workers兼容的自托管方案,让开发者可独立运维无服务计算基础设施。
OpenWorkers 是一个开源运行时,用于在 V8 isolates 中执行 JavaScript。它将 Cloudflare Workers 的编程模型带到你自己的基础设施上。
export default {
async fetch(request, env) {
const data = await env.KV.get("key");
const rows = await env.DB.query(
"SELECT * FROM users WHERE id = $1",
[1]
);
return Response.json({ data, rows });
}
};
export default {
async fetch(request, env) {
const data = await env.KV.get("key");
const rows = await env.DB.query(
"SELECT * FROM users WHERE id = $1",
[1]
);
return Response.json({ data, rows });
}
};
• KV 存储(get、put、delete、list)
• PostgreSQL 数据库
• S3/R2 兼容存储
• 环境变量与机密
• fetch、Request、Response
• TextEncoder/Decoder、Blob
• setTimeout、AbortController
┌─────────────────┐
│ nginx (proxy) │
└────────┬────────┘
│
┌───────────────┬────────┴──┬───────────────┐
│ │ │ │
│ │ │ │
┌────────┸────────┐ ┌────┸────┐ ┌────┸────┐ ┌────────┸────────┐
│ dashboard │ │ api │ │ logs * │ │ runner (x3) * │
└─────────────────┘ └────┬────┘ └────┰────┘ └────────┰────────┘
│ │ │
│ │ │
┌────────┸────────┐ │ ┌────────┸────────┐
│ postgate * │ └──────┥ nats │
└─────────────────┘ └────────┰────────┘
│
│
┌─────────────────┐ ┌──────┴───────┐
* ─────┥ PostgreSQL │ │ scheduler * │
└─────────────────┘ └──────────────┘
+-------------+
| nginx proxy |
+------+------+
|
+-------+-------+-------+--------+
| | | |
+--+--+ +--+--+ +--+---+ +----------+-+
| dash| | api | |logs *| | runner * x3|
+-----+ +--+--+ +--+---+ +-----+------+
| | |
+-----+----+ | +------+-----+
|postgate *| +----+ nats |
+-----+----+ +------+-----+
| |
+-----+------+ +------+-----+
*-| PostgreSQL | | scheduler *|
+------------+ +------------+
V8 Isolates:沙箱隔离,每个 worker 的 CPU(100ms)和内存(128MB)有限制。
Cron 调度:内置支持 5 或 6 字段的 cron 语法。
兼容性:与 Cloudflare Workers 语法兼容。
部署设计得很简单。你只需要一个 PostgreSQL 数据库和一个 Docker Compose 文件。
git clone https://github.com/openworkers/openworkers-infra
cd openworkers-infra && cp .env.example .env
docker compose up -d postgres
# Run migrations, generate token
docker compose up -d
git clone https://github.com/openworkers/openworkers-infra
cd openworkers-infra && cp .env.example .env
docker compose up -d postgres
# Run migrations, generate token
docker compose up -d
该项目已经发展了大约 7 年。我最初尝试用 vm2 来沙箱化 JavaScript,然后 Cloudflare 推出了 Workers,我就被这个模型吸引了。当 Deno 出现时,我切换到 deno-core 并运行了两年。最近,在 Claude 的帮助下,我直接在 rusty_v8 的基础上重写了一切。
目标始终是一样的:在你自己的服务器上运行 JavaScript,具有与 Cloudflare Workers 相同的开发体验,但没有供应商锁定。
接下来:执行记录和回放,用于确定性调试。