一年前我把个人项目从一台 2C4G 的云服务器迁到了 Cloudflare,账单从每月 60 元变成 0 元。但省钱不是重点,重点是运维时间从每周两小时变成了零。这篇文章说说真实体验。
免费额度到底有多少
| 产品 | 免费额度 | 个人项目够用吗 |
|---|---|---|
| Workers | 每天 10 万次请求,10ms CPU/请求 | 绰绰有余 |
| D1 | 5GB 存储,每天 500 万行读 | 存十万篇文章都没问题 |
| R2 | 10GB 存储,出站流量免费 | 图片站的核心优势 |
| KV | 1GB 存储,每天 10 万次读 | 适合配置、会话、小文件 |
关键点在于:R2 不收出站流量费。传统对象存储最贵的往往就是流量,一个被爬虫盯上的图片站,一个月能烧掉几百块。
一次请求到底发生了什么
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
// 1. 静态资源直接由边缘网络返回,不进入 Worker
// 2. 动态请求命中最近的边缘节点(全球 300+)
if (url.pathname === '/api/posts') {
const { results } = await env.DB
.prepare('SELECT id, title, slug FROM posts WHERE status = ? ORDER BY published_at DESC LIMIT 20')
.bind('published')
.all();
return Response.json({ posts: results });
}
return new Response('Not Found', { status: 404 });
},
};
请求不会回到某个「源站」,而是在离用户最近的节点上执行。上海用户访问的是香港或新加坡节点,延迟从 200ms 掉到 30ms 以内。
三个必须提前接受的限制
1. CPU 时间只有 10ms(免费版)
注意是 CPU 时间,不是墙钟时间。等待 D1 查询、等待 fetch 返回都不算——但纯计算算。
这也是为什么在这种平台上做密码哈希要小心:
// PBKDF2 10 万次迭代大约要几十毫秒 CPU
// 免费版可能直接抛 "Worker exceeded CPU time limit"
// 解决方式:降低迭代次数,或者把认证放到需要付费的计划上
const bits = await crypto.subtle.deriveBits(
{ name: 'PBKDF2', salt, iterations: 50000, hash: 'SHA-256' },
key,
256,
);
2. 没有常驻进程
不能开一个长连接的后台线程。需要「定时」就用 Cron Triggers:
# wrangler.toml
[triggers]
crons = ["0 2 * * *"] # 每天凌晨 2 点
export default {
async scheduled(event, env, ctx) {
ctx.waitUntil(cleanupExpiredSessions(env));
},
};
3. 数据库不是 Postgres
D1 是 SQLite。没有存储过程、没有复杂的并发控制、ALTER TABLE 能力有限。
好消息是:对读多写少的博客、文档站、小工具,SQLite 完全够用。坏消息是:如果你的业务需要频繁的事务冲突处理,会很难受。
适合与不适合的清单
适合:
- 内容站、博客、文档站
- API 网关、鉴权层、BFF
- 图片/文件处理与分发
- Webhook 接收与转发
不适合:
- 长连接、WebSocket 聊天室(虽然 Durable Objects 能做,但复杂度陡增)
- 视频转码、PDF 生成这类重 CPU 任务
- 需要 Postgres 扩展能力的复杂业务
迁移时踩过的坑
ctx.waitUntil是异步统计的关键。浏览量自增不该阻塞响应:
if (post.status === 'published') {
ctx.waitUntil(incrementViews(env.DB, post.id));
}
环境变量与本地开发要分离。
wrangler dev用.dev.vars,线上用wrangler secret put,不要把密钥写进vars。数据库迁移一定要版本化。D1 的
migrations目录配合wrangler d1 migrations apply是最省心的方式,别手动改线上表结构。
小结
如果你的项目是「读多写少 + 不需要长连接 + 计算不重」,那 Cloudflare 这套组合是目前性价比最高的选择:没有服务器要打补丁,没有磁盘要扩容,也没有流量账单。
反过来,如果你的业务核心是复杂的写入事务或者长连接状态,那还是老老实实用一台 VPS 更省心。