Featured image of post 为什么选择 Cloudflare Workers 而不是传统 VPS

为什么选择 Cloudflare Workers 而不是传统 VPS

背景

开发 RuiToolAI 时,我先得解决一个很现实的问题:部署在哪里?

传统方案是买一台 VPS(如阿里云、AWS EC2),装 Docker,跑 Node.js 服务。但作为一个独立开发者,我不希望把时间花在运维上。于是我调研了 Cloudflare Workers 这个 Serverless 方案,最终决定把整个项目跑在它上面。

最后我选了 Cloudflare Workers。下面记录当时的取舍,以及后来真正碰到的限制。

方案对比

传统 VPS 方案

架构:

1
用户 → Nginx → Node.js 服务 → 数据库

优点:

  • 成熟稳定,生态丰富
  • 无运行时限制,可以跑长时间任务
  • 完全控制服务器环境

缺点:

  • 需要自己管理服务器(安全补丁、系统更新、证书续期)
  • 需要自己配置负载均衡和扩容
  • 单地域部署,国内访问国外 VPS 延迟高,反之亦然
  • 费用固定,即使没流量也要付月费

Cloudflare Workers 方案

架构:

1
用户 → Cloudflare 全球边缘节点 → Workers → D1/KV/R2

优点:

  • 全球 330+ 边缘节点,就近响应
  • 零运维,不用管服务器
  • 按量付费,没流量不花钱
  • D1、KV、R2 原生集成,不需要额外配置连接

缺点:

  • CPU 时间限制(免费版 10ms,付费版 30s)
  • 不支持 WebSocket 长连接
  • 生态相对较新,部分 npm 包不兼容

Cloudflare Workers 的优势

1. 全球边缘部署,零冷启动

Workers 部署在 Cloudflare 的全球边缘网络上,用户请求会被路由到最近的节点处理。我测试过从国内访问部署在 Workers 上的 RuiToolAI,响应时间在 100-200ms 左右,而同样的应用部署在美西 VPS 上,延迟在 300-500ms。

2. 原生集成 D1/KV/R2

这一点非常重要。传统方案里,你需要:

  • 配置数据库连接字符串
  • 处理连接池
  • 管理文件存储(如 S3 SDK)

而在 Workers 里,这些都是原生 binding:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const { env } = await getCloudflareContext();

// D1 数据库
const db = getDB();

// KV 缓存
await env.NEXT_INC_CACHE_KV.put(key, value);

// R2 文件存储
await env.USER_UPLOADS_BUCKET.put(key, buffer);

3. GitHub Actions 自动化部署

推送代码到 GitHub → 自动 lint → typecheck → e2e 测试 → 构建 → 部署到 Workers → 执行 D1 迁移。整个过程全自动,不需要手动操作服务器。

成本分析

以 RuiToolAI 为例,目前的使用情况:

服务免费额度当前用量费用
Workers10 万请求/天~5000/天免费
D15GB 存储 + 500 万读/天<1%免费
KV1GB 存储 + 10 万读/天~50%免费
R210GB 存储<1GB免费

对比传统 VPS:

  • 最低配置 VPS:$5-10/月
  • Cloudflare Workers:$0/月(当前用量),流量增长后 $5/月 起步

踩过的坑

1. CPU 时间限制导致异步任务失败

最开始我用 waitUntil 在后台轮询 AI 生成结果,但 Workers 的 setTimeout 不会真正 sleep,导致轮询瞬间跑完。

解决方案: 改用前端轮询 Server Action。每次轮询是一个独立请求,不受 30 秒限制。

2. D1 不支持事务

SQLite 在 D1 上不支持多语句事务,这在处理积分退款时很麻烦。

解决方案: 补偿式设计。先扣积分,失败时插入退款记录补充余额。

3. 某些 npm 包不兼容

Workers 不支持 Node.js 原生模块(如 fs、net、crypto 的部分 API)。需要用 Web Crypto API 替代,或者找 Workers 兼容的替代包。

总结

场景推荐方案
SaaS 产品、API 服务、静态网站Cloudflare Workers
长时间任务(视频处理、模型训练)传统 VPS
需要 WebSocket 长连接传统 VPS
低预算、低流量项目Cloudflare Workers

对 RuiToolAI 当时的规模和功能来说,Workers 比 VPS 省心,成本也更好控制。它不适合长时间计算和依赖 Node.js 原生模块的任务,所以这个选择是匹配当前需求,不是说 Workers 在所有场景下都更好。

参考资源

使用 Hugo 构建
主题 Stack 由 Jimmy 设计